Seite 1 von 1
If GetAsyncKeyState_(#VK_LBUTTON) ...
Verfasst: 17.03.2012 15:30
von Delle
Hallo,
ich frage systemweit ab, ob die linke Maustaste geklickt wurde:
Wenn der User die Maustaste allerdings länger gedrückt hält, dann erscheint mehrmals die Debug-Ausgabe.
Wie kann ich mittels API abfragen ob die Taste losgelassen wurde?
Sowas in der Art:
Code: Alles auswählen
If GetAsyncKeyState_(#VK_LBUTTON)
Repeat:Until GetAsyncKeyState_(#VK_LBUTTON_UP)
Debug "klick"
EndIf
Re: If GetAsyncKeyState_(#VK_LBUTTON) ...
Verfasst: 17.03.2012 15:36
von RSBasic
Wie möchtest du das ermitteln? Nur in deiner Anwendung oder überall?
Wenn nur in deiner Anwendung:
Code: Alles auswählen
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_LBUTTONUP
Debug "Linke Maustaste wurde gedrückt. (Losgelassen)"
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 0, 0, 200, 100, "Messages", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget)
SetWindowCallback(@WinCallback()) ; Callback aktivieren
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Überall:
Code: Alles auswählen
EnableExplicit
Define EventID
Define hhkLLMouse
Procedure MouseKeyHook(nCode, wParam, lParam)
Select wParam
Case #WM_LBUTTONUP
Debug "Linke Maustaste wurde gedrückt. (Losgelassen)"
EndSelect
ProcedureReturn CallNextHookEx_(0, nCode, wParam, lParam)
EndProcedure
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
hhkLLMouse = SetWindowsHookEx_(#WH_MOUSE_LL, @MouseKeyHook(), GetModuleHandle_(0), 0)
Repeat
EventID=WaitWindowEvent()
Until EventID = #PB_Event_CloseWindow
EndIf
UnhookWindowsHookEx_(hhkLLMouse)
Re: If GetAsyncKeyState_(#VK_LBUTTON) ...
Verfasst: 17.03.2012 15:38
von Delle
Das &1 ist die Lösung
Code: Alles auswählen
If GetAsyncKeyState_(#VK_LBUTTON) &1
Debug "klick"
EndIf
Re: If GetAsyncKeyState_(#VK_LBUTTON) ...
Verfasst: 20.03.2012 00:09
von TheCube
Hallo, ich hänge mich hier an das Thema einfach mal dran .... und zwar wegen des Beispielcodes ("Überall-Abfrage")
von RSBasic mit diesem SetWindowsHookEx_ .
Ob und wie wäre es möglich ein Mausevent - wie z.B. eine Maustaste - auf Wunsch global wegzufiltern ?
(Anwendung z.B: Fehlbedienung bei abgeschaltetem Bildschirm vermeiden)
Ich gebe zu, diesmal habe ich es noch nicht selber versucht

trotz ein paar gefundener C#-Schnipsel zum Thema.
.
Re: If GetAsyncKeyState_(#VK_LBUTTON) ...
Verfasst: 20.03.2012 00:36
von Delle
@TheCube:
Wieso machst Du nicht einfach während der "Bildschirmpause" ein leeres Fenster auf was alle Mauseingaben abfängt (bzw. einfach ignoriert)?
Re: If GetAsyncKeyState_(#VK_LBUTTON) ...
Verfasst: 21.03.2012 00:36
von TheCube
@Delle
Klar für den üblichen Bildschirmschoner gibts wohl dutzende bessere Methoden,
als mit Hooks herumzutricksen .... war ja nur ein Beispiel für ein z.B. hardwaremässig abgeschaltetes Display.
Ist eine reine HowToDo-Frage:
Wenn ich, warum nun auch immer, die Funktion einer Maustaste auf dem Desktop temporär unterbinden möchte,
aber ansonsten (Bewegung etc.) alles weiter wie üblich funktioniert.
Edit: Einen schönen Einstieg gibts u.A. hier :
http://www.purebasic.fr/english/viewtop ... mouse+hook
Meine Frage hat ich damit erledigt 