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:
Mais quand je teste les handles reçus avec un
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
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;
Rien ne se passe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part PostMessage(tabHandles[cbThreads.ItemIndex]),WM_PASTE,0,0); // Simulation du coller
Par exemple, Si je fait:
Et que le focus est sur le notepad par exemple, handle est égal à 263014.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 myHandle := GetTopwindow(GetforegroundWindow); // Ca marche mais que pour notePad PostMessage(myHandle,WM_PASTE,0,0);
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 ?
Partager