Je cherche à obtenir le handle du contrôle d'édition actif de n'importe quelle application externe en cours d'exécution, afin de pouvoir envoyer par la suite à ce contrôle un sendmessage WM_PASTE.
(Développement sous DELPHI 7 personal edition)
Je suis presque parvenu à mes fins grâce à la fonction suivante :
(En tant que de besoin, je précise que mon application s'exécute sous forme de "TrayIcon" et que la fonction est appelée à partir d'une HOTKEY)
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 function GetFocus: HWND; var Wnd: HWND; TId, PId: DWORD; begin Result := windows.GetFocus; if Result = 0 then begin Wnd := GetForegroundWindow; if Wnd <> 0 then begin TId := GetWindowThreadProcessId(Wnd, PId); if AttachThreadInput(GetCurrentThreadId, TId, True) then begin Result := windows.GetFocus; AttachThreadInput(GetCurrentThreadId, TId, False); end; end; end; end;
Tout fonctionne parfaitement avec les diverses applications que j'ai pu tester (Notepad, notepad++, wordpad, une cellule excel, chrome, un edit dans paint, ....) : La fonction me retourne le handle du "document" en cours d'édition et par un SendMessage(TheFocusedControl, WM_PASTE, 0,0), je parviens à envoyer à l'application externe le contenu du presse-papier.
En revanche, cela ne fonctionne pas avec un document MS WORD : La fonction me retourne bien un handle, mais le WM_PASTE ne produit aucun effet.
J'ignore si ce dysfonctionnement provient d'un mauvais Handle qui me serait retourné par ma fonction GetFocus, ou d'un mauvais usage de la fonction SendMessage.
Merci d'avance à ceux d'entre vous qui pourront orienter mes recherches.
P.S. : N'ayant aucune formation en programmation, vous voudrez bien excuser les inepties que j'ai pu exprimer ici.
Partager