Autor Beitrag
lukkee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Do 07.08.08 10:32 
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:
ausblenden 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 :(
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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:

ausblenden 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.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
lukkee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Do 07.08.08 12:22 
Ich hab mal folgendes ausprobiert Suche bei Google GETWINDOWHANDLEBYPROCESSID und wurde sogar fündig (1 von 1 Ergebnis :-P). Vielleicht hilft der Thread.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
lukkee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
GetProcessID('process.exe')					


dannach das handle mithilfe der ausgelesenen processid:

ausblenden 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure SwitchToThisWindow(h1: hWnd; x: bool); stdcall;
  external user32 Name 'SwitchToThisWindow';
         {x = false: Size unchanged, x = true: normal size}



SwitchToThisWindow(myHwnd,True);


_:) danke nochmal