Seite 1 von 1

[ERLEDIGT] Fensterfokus mit WINAPI

Verfasst: 12.02.2016 12:54
von basiszero
Hallo Zusammen,

ich habe einen Codeschnipsel gefunden um mir ein bestimmtes aktives Fenster herauszusuchen.
Leider ist die WINAPI für mich wie ein Buch mit sieben Siegel.

Kann mir jemand sagen, wie ich in dem Abschnitt:

; Hier sollte jetzt das Fenster "Rechner" den Fokus für weitere Eingabe erhalten.

es schaffe den Rechner von Windows als fokusiertes Fenster in den Vordergrund zu bekommen ?

Code: Alles auswählen

EnableExplicit

#Static=0
#Protected=1

#Typ=#Protected ;Or #Static

Procedure EnumWindows(hWnd,Visibility=#True) ;Prozedur, die die Handles der Fenster erhält
  Static title.s{1024},class.s{1024},PID.l=0
  If IsWindowVisible_(hWnd) Or Visibility=#False
    GetWindowText_(hWnd,@title,1024) ;Fenstertitel auslesen
    GetClassName_(hWnd,@class,1024)  ;Fensterklasse auslesen
    GetWindowThreadProcessId_(hWnd,@PID) ;PID des zugehörigen Prozesses auslesen
    
    Debug "[Title]= "+title+" [hWnd]= "+Str(hWnd)+" [ClassName]= "+class+" [PID]= "+Str(PID) ;Werte ausgeben
    
    If  title = "Rechner" ; Calc.exe in Windows
      
      Debug "Gefunden"
      
        ; Hier sollte jetzt das Fenster "Rechner" den Fokus für weitere Eingabe erhalten.
            
      EndIf
    
  EndIf
  ProcedureReturn #True
EndProcedure

EnumWindows_(@EnumWindows(),#True) ;#True, um nur sichtbare Fenster anzuzeigen; ansonsten #False

Re: Fensterfokus mit WINAPI

Verfasst: 12.02.2016 13:32
von RSBasic

Code: Alles auswählen

EnableExplicit

#Static=0
#Protected=1

#Typ=#Protected ;Or #Static

Procedure EnumWindows(hWnd,Visibility=#True) ;Prozedur, die die Handles der Fenster erhält
  Static title.s{1024},class.s{1024},PID.l=0
  If IsWindowVisible_(hWnd) Or Visibility=#False
    GetWindowText_(hWnd,@title,1024) ;Fenstertitel auslesen
    GetClassName_(hWnd,@class,1024)  ;Fensterklasse auslesen
    GetWindowThreadProcessId_(hWnd,@PID) ;PID des zugehörigen Prozesses auslesen
    
    Debug "[Title]= "+title+" [hWnd]= "+Str(hWnd)+" [ClassName]= "+class+" [PID]= "+Str(PID) ;Werte ausgeben
    
    If  title = "Rechner" ; Calc.exe in Windows
      
      Debug "Gefunden"
      
      ; Hier sollte jetzt das Fenster "Rechner" den Fokus für weitere Eingabe erhalten.
      ShowWindow_(hWnd, #SW_NORMAL);Falls das Fenster minimiert ist
      SetForegroundWindow_(hWnd)
    EndIf
    
  EndIf
  ProcedureReturn #True
EndProcedure

EnumWindows_(@EnumWindows(),#True) ;#True, um nur sichtbare Fenster anzuzeigen; ansonsten #False

Re: [ERLEDIGT] Fensterfokus mit WINAPI

Verfasst: 12.02.2016 13:55
von basiszero
Hallo RSBasic,

klappt alles wie es soll. Tausend und einen Dank :allright:

Re: [ERLEDIGT] Fensterfokus mit WINAPI

Verfasst: 12.02.2016 14:01
von Kiffi
@basiszero: Kleiner Hinweis noch: Das funktioniert allerdings nur so lange, wie der Rechner auch wirklich 'Rechner' heißt (also nur auf deutschsprachigen Systemen).

Grüße ... Peter

Re: [ERLEDIGT] Fensterfokus mit WINAPI

Verfasst: 12.02.2016 14:04
von RSBasic
+1
Am besten immer mit Klassennamen arbeiten. Dann ist es egal, welche Sprache in der Windows-Instanz festgelegt wurde.
Falls deine Anwendung nur auf deinem PC laufen soll, dann ist das nicht so wichtig.
Den Klasssennamen kannst du z.B. mit ShowWin oder WinSpy herausfinden.