Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recuperer Titre des fenetres

20 réponses
Avatar
rikki92
Hello, Bonjour,

Voila apres plusieurs jours de recherche je m'en refere a vous.

Je cherche a recuperer par script le titre des fenetres en cours.
J'ai essayé les outils classiques, pslist, tlist, list aucune ne donne le
nom des fenetres..ou partiellement.Le meilleur etant tasklist /v sous xp..

Par contre et c'est ca qui me rend fou (?) c'est que le gestionnaire des
taches de windows onglet applications les donne bien lui..
Je recherche donc a avoir la meme chose que le gestionnaire des
taches...mais par script..tout simplement...ni plus ni moins ..

Ces fenetres dont j'essaye de recuperer le titre sont des fenetres
java..voila pourquoi certains scripts de process ne les retournenet pas .
j'ai essayé scriptomatic , avec recherche process, qui me donne que
l'objitem caption (mais ce n'est pas le title de la fenetre, arf..) ..

Bref je pense que ca doit etre assez simple en vbs ou autre mais pour
l'instant je nage..
Si vous pouviez m'aider, car pour l'instant je n'ai trouvé comme solution
que de faire un scan automatisé de copie d'ecran .et cela me prend bp de
ressources machine.. .ne riez pas .. ^^

Jai essaye aussi via wmi mais comme , l'ensemble tourne sous une image OS il
me renvoit les process de la station hote..
A votre bon coeur..

Merci ..car je deprime :-)

10 réponses

1 2
Avatar
Jacques Barathon [MS]
"rikki92" wrote in message
news:
Hello, Bonjour,

Voila apres plusieurs jours de recherche je m'en refere a vous.

Je cherche a recuperer par script le titre des fenetres en cours.
J'ai essayé les outils classiques, pslist, tlist, list aucune ne donne le
nom des fenetres..ou partiellement.Le meilleur etant tasklist /v sous
xp..


Avec PowerShell j'écrirais cette ligne:

(new-object -com shell.application).windows() | format-table location*

En l'occurrence, location* correspond aux deux propriétés locationName et
locationURL. Ca devrait correspondre à ce que tu cherches.

Ecrire l'équivalent en VBScript ne devrait pas être un gros problème,
Shell.Application étant un objet COM et les objets COM étant accessibles en
VBScript.

Jacques

Avatar
rikki92
Merci Jacques de t' interesser a mon probleme.
J'ai lu et parcouru le web de long en large sans rien trouver .
J'ai power shell , mais je ne l'avais pas encore installé sur ma machine.

Pour info , j'avais trouvé un tout debut de reponse pour recuperer les
windows title en vbs, mais ne connaissant rien en vbs . De plus la personne
l'encapsulait dans une box.
http://www.vbaccelerator.com/home/VB/Code/Libraries/Windows/Enumerating_Windows/article.asp
Il donnait meme l'exe , tout fait .Mais bon ce n'etait pas un script en
ligne de commande
Je vais tester au plus vite ta solution .. :-)
Car j'en ai un peu assez d'avoir une machine qui tourne a 60 %
continuellement .. avec le bruit du ventilo qui souffle .

Thx .

"rikki92" wrote in message
news:
Hello, Bonjour,

Voila apres plusieurs jours de recherche je m'en refere a vous.

Je cherche a recuperer par script le titre des fenetres en cours.
J'ai essayé les outils classiques, pslist, tlist, list aucune ne donne le
nom des fenetres..ou partiellement.Le meilleur etant tasklist /v sous
xp..


Avec PowerShell j'écrirais cette ligne:

(new-object -com shell.application).windows() | format-table location*

En l'occurrence, location* correspond aux deux propriétés locationName et
locationURL. Ca devrait correspondre à ce que tu cherches.

Ecrire l'équivalent en VBScript ne devrait pas être un gros problème,
Shell.Application étant un objet COM et les objets COM étant accessibles en
VBScript.

Jacques








Avatar
Jean
"rikki92" wrote in message
news:
Hello, Bonjour,

Voila apres plusieurs jours de recherche je m'en refere a vous.

Je cherche a recuperer par script le titre des fenetres en cours.
J'ai essayé les outils classiques, pslist, tlist, list aucune ne donne le
nom des fenetres..ou partiellement.Le meilleur etant tasklist /v sous xp..


Avec PowerShell j'écrirais cette ligne:

(new-object -com shell.application).windows() | format-table location*

En l'occurrence, location* correspond aux deux propriétés locationName et
locationURL. Ca devrait correspondre à ce que tu cherches.

Ecrire l'équivalent en VBScript ne devrait pas être un gros problème,
Shell.Application étant un objet COM et les objets COM étant accessibles en
VBScript.

Jacques


Ca ne donnera que les tites des fenêtres IE (et sous certains Windows
les titres de l'Explorateur).

Je ne pense pas que WMI ou autre dispose de méthode pour ça.
Un passage au brouteur de com pour s'en assurer.

Il y a l'utilitaire cmdhow
http://www.commandline.co.uk/cmdow/index.html qui permet de récupérer
les titres des fenêtres.

Sinon développer un ocx ou autre en utilisant la fonction d'api
GetWindowText :
http://msdn2.microsoft.com/en-us/library/ms633520.aspx

Amicalement,

--
Jean - JMST
Belgium


Avatar
MCI (ex do ré Mi chel la si do) [MVP]
Bonsoir !

Ce genre de chose, c'est typiquement la cible d'Autoit.
Voici un petit exemple, qui donne la liste des fenêtres ayant un titre, ainsi que les handles
correspondants :

$var = WinList()
$result=""
For $i = 1 to $var[0][0]
If $var[$i][0]<>"" Then
$result &= $var[$i][0] & " handle: " & $var[$i][1] & @CRLF
EndIf
Next
MsgBox(0,"Fenêtres",$result)


Pour les titres, attention : il y a souvent des titres affichés différents des titres des fenêtres.
Par exemple, avec Internet-Explorer, le titre de la fenêtre est :
Windows Internet Explorer (sous Vista)
alors que le titre affiché peut-être :
http://www.mclaveau.com - Windows Internet Explorer


@-salutations

Michel Claveau
Avatar
Méta-MCI (MVP)
Re !

Pour compléter, voici un script en Python (qui utilise l'API de windows) :


import win32gui

def traitehandle(h, rlist):
rlist.append((h, win32gui.GetWindowText(h)))

listwin=[]
win32gui.EnumWindows(traitehandle, listwin)

for w in listwin:
if w[1]!='' and w[1]!='Default IME':
print w[1],' handle:',w[0]


Ce script affiche, lui aussi, le titre des fenêtres et les handles associés. Vous noterez
l'utilisation d'un callback, par l'API Windows (avec la fonction "traitehandle").


@-salutations (bis)

Michel Claveau
Avatar
rikki92
Merci a tous vous m'avez sauvé ^ ^

Pour info, et cela pourrait vous interesser un jour, auparavant j'utilisais
un utlitaire de capture OCR en ligne de commande qui se nomme textract.
Vous definissez une zone sur l'ecran , et il vous donne le resulat en
fichier txt comme si vous utilisiez un scanner classique.
Il en marche qu'avec des polices classiques de reference de MS et dans de
petites tailles.
Bien pratique pour lire des applis faites en Java et teste par exemple leur
presence ou recuperer leur contenu..
http://www.structurise.com/textract/

Merci encore a vous..
Eric


Hello, Bonjour,

Voila apres plusieurs jours de recherche je m'en refere a vous.

Je cherche a recuperer par script le titre des fenetres en cours.
J'ai essayé les outils classiques, pslist, tlist, list aucune ne donne le
nom des fenetres..ou partiellement.Le meilleur etant tasklist /v sous xp..

Par contre et c'est ca qui me rend fou (?) c'est que le gestionnaire des
taches de windows onglet applications les donne bien lui..
Je recherche donc a avoir la meme chose que le gestionnaire des
taches...mais par script..tout simplement...ni plus ni moins ..

Ces fenetres dont j'essaye de recuperer le titre sont des fenetres
java..voila pourquoi certains scripts de process ne les retournenet pas .
j'ai essayé scriptomatic , avec recherche process, qui me donne que
l'objitem caption (mais ce n'est pas le title de la fenetre, arf..) ..

Bref je pense que ca doit etre assez simple en vbs ou autre mais pour
l'instant je nage..
Si vous pouviez m'aider, car pour l'instant je n'ai trouvé comme solution
que de faire un scan automatisé de copie d'ecran .et cela me prend bp de
ressources machine.. .ne riez pas .. ^^

Jai essaye aussi via wmi mais comme , l'ensemble tourne sous une image OS il
me renvoit les process de la station hote..
A votre bon coeur..

Merci ..car je deprime :-)


Avatar
moi
Notre ami MCI (ex do ré Mi chel la si do) [MVP] tapota :

Bonsoir !

Ce genre de chose, c'est typiquement la cible d'Autoit.
Voici un petit exemple, qui donne la liste des fenêtres ayant un
titre, ainsi que les handles correspondants :

$var = WinList()
$result=""
For $i = 1 to $var[0][0]
If $var[$i][0]<>"" Then
$result &= $var[$i][0] & " handle: " & $var[$i][1]
& @CRLF EndIf
Next
MsgBox(0,"Fenêtres",$result)


bonjour,


Je me demande bien pourquoi WinList()
n'existe pas avec l'objet COM de AutoIt3
Set oAutoIt = WScript.CreateObject("AutoItX3.Control")
( du moins il n'est pas dans la doc ...)

HB

Avatar
Jacques Barathon [MS]
"Jean" wrote in message
news:
...
Ca ne donnera que les tites des fenêtres IE (et sous certains Windows les
titres de l'Explorateur).


En effet, mais vu le postulat de départ où Rikki92 parlait de fenêtres Java,
j'ai pensé que ça pouvait convenir. Sinon, on peut écrire ceci:

PS> get-process | where {$_.MainWindowTitle} | format-table MainWindowTitle,
Name, Id -a

Jacques

Avatar
Gilles LAURENT [MVP]
"rikki92" a écrit dans le message de
news:
| Hello, Bonjour,

Hi, Bonjour,

| Je cherche a recuperer par script le titre des fenetres en cours.

J'arrive un peu tard mais tant pis !
Pour dire vrai, j'ai trop ramé donc je Post :-)

Ci-dessous une solution en VBScript (via le wrapper DynaCall)
http://ourworld.compuserve.com/homepages/Guenter_Born/WSHBazaar/WSHDynaCall.htm

--- Coupez ici : CodeSnippet.vbs ---
' initialisation du composant DynaCall
' et déclaration des API Win32 utilisées (prototypes)
Set oDyn=CreateObject("DynamicWrapper") ' > regsvr32 dynwrap.dll
oDyn.Register "User32.dll","GetTopWindow","f=s","r=h","i=h"
oDyn.Register "User32.dll","GetWindow","f=s","r=h","i=hu"
oDyn.Register "User32.dll","GetWindowText","f=s","r=l","i=hll"
oDyn.Register "User32.dll","IsWindowVisible","f=s","r=t","i=h"
oDyn.Register "kernel32.dll","lstrcat","f=s","r=l","i=ws"
oDyn.Register "kernel32.dll","RtlMoveMemory","f=s","r=l","i=lll"
oDyn.Register
"kernel32.dll","MultiByteToWideChar","f=s","r=l","i=llllll"

' initialisation
strTitleBuf=String(256, VBNullChar) ' allocation mémoire (heap)
hWnd=oDyn.GetTopWindow(0) ' fenêtre racine

' énumération des fenêtres visibles (WS_VISIBLE style)
do ' tant qu'il y a des fenêtres à énumérer
hWnd=oDyn.GetWindow(hWnd,2) ' GW_HWNDNEXT(2)
If hWnd<>0 And oDyn.IsWindowVisible(hWnd) Then
nLen=oDyn.GetWindowText(hWnd,LPSTR(strTitleBuf),Len(strTitleBuf))
If nLen>0 Then ' affichage du titre s'il y en a un !
strTitle=String(nLen+1,VBNullChar) ' allocation mémoire (heap)
' conversion de la chaine Multibyte en Unicode
' la fonction LPSTR permet d'obtenir l'adresse de la chaine
oDyn.MultiByteToWideChar _
CP_ACP,0,LPSTR(strTitleBuf),-1,LPSTR(strTitle),Len(strTitle)
WScript.Echo strTitle ' affichage du titre de la fenêtre
End If
End If
Loop Until hWnd=0 ' le handle de fenêtre est nul en fin de parcours

Function LPSTR(str) ' déterminer l'adresse mémoire de l'argument
lpSrc=oDyn.lstrcat(str,"") ' LPSTR source
lpDest=oDyn.lstrcat(LPSTR,"") ' LPSTR destination
LPSTR=CLng(0) ' allocation mémoire pour l'adresse (4 Bytes)
oDyn.RtlMovememory lpDest+8, lpSrc+8, 4 ' VB Variant (+8) = PTR
End Function

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
Méta-MCI (MVP)
Bonsoir !

Je me demande bien pourquoi WinList() n'existe pas avec l'objet COM de AutoIt3


Il est vrai que ce serveur COM a beaucoup de limitations.

Pour info, j'ai trouvé un moyen d'utiliser AutoIt complet comme un (simili) serveur COM ; y compris
le GUI d'AutoIt.
pour cela, j'ai créé un serveur COM en Python, qui sert de pont, et qui pilote/communique avec une
fenêtre AutoIt spécifique, par des message (WM_COPYDATA).
Vu de l'extérieur, l'utilisation est identique à un serveur COM quelconque. Cependant, il faut
installer, en plus d'Autoit, Python + Pywin32.

J'avais publié le truc sur un des forums AutoIt, mais ça n'a pas soulevé en grand enthousiasme.
Peut-être le besoin n'est-il pas si grand ?

@+

Michel Claveau

1 2