Entwickler-Ecke
Windows API - problem mit ForceForegroundWindow (fenster wird nicht aktiv)
lukkee - Do 07.08.08 10:32
Titel: problem mit ForceForegroundWindow (fenster wird nicht aktiv)
Hallo
ich hab ein problem
ich werfe mittels
ForceForegroundWindow(GetWindowHandleByExeName('notepad.exe')); den notepad in den Vordergrund. Funktioniert wunderbar jedoch wird das fenster nicht aktiv.. erst wenn ich in das Fenster klicke wird es Aktiv .. es sollte aber gleich nachdem ich die Funktion aufrufe aktiv werden!!
Ich habe es auch schon mit folgenden funktionen probiert:
Delphi-Quelltext
1: 2: 3:
| SetForegroundWindow(GetWindowHandleByExeName('notepad.exe')); SetActiveWindow(GetWindowHandleByExeName('notepad.exe')); Windows.ShowWindow(GetWindowHandleByExeName('notepad.exe'), SW_Normal); |
Der notepad erscheint zwar aber er wird nicht aktiv bekommt den focus nicht
Die postmesage funktion geht überhaupt nicht :(
Delphi-Quelltext
1:
| postmessage(GetWindowHandleByExeName('notepad.exe'),WM_SYSCOMMAND,SC_RESTORE,0); |
Kann mir jemand helfen?
hab schon das ganze forum durchsucht!
danke
GTA-Place - Do 07.08.08 11:11
Das liegt eindeutig an der Funktion GetWindowHandleByExeName. Geht es dir nur um Notepad? Dann würde nämlich das hier funktionieren:
Delphi-Quelltext
1:
| SetForegroundWindow(FindWindow('notepad', nil)); |
Eventuell hat das Fenster, das du aufrufen willst einen Klassennamen, den du verwenden kannst. Oder aber du weißt ein Wort, welches immer im Titel vorkommt, dann gäbs nämlich auch noch eine Möglichkeit.
lukkee - Do 07.08.08 12:17
hi k das funktioniert..
Leider ist der Titel des Fensters nicht bekannt (unterschiedlich) kann man nicht anhand des prozessnamen an den fenstertitel kommen ?
danke erstmal für deine Antwort
greetz
GTA-Place - Do 07.08.08 12:22
Ich hab mal folgendes ausprobiert
GETWINDOWHANDLEBYPROCESSID und wurde sogar fündig (1 von 1 Ergebnis :-P). Vielleicht hilft der Thread.
lukkee - Do 07.08.08 14:19
Hey funktioniert..danke
den weg über die processid hab ich noch nicht versucht!
Lösung:
Ich hol mir zuerst die Processid mittels Processnamen:
Delphi-Quelltext
1:
| GetProcessID('process.exe') |
dannach das handle mithilfe der ausgelesenen processid:
Delphi-Quelltext
1: 2: 3: 4:
| var myHwnd :HWND;
myHwnd:= FindMainWindow(GetProcessID('process.exe')); |
und dannach diese funktion um das fenster in den vordergrund werfen und aktiv zusetzen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure SwitchToThisWindow(h1: hWnd; x: bool); stdcall; external user32 Name 'SwitchToThisWindow';
SwitchToThisWindow(myHwnd,True); |
_:) danke nochmal
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!