Find Fokus und Mutex Frage.

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Find Fokus und Mutex Frage.

Beitrag von tft »

Hallo,

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

Ausserdem weis ich nicht wo der Fenster Handler hinkommt.
HWINEVENTHOOK = SetWinEventHook_(#EVENT_SYSTEM_FOREGROUND, #EVENT_SYSTEM_FOREGROUND, >Handler ????<, @WinEventProc(), 0, 0, 0)

Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: Find Fokus und Mutex Frage.

Beitrag von Fluid Byte »

Warum benutzt du einen Mutex? Warum SetWinEventHook_() und nicht GetForegroundWindow_() mit Schleife und Delay
Ausserdem weis ich nicht wo der Fenster Handler hinkommt.
Was für ein Fenster Händler?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Re: Find Fokus und Mutex Frage.

Beitrag von tft »

Hallo,

das hat mehrere Gründe, der bestechenste ist das seit W10 das handling von Fenstern und den entsprechenden Events, diese nicht mehr jedem Thread zur Verfügung stehen. Ein Fenster ohne Focus erhält nur noch PostEvents. Daher müssen einige dinge jetzt über CallBacks gelöst werden. Das widerum sind aus meiner Sicht Programmteile die wie Threads behandelt werden müssen. Da diese ja jederzeit dazwischen funken können. Bei einem Processor ist das unproblematisch. Bei mehreren kann es dabei zu Speicher Zugriffs Verletzungen kommen. Daher der Mutex.
Sofiel zu meiner Denkungsweise zu diesem Thema. Wenn diese Fehlerhaft ist. bin ich für Korekturen offen. Man lernt nie aus.

Grusas TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: Find Fokus und Mutex Frage.

Beitrag von Fluid Byte »

tft hat geschrieben:das hat mehrere Gründe, der bestechenste ist das seit W10 das handling von Fenstern und den entsprechenden Events, diese nicht mehr jedem Thread zur Verfügung stehen. Ein Fenster ohne Focus erhält nur noch PostEvents.
1.) Du verwendest keine Threads
2.) Quelle bitte
tft hat geschrieben:Daher müssen einige dinge jetzt über CallBacks gelöst werden.
Das müssen sie? Warum? Sagt wer? Microsoft?
tft hat geschrieben:Das widerum sind aus meiner Sicht Programmteile die wie Threads behandelt werden müssen.
Ich behaupte nicht dass das falsch ist nur ohne Beleg ist es nichts weiter als persönliche Spekulation.
tft hat geschrieben:Da diese ja jederzeit dazwischen funken können. Bei einem Processor ist das unproblematisch. Bei mehreren kann es dabei zu Speicher Zugriffs Verletzungen kommen. Daher der Mutex. Sofiel zu meiner Denkungsweise zu diesem Thema. Wenn diese Fehlerhaft ist. bin ich für Korekturen offen. Man lernt nie aus.
Wozu du einen Mutex benötigst bleibt mir weiterhin ein Rätsel.
LockMutex(Mutex) hat geschrieben:After this function returns, it is assured that this thread is the only one with a locked state on the mutex. The thread can now freely access the shared resource that is protected by this mutex, as it is the only one with exclusive access to the mutex.
Du benutzt keine Threads oder greifst auf geteilte Ressourcen zu.

Was ist hieran auszusetzen?

Code: Alles auswählen

OpenWindow(0,0,0,400,100,"",#PB_Window_SystemMenu | 1)
TextGadget(0,10,10,380,80,"blah",#WS_BORDER|#SS_CENTERIMAGE|#SS_CENTER)
SetGadgetColor(0,#PB_Gadget_BackColor,#White)
SetGadgetFont(0,LoadFont(0,"Arial",10,#PB_Font_Bold))
StickyWindow(0,1)

winName$ = Space(256)

Repeat 
   EventID = WindowEvent() 
   
   hwndFocus = GetForegroundWindow_()
   
   If hwndFocus = WindowID(0)
   	SetGadgetText(0,"self")
   Else
	   GetWindowText_(hwndFocus,winName$,256)
	   SetGadgetText(0,winName$)
	EndIf

	Delay(10) 
Until EventID = #PB_Event_CloseWindow
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Re: Find Fokus und Mutex Frage.

Beitrag von tft »

Hallo,

an dem Code den du gepostet hast ist nichts auszusetzen. Der ist OK wie er ist. Aber nicht das was ich brauche.
Es geht darum von einem Anderen Prozess aus darauf zuzugreifen. Und dein Code .... den habe ich in der Vorm auch schon
probiert, dabei kommen gelegentlich Speicher Verletzungsfehler. Das hier ist auch eher eine Prinzip frage. Den der Code
den ich gepostet habe funktioniert so ja. Es kann sein das ich die Grunsatz Voraussetzungen nicht gut ausformuliert habe.

Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: Find Fokus und Mutex Frage.

Beitrag von Fluid Byte »

tft hat geschrieben:an dem Code den du gepostet hast ist nichts auszusetzen. Der ist OK wie er ist. Aber nicht das was ich brauche.
Aha ....... und was brauchst du?
tft hat geschrieben:Es geht darum von einem Anderen Prozess aus darauf zuzugreifen.
Welcher andere Prozess? Darauf? Was darauf? Auf was zuzugreifen?
tft hat geschrieben:Und dein Code .... den habe ich in der Vorm auch schon probiert, dabei kommen gelegentlich Speicher Verletzungsfehler.
Alles klar, das heißt im Klartext dein Code war Schrott und du schlussfolgerst daraus das dies für meinen genauso gilt ohne ihn ausprobiert zu haben. Verstanden.

Können wir deinen Code mal sehen oder sind das wieder 6 Millionen Zeilen die du unmöglich kürzen kannst?
tft hat geschrieben:Das hier ist auch eher eine Prinzip frage.
Nein, ist es nicht.
tft hat geschrieben:Den der Code den ich gepostet habe funktioniert so ja.
Starkes Argument, du solltest bei Ubisoft anfangen.
tft hat geschrieben:Es kann sein das ich die Grunsatz Voraussetzungen nicht gut ausformuliert habe.
Du hast gar nichts formuliert. Also, was sind die Grundsatz-Voraussetzungen? Bitte klar und deutlich, kein Geschwafel ansonsten bin ich raus.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Find Fokus und Mutex Frage.

Beitrag von NicTheQuick »

So, jetzt kommt mal alle wieder runter hier, sonst gibt's Verwarnungen. Es gibt keinen Grund sich hier irgendwo angegriffen zu fühlen.
Bild
Antworten