Após a resposta de Karan, acho que isso é um pouco inútil agora, mas tendo passado algum tempo nisso, decidi compartilhá-lo de qualquer maneira.
Como dito anteriormente, a melhor maneira de atender à necessidade é um aplicativo que "aprimora" a barra de tarefas do Windows 7 de forma a tornar o número de janelas agrupadas exibido apenas no ícone relativo, mas parece que não existia então pensei em criar um sozinho.
Bem, eu acho que a linguagem a seguir neste caso deve ser MS C ++ .NET (nem mesmo o C # pode ser adequado para o propósito, eu acho ...) e já que eu definitivamente não sou habilidoso o suficiente para conseguir isso agora (e eu não acho que eu vou ter tempo para se tornar de qualquer maneira) a coisa que eu fiz para obter uma espécie de solução "aceitável" para as minhas necessidades tem sido modificar este script AHK da seguinte forma:
;;WARNING NOTE 1: does't count grouped open folders
;;WARNING NOTE 2: opened Windows Media Player counts as 4 instances
;;WARNING NOTE 3: count fails in the remote hypothesis that, for example, a folder named ".pdf - Adobe Reader" is open
;; based on http://www.autohotkey.com/board/topic/35867-winget-count-is-telling-me-i-have-6-windows-open-but/
#SingleInstance, force
Gui, add, text, , Windows count (including not grouped ones) =
Gui, add, text, x+5 vcount, XX
Gui, add, edit, xm r20 vWList w400 -wrap +0x100000 +readonly
Gui, Show
GoSub, checklist
SetTimer, checklist, 3000
return
checklist:
WinGet, count, count
WinGet,current,List
nocount = 0
last_app_name = %A_Space%- %A_Tab% ; something that surely can't be used for files/folders file... Tip: anyway "Start" should always be the first element of the list
myArray := Object()
log = grouped applications instances:
loop, %current% {
WinGetTitle, tTitle, % "ahk_id " current%A_Index%
if tTitle is space
{
nocount += 1
}
else if (tTitle == A_ScriptName || tTitle == "Start" || tTitle == "Program Manager" || tTitle == "Default IME" || tTitle == "HTA Test" || tTitle = "C:\Windows\system32\cmd.exe") ; note == for everything except = path as case may vary on different PCs
{
nocount += 1
}
else
{
temp_FoundP := InStr(tTitle, last_app_name, 0)
if ((temp_FoundP != 0 ) && (last_app_name == substr(tTitle, temp_FoundP) ))
{
myArray[last_app_name] += 1
}
else
{
temp_FoundP := InStr(tTitle, " - ", 0)
if (temp_FoundP != 0) {
last_app_name := substr(tTitle, temp_FoundP)
}
else {
last_app_name = %A_Space%- %A_Tab%
}
if myArray[last_app_name] {
myArray[last_app_name] += 1
}
else { myArray[last_app_name] := 1
}
}
}
}
remaindercount = 0
For key, value in myArray
{
;MsgBox %key% = %value% ; DELETE THIS LINE
if (key == "-" || value == 1) {
remaindercount += value
}
else {
log .= "'n" key " = " value
}
}
if remaindercount > 0
log .= "'n(remaining = " remaindercount ")"
; Sort, log, C ; uncomment this to sort by name
count -= nocount
GuiControl, , count, %count%
GuiControl, , WList, %log%
return
GuiClose:
ExitApp
NOTA FINAL: esta foi a minha primeira vez com o AHK e estou sempre com pressa, então minha codificação pode não ser "ótima" e totalmente testada ... além disso, existem algumas limitações (leia as notas de aviso).
De qualquer forma, como disse, acho que isso não é mais útil depois que Karan responder (que aceitei como solução), mas qualquer um capaz de sugerir uma forma / solução mais conveniente (outra aplicação similar ou alguma codificação em uma linguagem de programação mais séria) AHK por exemplo ... bem, ok, talvez isso é mais matéria stackoverflow) ainda é bem-vinda.
Muito obrigado.