ich habe ein Beispiel von RSBasic etwas umgeändert um vom Main Programm aus den Ermittelten
Fenster Name des Fenster das gerade den Fokus hat auszugeben. Damit es wegen des Hook kein Zugriff Problem
gibt habe ich einen Mutex verwendet. Es funktioniert auch ... aber ich bin mir nicht sicher ob das so reicht.
Code: Alles auswählen
EnableExplicit
Define HWINEVENTHOOK
#EVENT_SYSTEM_FOREGROUND = $3
Global WindowAsFokus.s
Global WindowAsFokusOld.s
Global Mutex = CreateMutex()
Global Event,Quit
Procedure WinEventProc(hWinEventHook, event, hwnd, idObject, idChild, idEventThread, dwmsEventTime)
  Protected Title$
  
  Select event
    Case #EVENT_SYSTEM_FOREGROUND
      Title$ = Space(250)
      GetWindowText_(hwnd, @Title$, Len(Title$))
      
      LockMutex(Mutex)
        WindowAsFokus.s = Title$
      UnlockMutex(Mutex)
      
  EndSelect
  
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  StickyWindow(0,#True)
  
  HWINEVENTHOOK = SetWinEventHook_(#EVENT_SYSTEM_FOREGROUND, #EVENT_SYSTEM_FOREGROUND, 0, @WinEventProc(), 0, 0, 0)
  
  Repeat
    
    LockMutex(Mutex)
    If WindowAsFokus.s <> WindowAsFokusOld.s
      WindowAsFokusOld.s = WindowAsFokus.s
      SetWindowTitle(0,WindowAsFokus.s)
    EndIf
    UnlockMutex(Mutex)
    
    Event = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        UnhookWinEvent_(HWINEVENTHOOK)
        Quit = 1
    EndSelect
    Delay(10)
  Until Quit
  
EndIf
End
HWINEVENTHOOK = SetWinEventHook_(#EVENT_SYSTEM_FOREGROUND, #EVENT_SYSTEM_FOREGROUND, >Handler ????<, @WinEventProc(), 0, 0, 0)
Gruss TFT



