Récupérer tous les handles d'une application choisie
Bonjour à tous,
Je liste tous les processus actifs dans une liste (de la même manière que le gestionnaire des taches).
Ensuite, à partir du ProcessID de l'application choisie, j'aimerais récuperer tous les handles de ce processus (un handle correspond à un composant de l'application choisie, je me trompe ?), pour me permettre de sélectionner un champs texte de cette application et faire un coller.
Je le fait de cette manière:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| tabHandles: array [0..100] of integer; // Un HWND est un integer...
procedure TfrmMain.ListerHandles(pid: Cardinal);
var
handles: TList;
i: Integer;
findWindowsStruct: TFindWindowsStruct;
begin
handles:= TList.Create;
Try
findWindowsStruct.ProcessID:= pid; // GetCurrentProcessID
findWindowsStruct.HandleList:= handles;
EnumWindows(@EnumWindowsProc, Integer(@findWindowsStruct));
cbThreads.Clear;
for i:= 0 to handles.Count - 1 do begin
cbThreads.Items.Add('Handle: '+IntToStr(Integer(handles[i])));
tabHandles[i] := Integer(handles[i]);
end;
cbThreads.ItemIndex := 0;
Finally
handles.Free;
end;
end; |
Mais quand je teste les handles reçus avec un
Code:
PostMessage(tabHandles[cbThreads.ItemIndex]),WM_PASTE,0,0); // Simulation du coller
Rien ne se passe.
Par exemple, Si je fait:
Code:
1 2
| myHandle := GetTopwindow(GetforegroundWindow); // Ca marche mais que pour notePad
PostMessage(myHandle,WM_PASTE,0,0); |
Et que le focus est sur le notepad par exemple, handle est égal à 263014.
Mais si j'utilise la méthode de listage pour le notepad, il ne me retourne qu'un enregistrement qui est différent de celui de la solution ci-dessus (459614).
Comment faire ?