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
Fokus für fremdes Programmfenster
Fokus für fremdes Programmfenster
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Re: Fokus für fremdes Programmfenster
Versuchs mal mit SetForegroundWindow_()
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.
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.
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
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_():
Das Problem das bei MSDN für GetWindow_() steht ist hier auch behoben!
Ich nutze FindWindow_() nur wenn ich genau weiß wonach ich suche.
Hier eine Variante mit GetWindow_() und GetWindowText_():
Code: Alles auswählen
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")