Entwickler-Ecke

Windows API - handle des Fensters, das den Fokus hat!


Bayo - So 17.08.03 17:05
Titel: handle des Fensters, das den Fokus hat!
Hi zusammen...

Ich probiere irgendwie das Handle des Fensters, das den Fokus hat, herauszufinden! Die funktion GetFocus funktioniert nur innerhalb der eigenen Anwendung! Ich müsste das Handle des "fokusierten" Fensters der aktiven Anwendung haben, egal welche Anwendung aktiv ist! Hm, ich hoffe ihr versteht, was ich meine!?

Grüsse und vielen Dank.. Dominic


Delete - So 17.08.03 17:10

Suche in: Delphi-Forum, Delphi-Library GETFOREGROUNDWINDOW


Bayo - So 17.08.03 17:54

GetForegroundWindow gibt das Handle des Hauptfensters der aktiven Anwendung zurück und nicht des Fensters, dass effektiv den Fokus hat!

Leider funktioniert das nicht :( trotzdem vielen dank!


Delete - So 17.08.03 20:14

Und was ist mit Suche in: Delphi-Forum, Delphi-Library GETACTIVEWINDOW?


Delete - So 17.08.03 23:55

foo.


Bayo - Di 19.08.03 16:58

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