Sous windows 7 avec Delphi XE5, je cherche comment récupérer le nom de toutes les fenêtres ouvertes, j'ai déjà testé en vain GetWindowText avec les handles récupérés via EnumWindow de plein de façon différentes.
Pouvez-vous m'aider.
Sous windows 7 avec Delphi XE5, je cherche comment récupérer le nom de toutes les fenêtres ouvertes, j'ai déjà testé en vain GetWindowText avec les handles récupérés via EnumWindow de plein de façon différentes.
Pouvez-vous m'aider.
ça aiderait peut-être si tu montrais ici le code qui ne fonctionne pas
Mon bout de code est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 procedure TForm1.RefreshingTimer(Sender: TObject); begin Combobox1.Clear; EnumWindow(@FonctionCallback,0); end; function FonctionCallback(Handle: HWND; lParam: LPARAM): Boolean; var Nom : String; Sz : Integer; begin Sz:= GetWindowText(Handle, PChar(Nom), 255); SetLength(Nom, Sz); Form1.ComboBox1.Items.Add(Nom); Result:=true; end;
EnumWindow ? EnumWindows ???
Ce n'est pas qu'il fonctionne pas mais qu'il ne compile pas non ?
BOOL et Booleen ? j'ai un doute !
Code : Sélectionner tout - Visualiser dans une fenêtre à part function EnumWindowsCallback(hWnd: HWND; lParam: LPARAM): BOOL; stdcall;
stdcall; sur Win32 obligatoire
sur Win64 c'est ignoré mais mieux vaut le mettre pour avoir un code compatible
GetWindowText sur un string non alloué ?
Le SetLength il faut le faire AVANT d'appeler GetWindowText !
ou alors tu appeles deux fois GetWindowText
Une première pour connaitre la taille puis une seconde pour lire la valeur
le plus basique reste d'avoir une chaine tableau pré-alloué !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 function EnumWindowsCallback(hWnd: HWND; lParam: LPARAM): BOOL; // stdcall; dans la forward declaration //c'est une fonction d'appel standard avec les types de Window et NON ceux de Delphi var Nom: array[0..MAX_PATH-1] of Char; begin GetWindowText(hWnd, Nom, MAX_PATH); Form1.ComboBox1.Items.Add(Nom); Result := True; end;
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Merci, effectivement, j'ai pris sans faire attention une ancienne version non fonctionnelle de ce code
le code qui fonctionne est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 function EnumWindowsCallback(Handle: HWND; lParam: LPARAM): BOOL; stdcall; var Nom: array[0..MAX_PATH-1] of Char; begin GetWindowText(Handle, Nom, MAX_PATH); if isWindowVisible(Handle) and (Nom <> '') and (Nom <> 'Program Manager') and (Nom <> 'Démarrer') then Form1.ComboBox1.Items.Add(Nom); Result := True; end; procedure TForm1.RefreshingTimer(Sender: TObject); begin ComboBox1.Clear; EnumWindows(@EnumWindowsCallback, 0); end;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager