bonjour
je cherche une solution pour récupérer le focus dans une application extérieur que je ne suis pas censé connaitre.
Je dois pouvoir récupérer le handle de l'application où se situe le focus.
puis avec un postmessage j'envoi un 'string' la ou se situe le curseur toujours.
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 // extrait du prog Var hWindow: HWND; pt: TPoint; pIconInfo: TIconInfo; dwThreadID, dwCurrentThreadID: DWORD; Hd_proc : THandle; procedure TForm_Clavier.SendString(s : String); begin Hd_proc:= GetCursorHandle; // pour l'instant afficher juste une lettre me conviendrait .. :( PostMessage(Hd_proc,WM_CHAR,Ord('t'),0); end; function Tform_clavier.GetCursorHandle: Hcursor; begin // Trouver l'application ou il y a le curseur GetCursorPos(pt); hWindow := WindowFromPoint(pt); // Récupère le thread ID ou le cursor se situe. dwThreadID := GetWindowThreadProcessId(hWindow, nil); // Récupère thread ID de l'application courante dwCurrentThreadID := GetCurrentThreadId; // Si le curseur est dans une application différente de la notre // on utilise GetCursor() pour renvoyer le hcursor correcte if (dwCurrentThreadID <> dwThreadID) then begin if AttachThreadInput(dwCurrentThreadID, dwThreadID, True) then begin // Récupère le handle du curseur Result := GetCursor; showmessage('test'); AttachThreadInput(dwCurrentThreadID, dwThreadID, False); end; end else begin Result := GetCursor; end; end; procedure TForm_Clavier.ButtonClick(Sender: TObject); begin // click sur une touche SendString('toto'); end; end.
Partager