Seite 1 von 2
Wie die mittlere und rechte Maustaste sperren
Verfasst: 18.01.2005 20:40
von NicTheQuick
Hallo Mädels!
Ich habe seit langem mal wieder eine Frage, weil ich zu faul bin in der SDK oder in dem MSDN zu suchen.
Und zwar möchte ich es verhindern, dass man irgendeine Maustaste außer der ersten benutzen kann. Oder andersrum: Es soll nur die linke Maustaste funktionieren.
Über den Mouse_LL-Hook geht es nicht, weil es auch auf Win98 laufen sollte.
Verfasst: 18.01.2005 20:56
von captain third
[offtopic]
wie jetzt,einfach so ohne das man was sieht willst du mäuse einsperren??? das ist net fein...
[back to topic]
sry kann net helfen

Verfasst: 19.01.2005 01:00
von NicTheQuick
Verfasst: 19.01.2005 01:40
von Ynnus
Hm, vielleicht die Nachricht abfangen und nicht weiterverarbeiten? In C (+ WinAPI) hatte ich mal aus Versehen keine Nachrichten eines bestimmten Fensters abgefragt und daher hatte ich dann auch keinerlei Standard-Befehle wie die Möglichkeit das Fenster zu verschieben, das Rechtsklick-Popup-Menü zu öffnen und sowas. Also ohne die Systemmessage da abzuarbeiten oder an Windows weiterzuleiten passiert nix mit dem Fenster, wie als wenn der Mauszeiger nicht funktionieren würde.
Wie das in PB geht weiß ich allerdings nicht.^^
Ich hab jetzt in PB noch nie Callbacks benutzt daher schreib ich es mal so auf wie ich in C damit umgehen würde:
Die Nachricht wird ja an die Windows Prozedur geschickt, also an ein Callback in PB. Es werden alle wichtigen Nachrichtentypen durchgegangen und verschiedene Dinge dazu ausgeführt. Zum Schluss der Callback-Prozedur werden die standard-Funktionen des Fensters noch abgefragt. Sowas wie - Rechte Maustaste auf Titelbar gedrückt oder auf "X" im Eck gedrückt oder oder oder. Wenn du dann abfragst, ob beispielsweise die Rechte Maustaste gedrückt wurde und wenn dies so ist, NICHT diese Standard-Funktionen abfragst, dann könnte es vielleicht so gehen.
Zumindest ist es so, dass wenn man keine Nachrichten (auch nicht die Standard-Systemnachrichten) des Fensters abarbeitet, also die Callback-Prozedur leer ist, dann werden auch keine Systemnahen Messages abgearbeitet. Demnach gibt es dann kein Popup-Menü bei Rechtsklick und sowas...
(Wie gesagt, alles bezogen auf C, da ich in PB noch nie eine Callback-Prozedur verwendet habe. Aber vielleicht gibts in PB ja auch einen Befehl der die Message intern weiterverarbeitet für alle Befehle die Systemnah sind?)
Verfasst: 19.01.2005 17:39
von rayman1970
Mal ein Code ! Geht ab Win98
Code: Alles auswählen
If OpenWindow(0,0,0,230,90,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"test")
If CreateGadgetList(WindowID())
ButtonGadget (1, 10, 10,200, 20, "Klick mich")
EndIf
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadgetID()
Case 1
i+1 : If i>1 : i=0 : EndIf
swapmousebutton_(i) ; Maustasten vertauschen
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
EndIf
swapmousebutton_(0) ; Maustasten wieder normal
Gruss Rayman
Verfasst: 20.01.2005 14:07
von real
Hi,
ich glaube nicht, dass NicTheQuick nur in seinem Programm die Maustasten sperren möchte, sondern global... Warum hätte er sich sonst mit globalen Hooks auseinandersetzen sollen?
Bei Win9x mußt Du das DDI hooken, um an die Maus ranzukommen. Schau Dir mal die Sourcen von UltraVNC an oder google mal. Ich hab leider keine Beispiele und Erfahrungen damit.
Gruß
René
Verfasst: 20.01.2005 14:52
von DrShrek
real hat geschrieben:ich glaube nicht, dass NicTheQuick nur in seinem Programm die Maustasten sperren möchte, sondern global...
Und welchen Sinn soll das machen? Nur weil ich es nicht in meiner Umgebung unterstützen möchte, soll es auch kein anderes Programm länger nutzen können?
Verfasst: 20.01.2005 18:31
von real
Keine Ahnung, welchen Sinn das haben soll... Aber die Frage hörte sich für mich so an. Liege ich falsch?
Verfasst: 21.01.2005 20:56
von NicTheQuick
real hat absolut Recht. Ich will die Maustasten global sperren.
Das Programm ist für einen Patienten bei meiner Schwester. Er hat motorische Probleme und drückt immer aller Maustasten irgendwie gleichzeitig oder aus Versehen. Das soll mein Programm nun verhindern.
Es gibt da also so ein paar Lernprogramme, die er auf seinem Laptop hat und da sollte man eben nur die linke Maustaste benutzen können.
Danke schonmal für die Hilfe, aber wie ich das ganze in meinen eigenen Programmen machen könnte, wüsste ich selbst.
Sorry, dass ich das Problem im ersten Post nicht ausführlich genug beschrieben habe.

Verfasst: 22.01.2005 09:20
von real
Auf meiner Suche nach LowLevel-Mouse-Hooking unter Win9x bin ich im iNet auf einen Befehl namens SetDDIHook gestoßen. Vielleicht kann ja einer dazu hier was sagen?
Es gibt ein Buch namens "Windows Graphics Programming Win32 GDI and DirectDraw" von Feng Yuan. Da gibt es einen Abschnitt über DDI-Spying und entsprechende Sourcen (in C oder C++). Das dürfte für Dich interessant sein.
Hab gerade noch eine interessante Seite gefunden:
http://dasomnetwork.com/~leedw/mywiki/m ... _20Hooking