Wie die mittlere und rechte Maustaste sperren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Wie die mittlere und rechte Maustaste sperren

Beitrag 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. :freak:

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.
Benutzeravatar
captain third
Beiträge: 194
Registriert: 12.12.2004 13:14
Kontaktdaten:

Beitrag von captain third »

[offtopic]
wie jetzt,einfach so ohne das man was sieht willst du mäuse einsperren??? das ist net fein... :mrgreen:

[back to topic]
sry kann net helfen :cry:
natoll,jetzt muss ich noch einen Rechner zusammenbaun der 24 stunden am Tag online ist und meinen Server für mein Projekt Order of Blance laufen lässt
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Das war mal wieder so eine unnötige Antwort, die keiner braucht und das Niveau des Forums nur noch mehr sinken lässt. :roll: :roll: /:->

Wie wäre es mal mit einer sinnvollen Antwort? Wir sind hier nicht im Mülleimer... :|
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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?)
Benutzeravatar
rayman1970
Beiträge: 89
Registriert: 01.09.2004 16:10
Wohnort: Troisdorf bei Bonn
Kontaktdaten:

Beitrag 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
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag 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é
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag 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?
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Keine Ahnung, welchen Sinn das haben soll... Aber die Frage hörte sich für mich so an. Liege ich falsch?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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. :wink:

Sorry, dass ich das Problem im ersten Post nicht ausführlich genug beschrieben habe. :|
real
Beiträge: 468
Registriert: 05.10.2004 14:43

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