Fokus für fremdes Programmfenster

Anfängerfragen zum Programmieren mit PureBasic.
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Fokus für fremdes Programmfenster

Beitrag von HemSA »

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
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Re: Fokus für fremdes Programmfenster

Beitrag von HemSA »

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.
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Fokus für fremdes Programmfenster

Beitrag von Mijikai »

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: 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")
Das Problem das bei MSDN für GetWindow_() steht ist hier auch behoben!
Antworten