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/