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 : 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;
Mais quand je teste les handles reçus avec un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
PostMessage(tabHandles[cbThreads.ItemIndex]),WM_PASTE,0,0); // Simulation du coller
Rien ne se passe.

Par exemple, Si je fait:
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);
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 ?