Entwickler-Ecke

Windows API - Maus deaktivieren


Nilsener - Do 30.10.03 22:34
Titel: Maus deaktivieren
Hallo,

ich möchte in meinem Prog gerne die Maus deaktivieren und nachdem das Prog einige Aktivitäten ausgeführt hat die Maus wieder aktivieren.
Ist sowas möglich ?

Danke für Eure Hilfe, Gruss Nils


Delete - Do 30.10.03 23:15

Äh, kurze Frage: Warum?

Du kannst deine Maus in einem Rechteck einfangen. API Funktion habe ich wieder vergessen, da ich sie nie brauche und auch keinen Sinn darin sehe.

Wenn der Bneutzer wärend dein Programm was macht, nichts anklicken soll, weil sonst alles durcheinander gerät, dann deaktiviere die entsprechenden Controls und Menüpunkte.


Maggi - Fr 31.10.03 09:56

Hi,

ich denke auch das soetwas keinen Sinn macht, da hat der Luckie schon recht.... Bill Gates verbiegen ist schwierig! :wink:

Aber solange dein Prog diese Aktionen durchführt kannst du die gewünschten Controls (Buttons,Edits, u.s.w.) doch Disablen!

Gruß

Maggi


matze - Fr 31.10.03 11:16

die funktion geht so:

Maus einfangen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  Rec: TRect;
begin
  Rec.Left := Left;
  Rec.Top := Top;
  Rec.Right := Left + Width;
  Rec.Bottom := Top + Height;
  ClipCursor(@Rec);
end;



Um den alten Mausbereich wiederherzustellen:

Delphi-Quelltext
1:
ClipCursor(nil);                    


Nilsener - Di 04.11.03 23:04

Hallo Leute,

vielen Dank für Eure Tipps, wollte schon viel eher Antworten aber die Zeit gab es nicht her. Ich möchte die Maus deaktivieren um dann eine Mausbewegung zu simulieren, ohne dass der Benutzer die simulierte Bewegung mit der Maus stören kann. Mein Prog klickt automatisch in ein anderes Prog, sobald man die Maus dabei bewegt geht das natürlich schief.

Delphi-Quelltext
1:
2:
3:
4:
5:
  
Maus Deaktivieren
setcursorpos(x1, y1);
mouse_event(MOUSEEVENTF_leftUP,x1,y1,0,0);
Maus Aktivieren


Gruss Nils

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


BungeeBug - Di 04.11.03 23:46

Hi,

ich meine ne "bessere" Idee zuhaben ... ich weis aber nich ob es sinnvoll ist hier zu posten ... ich machs einfach und wenns nicht passt bitte sofort löschen


Delphi-Quelltext
1:
ShellExecute(handle,'open',PChar('rundll32.exe'),PChar('Mouse,Disable'),SW_ShowNormal);                    


matze - Mi 05.11.03 19:41

mach einfach folgendes:

deklarier folgende funktion

Delphi-Quelltext
1:
2:
Function BlockInput(fBlock: boolean): boolean; stdcall;
              external 'user32.dll'


bevor du den mausklick machst führst du dann BlockInput(true); us und danach das selbe aber mit false !!!


Nilsener - Do 06.11.03 21:23

Hallo Bungee,

ich hab deinen Vorschlag ausprobiert


Quelltext
1:
ShellExecute(handle,'open',PChar('rundll32.exe'),PChar('Mouse,Disable'),SW_ShowNormal);                    


mein prog sagt: undeclared identifier:'shellexecute'
muss ich noch mit der uses Anweisung irgend etwas einbinden ?

Gruss Nils


Nilsener - Do 06.11.03 21:25

Hallo Matze,

die 'echte' Maus wird tatsächlich deaktiviert. Mein Prog bewegt dann den Mauszeiger, kann aber offenbar keine Klicks mehr ausführen.

Hast Du noch eine Idee woran das liegen könnte ?

Gruss Nils


Raphael O. - Do 06.11.03 21:39

Nilsener hat folgendes geschrieben:
mein prog sagt: undeclared identifier:'shellexecute'
muss ich noch mit der uses Anweisung irgend etwas einbinden ?

ja, du musst "Shellapi" einbinden... :)


Nilsener - Fr 07.11.03 20:38

Danke Fiji,

nach Einbinden der 'ShellApi' schluckt er das 'ShellExecute', meckert jetzt aber über das 'handle'. Undeclared Identifier:'handle'. Noch eine idee ?


Quelltext
1:
ShellExecute(handle,'open',PChar('rundll32.exe'),PChar('Mouse,Disable'),SW_ShowNormal);                    


Gruss Nils


Delete - Fr 07.11.03 21:11

Wird Shellexecute in einer Methode von TForm aufgerufen? Wahrscheinlich nicht, deswegen sollte es heißen Form1.Handle.

Aber mal davon abgesehen, was passiert, wenn dein Programm abstürzt? Ich halte es für ganz schlechte Idee Maus und / oder Tastatur zu deaktivieren.

In deinem Fall, sag dem Benutzer vorher (Messagebox oder ähnliches), dass er die Maus nicht bewegen soll. Und auf was wird da geklickt? Ein Button? Dann hol dir das Handle und schick eine Nachricht an das fenster, die den Klick auslöst.


Nilsener - Mi 12.11.03 21:21

Vielen Dank Luckie,

so funktionierts


Quelltext
1:
ShellExecute(form1.handle,'open',PChar('rundll32.exe'),PChar('Mouse,Disable'),'',SW_ShowNormal);                    


wie kann die Maus wieder aktivieren ? So gehts nicht (obwohl es compiliert wird):



Quelltext
1:
ShellExecute(form1.handle,'open',PChar('rundll32.exe'),PChar('Mouse,Enable'),'',SW_ShowNormal);                    


Gruss Nils


Delete - Do 13.11.03 16:42

Maus-Hook und Mausnachrichten nicht weiterleiten.


Anonymous - Do 13.11.03 17:03

bevor jetzt die Frage kommt wie das geht:

http://www.assarbad.org/stuff/tutorials/hooks/

Mouse,Disable deaktiviert übrigens generell die Maus bis zum nächsten Windowsstart.


SQLException - Fr 29.04.05 13:13

hat sich erledigt.

*löschmich*