If GetAsyncKeyState_(#VK_LBUTTON) ...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

If GetAsyncKeyState_(#VK_LBUTTON) ...

Beitrag von Delle »

Hallo,

ich frage systemweit ab, ob die linke Maustaste geklickt wurde:

Code: Alles auswählen

If GetAsyncKeyState_(#VK_LBUTTON)

Debug "klick"

EndIf
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
PB 6.21 | Win 11
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: If GetAsyncKeyState_(#VK_LBUTTON) ...

Beitrag 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)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: If GetAsyncKeyState_(#VK_LBUTTON) ...

Beitrag von Delle »

Das &1 ist die Lösung :)

Code: Alles auswählen

If GetAsyncKeyState_(#VK_LBUTTON) &1

Debug "klick"

EndIf
PB 6.21 | Win 11
Benutzeravatar
TheCube
Beiträge: 169
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

Re: If GetAsyncKeyState_(#VK_LBUTTON) ...

Beitrag 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 :oops: trotz ein paar gefundener C#-Schnipsel zum Thema.
.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: If GetAsyncKeyState_(#VK_LBUTTON) ...

Beitrag von Delle »

@TheCube:

Wieso machst Du nicht einfach während der "Bildschirmpause" ein leeres Fenster auf was alle Mauseingaben abfängt (bzw. einfach ignoriert)?
PB 6.21 | Win 11
Benutzeravatar
TheCube
Beiträge: 169
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

Re: If GetAsyncKeyState_(#VK_LBUTTON) ...

Beitrag 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 8)
Antworten