Seite 1 von 2

WindowFromPoint_() gibt immer 0 zurück

Verfasst: 07.06.2018 10:46
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

Re: WindowFromPoint_() gibt immer 0 zurück

Verfasst: 07.06.2018 11:12
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

Re: WindowFromPoint_() gibt immer 0 zurück

Verfasst: 07.06.2018 11:15
von NicTheQuick
Oh, der kriegt den Punkt als Wert und nicht als Pointer. Das erklärt natürlich einiges. :lol:

Danke :allright:

Re: WindowFromPoint_() gibt immer 0 zurück

Verfasst: 07.06.2018 11:22
von RSBasic
Ich bin neugierig. :D Was für eine Windows-Anwendung möchtest du gerne entwickeln?

Re: WindowFromPoint_() gibt immer 0 zurück

Verfasst: 07.06.2018 11:23
von NicTheQuick
Bleibt erst mal geheim. Vielleicht gibt es Geld dafür. :-D Hier sind schon einige begeistert.

Re: WindowFromPoint_() gibt immer 0 zurück

Verfasst: 07.06.2018 12:57
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

Re: WindowFromPoint_() gibt immer 0 zurück

Verfasst: 07.06.2018 13:00
von NicTheQuick
Ja, logisch. Ich mag die Struktur-Variante aber lieber.

Re: WindowFromPoint_() gibt immer 0 zurück

Verfasst: 16.08.2018 11:02
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

Re: WindowFromPoint_() gibt immer 0 zurück

Verfasst: 16.08.2018 11:17
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.

Re: WindowFromPoint_() gibt immer 0 zurück

Verfasst: 16.08.2018 11:39
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" :)