Anderes Programm starten ohne Fokusverlust

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

EPS

Betreff: Anderes Programm starten ohne Fokusverlust

BeitragMo, Nov 12, 2007 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Nov 12, 2007 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Nov 12, 2007 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

Eingeproggt

BeitragMo, Nov 12, 2007 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Nov 12, 2007 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ü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

BeitragMo, Nov 12, 2007 23:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wäre auch ne Methode, stimmt. Aber so oder so - es geht Wink
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group