Aktuelle Zeit: 10.12.2019 11:02

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Fokus für fremdes Programmfenster
BeitragVerfasst: 04.11.2019 21:26 
Offline

Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
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.2 (Windows)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fokus für fremdes Programmfenster
BeitragVerfasst: 05.11.2019 08:33 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Versuchs mal mit SetForegroundWindow_()

_________________

Links:
PureBasic Discord
[ENGINE] 2D Engine Nautilus (Win)
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fokus für fremdes Programmfenster
BeitragVerfasst: 06.11.2019 14:32 
Offline

Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
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.2 (Windows)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fokus für fremdes Programmfenster
BeitragVerfasst: 07.11.2019 12:33 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
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!

_________________

Links:
PureBasic Discord
[ENGINE] 2D Engine Nautilus (Win)
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye