PureBoard http://forums.purebasic.com/german/ |
|
Fokus für fremdes Programmfenster http://forums.purebasic.com/german/viewtopic.php?f=16&t=31711 |
Seite 1 von 1 |
Autor: | HemSA [ 04.11.2019 21:26 ] |
Betreff des Beitrags: | Fokus für fremdes Programmfenster |
Hallole, ich habe folgendes Problem. Programm A: Ist eine Testsoftware in LabVIEW wo über ein Barkode einlesen der Test gestartet wird. Cursor muß in einem bestimmten Feld sein Programm B: Programm A erzeugt eine Konsole Programm C: Purebasic Programm das die Konsole nach einer bestimmten Zeit beendet (Killprogram xxx) Das Problem ist nun dass nachdem das Programm C die Konsole schließt Programm A nicht mehr den Fokus hat. Wenn man nun den Barkode für den nächsten Test wieder einlesen will muss man erst mit der Maus Programm A wieder in den Fokus bringen und das Eingabefeld aktiv machen. Wie macht man das nun, nachdem das Programm C die Konsole geschlossen hat, das das Programm A ohne mit der Maus wieder den Fokus hat? Vielen Dank schon mal im Vorraus. Michael |
Autor: | Mijikai [ 05.11.2019 08:33 ] |
Betreff des Beitrags: | Re: Fokus für fremdes Programmfenster |
Versuchs mal mit SetForegroundWindow_() |
Autor: | HemSA [ 06.11.2019 14:32 ] |
Betreff des Beitrags: | Re: Fokus für fremdes Programmfenster |
Hallo, um das zu machen brauche ich die Windowsnummer. ==> SetForegroundWindow_(hWnd) Ich versuche nun über verschiedenen Wegen diese hWnd herauszubekommen. Ich habe herausbekommen dass wenn ich bei dem Programm A die F1 Taste drücke der Cursor schon im richtigen Feld ist. Würde dann das mit: AddKeyboardShortcut(hWnd, #PB_Shortcut_F1, 1). Event gebe ich einfach mal "1" an, weiss nicht für was das Event gut sein soll. Aber mit: hWnd = FindWindow_(hWnd, "????????") klappt das nicht. Was muss ich denn für: ???????? eingeben? Bei manchen Beispielen steht der komplette Pfad bis zur .exe. Bei anderen Beispielen steht das was ich sehe, der Name vom Fenster sozusagen. Wenn ich Debug hWnd mache kommt immer "0" raus, obwohl ich es mit verschiedenen Fenstern mache. Und wenn ich dann AddKeyboardShortcut(0, #PB_Shortcut_F1, 1) mache reagiert es nicht. Kann mir da jemand auf die Sprünge helfen wie ich zu der Windowsnummer komme? So dass ich dann über: - FindWindow_(hWnd, "????????") - SetForegroundWindow_(hWnd) - AddKeyboardShortcut(hWnd, #PB_Shortcut_F1, 1) eine gedrückte F1 Taste in dem Programm A schicken kann. Danke. |
Autor: | Mijikai [ 07.11.2019 12:33 ] |
Betreff des Beitrags: | Re: Fokus für fremdes Programmfenster |
Mit GetWindow_() und GetWindowText_() oder EnumWindows_() das Fenster suchen. Ich nutze FindWindow_() nur wenn ich genau weiß wonach ich suche. Hier eine Variante mit GetWindow_() und GetWindowText_(): Code: Procedure.i GetWindow(Title.s,Visible.i = #True,NoCase.i = #False) Protected result.i Protected hwnd.i Protected buffer.s hwnd = GetWindow_(GetDesktopWindow_(),#GW_CHILD) If hwnd buffer = Space(#MAX_PATH) If Visible Repeat result = hwnd If IsWindowVisible_(hwnd) If GetWindowText_(hwnd,@buffer,#MAX_PATH) If FindString(buffer,Title,1,NoCase) ProcedureReturn result EndIf EndIf EndIf hwnd = GetWindow_(hwnd,#GW_HWNDNEXT) If hwnd = result Break EndIf Until hwnd = #Null Else Repeat result = hwnd If GetWindowText_(hwnd,@buffer,#MAX_PATH) If FindString(buffer,Title,1,NoCase) ProcedureReturn result EndIf EndIf hwnd = GetWindow_(hwnd,#GW_HWNDNEXT) If hwnd = result Break EndIf Until hwnd = #Null EndIf EndIf ProcedureReturn #Null EndProcedure Debug GetWindow("PureBasic") Das Problem das bei MSDN für GetWindow_() steht ist hier auch behoben! |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |