[ERLEDIGT] Fensterfokus mit WINAPI

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
basiszero
Beiträge: 13
Registriert: 08.02.2016 13:12

[ERLEDIGT] Fensterfokus mit WINAPI

Beitrag 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
Zuletzt geändert von basiszero am 12.02.2016 13:54, insgesamt 1-mal geändert.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Fensterfokus mit WINAPI

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
basiszero
Beiträge: 13
Registriert: 08.02.2016 13:12

Re: [ERLEDIGT] Fensterfokus mit WINAPI

Beitrag von basiszero »

Hallo RSBasic,

klappt alles wie es soll. Tausend und einen Dank :allright:
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: [ERLEDIGT] Fensterfokus mit WINAPI

Beitrag 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
a²+b²=mc²
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: [ERLEDIGT] Fensterfokus mit WINAPI

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten