Anderes Programm starten ohne Fokusverlust
Übersicht

![]() |
EPSBetreff: Anderes Programm starten ohne Fokusverlust |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi zusammen.
Per ExecFile oder auch ShellExecute (Shell32.dll) kann ich eine andere Anwendung starten - kein Problem. Nur verliert die startende Anwendung dabei den Fokust an die neu gestartete Anwendung. Ist ansich nur ein Schönheitsfehler, aber kann ich die andere Anwendung auch starten OHNE das der Fokus verloren geht - mein Fenster also weiterhin aktiv bleibt? Danke schonmal |
||
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier
Man kann sich öfter als zweimal im Leben halb tot lachen. |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab das mal zusammengabracht, indem ich bei der ShellExecute als letzten Parameter 0 angab.
Code: [AUSKLAPPEN] api_ShellExecute(0,operation$,file$,para$,"",0)
mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
0 ist eigentlich SW_HIDE und sollte die Anwendung "versteckt" öffnen.
Mit den Parametern hab ich schon rumgespielt, aber da reagiert die andere Anwendung nicht drauf. Könnte auch daran liegen das die "andere Anwendung" ebenfalls ein BB Programm ist welches im WindowMode, also 2, öffnet. Da funktioniert weder SW_MINIMIZE noch SW_MAXIMIZE noch sonst ein Parameter. Nachtrag (Lösung:) Das Programm per ExecFile starten. Nach einer kleinen Kunstpause (damit das Programm auch mit seinem Start fertig ist und der Thread läuft) folgende Prozedur durchführen und das Startprogramm wieder in den Vordergrund bringen: Code: [AUSKLAPPEN] lThreadWindow = api_GetWindowThreadProcessId( hWnd, 0) lThreadForeWin = api_GetWindowThreadProcessId( api_GetForegroundWindow(), 0) api_AttachThreadInput ( lThreadForeWin, lThreadWindow, True ) api_SetForegroundWindow( hWnd ) api_AttachThreadInput ( lThreadForeWin, lThreadWindow, False ) ...ist auch ne Methode und bei mir funktionierts ![]() |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Deine Lösung dürfte besser sein. Ich habs damals nur mit nem kurzen CMD-Befehl probiert... Da hat man das fast nicht mitbekommen, ob ein Fenster aktiv ist oder nicht. | ||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Übergib doch einfach das Handle des Fensters als Parameter an die zu startende Anwendung:
Code: [AUSKLAPPEN] Local cmd$ = CommandLine( )
If( cmd$ <> "" ) SetForegroundWindow( cmd ) End If While Not KeyDown( 1 ) If KeyHit( 28 ) ShellExecuteA( 0, "open", "anwendung.exe", SystemProperty( "AppHWND" ), "", 0 ) End If Wend End Ich habe deine Methode nicht ausprobiert, aber ich denke, beides hat den selben Effekt. |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das wäre auch ne Methode, stimmt. Aber so oder so - es geht ![]() |
||
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier
Man kann sich öfter als zweimal im Leben halb tot lachen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group