Folgend der funktionierende Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.WMHotKey(var Msg : TWMHotKey); var attach, attachTo: Cardinal; value: String; begin Case Msg.HotKey of FOCUSEDWND_HOTKEY: begin attach := GetWindowThreadProcessId(GetForegroundWindow, nil); attachTo := GetCurrentThreadId; if AttachThreadInput(attach, attachTo, True) then begin hFocusedWnd := GetFocus; AttachThreadInput(attach, attachTo, False); end else begin hFocusedWnd := GetFocus; end; value := 'Test'; SendMessage(hFocusedWnd, WM_SETTEXT, 0, Integer(@value[1])); end; end; end; |
Problem: GetFocus funktioniert nur für fenster die durch den selben thread erzeugt wurden!
Um diese Funktion trotzdem verwenden zu können, muss der thread des fensters, das den eingabefokus hat, mit dem thread, der die funktion GetFocus aufruft "verbunden" werden. Das geschieht mit AttachThreadInput.
Grüsse Dominic