WindowFromPoint_() gibt immer 0 zurück

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
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:

WindowFromPoint_() gibt immer 0 zurück

Beitrag von NicTheQuick »

Hi Leute,

ich habe mir folgendes Schnipsel zusammengebastelt und mich gefragt, warum WindowFromPoint_() immer 0 zurück gibt. Mache ich was falsch?
Normalerweise sollte ich das Window-Handle erhalten, das sich unter der Maus befindet. So zumindest die Theorie. Und am Ende will ich die Dimension des darunter liegenden Fensters erfassen. Das mache ich dan mit GetWindowRect_(). Aber soweit komme ich ja gar nicht erst.

Kann mir jemand helfen?

Code: Alles auswählen

Structure MSLLHOOKSTRUCT
	pt.POINT
	mouseData.l
	flags.l
	time.l
	*dwExtraInfo
EndStructure

Procedure.i MouseHook(nCode, wParam, *p.MSLLHOOKSTRUCT)
	If nCode = #HC_ACTION
		Select wParam
			Case #WM_MOUSEMOVE
				;Debug "" + *p\pt\x + "," + *p\pt\y
			;Case #WM_LBUTTONDBLCLK
				hwnd.l = WindowFromPoint_(*p\pt)
				Debug "" + *p\pt\x + "," + *p\pt\y + ~"\t" + hwnd
		EndSelect
	EndIf
	
	ProcedureReturn CallNextHookEx_(0, nCode, wParam, *p)
EndProcedure

SetWindowsHookEx_(#WH_MOUSE_LL, @MouseHook(), GetModuleHandle_(0), 0)

OpenWindow(0, 0, 0, 400, 300, "test")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WindowFromPoint_() gibt immer 0 zurück

Beitrag von RSBasic »

Hi

Code: Alles auswählen

EnableExplicit

Structure MSLLHOOKSTRUCT
  StructureUnion
    pt.POINT
    q.q
  EndStructureUnion
  mouseData.l
  flags.l
  time.l
  *dwExtraInfo
EndStructure

Procedure.i MouseHook(nCode, wParam, *p.MSLLHOOKSTRUCT)
  Protected hwnd
  
  If nCode = #HC_ACTION
    Select wParam
      Case #WM_MOUSEMOVE
        ;Debug "" + *p\pt\x + "," + *p\pt\y
        ;Case #WM_LBUTTONDBLCLK
        hwnd = WindowFromPoint_(*p\q)
        Debug "" + *p\pt\x + "," + *p\pt\y + ~"\t" + hwnd
    EndSelect
  EndIf
  
  ProcedureReturn CallNextHookEx_(0, nCode, wParam, *p)
EndProcedure

SetWindowsHookEx_(#WH_MOUSE_LL, @MouseHook(), GetModuleHandle_(0), 0)

OpenWindow(0, 0, 0, 400, 300, "test")

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
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: WindowFromPoint_() gibt immer 0 zurück

Beitrag von NicTheQuick »

Oh, der kriegt den Punkt als Wert und nicht als Pointer. Das erklärt natürlich einiges. :lol:

Danke :allright:
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: WindowFromPoint_() gibt immer 0 zurück

Beitrag von RSBasic »

Ich bin neugierig. :D Was für eine Windows-Anwendung möchtest du gerne entwickeln?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
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: WindowFromPoint_() gibt immer 0 zurück

Beitrag von NicTheQuick »

Bleibt erst mal geheim. Vielleicht gibt es Geld dafür. :-D Hier sind schon einige begeistert.
Bild
Benutzeravatar
chi
Beiträge: 90
Registriert: 17.05.2007 09:30
Wohnort: Linz - Austria

Re: WindowFromPoint_() gibt immer 0 zurück

Beitrag von chi »

@NicTheQuick:

Wenn du...

Code: Alles auswählen

hwnd.l = WindowFromPoint_(*p\pt)
auf

Code: Alles auswählen

hwnd.l = WindowFromPoint_(PeekQ(*p\pt))
änderst, dann funktioniert es auch mit deinem Beispiel
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: WindowFromPoint_() gibt immer 0 zurück

Beitrag von NicTheQuick »

Ja, logisch. Ich mag die Struktur-Variante aber lieber.
Bild
oO0XX0Oo
Beiträge: 55
Registriert: 21.07.2017 22:36

Re: WindowFromPoint_() gibt immer 0 zurück

Beitrag von oO0XX0Oo »

Gibt es irgendeinen Grund dafür, warum:

Code: Alles auswählen

Case #WM_LBUTTONDBLCLK
hier nichts tut?

Egal in welchem der beiden Codebeispiele...

Auskommentiert und lediglich einen Debug output gesetzt,
wird hier irgendwie nicht getriggert...

Code: Alles auswählen

Case #WM_LBUTTONDOWN
funktioniert dagegen einwandfrei
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: WindowFromPoint_() gibt immer 0 zurück

Beitrag von NicTheQuick »

Da gibt es keinen Grund. Ich hab für den Code-Schnipsel nur den kompletten Code des Projektes stark eingedampft. Da blieb dann dieses Kommentarwirrwarr übrig.
Bild
oO0XX0Oo
Beiträge: 55
Registriert: 21.07.2017 22:36

Re: WindowFromPoint_() gibt immer 0 zurück

Beitrag von oO0XX0Oo »

Nein, NicTheQuick, ich glaub du verstehst mich falsch.

Es geht darum, dass der hook gar nicht auf #WM_LBUTTONDBLCLK reagiert,
nicht darum, dass du es nur (auskommentiert) "hast drinstehen lassen" :)
Antworten