![]() |
Maus-Bewegung beschleunigen
Hallo,
ich habe einen neuen Ultrawide-Monitor und Probleme mit der Maus. Der PC ist leider schon etwas älter. Windows 10. Delphi 7. Leider lässt sich meine Maus mit Windows-Bordmitteln nicht weiter beschleunigen. Jetzt versuche ich mit einem Mouse-Hook die Maus bei Drücken der ALT-Taste zu beschleunigen. Im Beispiel nur einfach mal nach Rechts: Bei Auswertung von WM_LBUTTONDOWN funktioniert das auch. Die Maus hüpft jetzt bei jedem Click 200 Pixel weiter nach rechts:
Delphi-Quellcode:
WM_LBUTTONDOWN :
begin if GetKeyState(VK_MENU) < 0 then SetCursorPos(200 + pt.x , pt.y); end; end; Das ist sicher aber keine sehr ansprechende Lösung. Gewünscht ist eine kontinuierliche schnellere Bewegung. Bei Drücken der ALT-Taste sollte sich die Maus einfach doppelt oder dreimal so schnell in die gewünschte Richtung bewegen. Also eine Maus-Zeiger-Beschleungigung bei Druck der ALT-Taste. Ich habe auch mal versucht, WM_MOUSEMOVE zu benutzen. Zum Test mal nur nach Rechts. Komischerweise springt die Maus dann schnell mal in die gewünschte Richtung und kommt sofort zurück!
Delphi-Quellcode:
WM_MOUSEMOVE:
if GetKeyState(VK_MENU) < 0 then begin SetCursorPos(1500, pt.y); Sleep(50); Application.ProcessMessages; end; Hier nochmal etwas ausführlicher Code mit dem gesamten Mouse-Hook:
Delphi-Quellcode:
Hat jemand eine Idee, wie das richtig geht?
private
{ Private-Deklarationen } HotKeySet:Boolean; protected { Protected-Deklarationen } procedure WMHotKey(var Message:TMessage); message WM_HOTKEY; end; MouseLLHookStruct = record pt : TPoint; mouseData : cardinal; flags : cardinal; time : cardinal; dwExtraInfo : cardinal; end; function LowLevelMouseHookProc(nCode, wParam, lParam : integer) : integer; stdcall; var Form1: TForm1; mHook : cardinal; direction: integer; z: integer; implementation function LowLevelMouseHookProc(nCode, wParam, lParam : integer) : integer; stdcall; // possible wParam values: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN, WM_RBUTTONUP var info : ^MouseLLHookStruct absolute lParam; begin result := CallNextHookEx(mHook, nCode, wParam, lParam); with info^ do begin begin Form1.Caption := 'X: '+IntToStr(pt.x) + ' Y: '+IntToStr(pt.y); end; case wParam of WM_LBUTTONDOWN : begin if GetKeyState(VK_MENU) < 0 then SetCursorPos(200 * direction + pt.x , pt.y); end; end; end; end; Bei embarcadero.com habe ich nettes Tool gefunden, mit dem das gehen sollte. Leider lässt sich die Maus an meinem PC damit auch nicht beschleunigen, aber ich kann die Maus damit durch den linken Bildrand schieben und sie kommt rechts heraus. Das hilft sehr! ![]() |
AW: Maus-Bewegung beschleunigen
Was sind Bordmittel, meinst Du das ControlPanel von Windows?
Hilft das weiter? ![]() ![]() Es scheint aber auch Grenzen zu haben und maximal zu verdoppeln. Zitat:
|
AW: Maus-Bewegung beschleunigen
Vielen Dank, hilft mir leider aber nicht weiter.
|
AW: Maus-Bewegung beschleunigen
Warum hilft das nicht weiter? Das macht doch genau das, was du wolltest: die aktuelle Mausgeschwindigkeit ändern.
Oder habe ich deine Frage falsch verstanden? |
AW: Maus-Bewegung beschleunigen
Vielen Dank für Eure Hilfe
Leider habe ich keine Ahnung wie ich diese WinApi-Funktion in Delphi umsetzen kann. Wahrscheinlich so ?
Delphi-Quellcode:
SystemParametersInfo(SPI_SETMOUSESPEED, 0, 20, 0);
Ich habe mittlerweile herausgefunden, wie man in der Registry die Mausgeschwindigkeit bis auf 20 erhöhen kann HKEY_CURRENT_USER\Control Panel\Mouse\MouseSpeed=20 Damit geht es etwas besser, ich kann mich daran gewöhnen. Bei dem breiten Monitor an meinem Uralt-PC muss ich aber trotzdem zweimal ansetzen, bis ich mit der Maus von ganz links nach ganz rechts komme. |
AW: Maus-Bewegung beschleunigen
Zitat:
OK, das in der Registry heißt SPI_SETMOUSESPEED aber "Sensitivity" (in den alten und den neuen Settings) Und "Mausspeed" ist ein Boolean. 0 = aus / 1 = Zeigerbeschleunigung verbessern (im alten Dialog). [Win] Mauseinstellungen > Zusätzliche Mauseinstellungen > Zeigeroptionen Hmmmmmmmmmmmmmmmm
Delphi-Quellcode:
:gruebel:
SystemParametersInfo(SPI_SETMOUSESPEED, 0, Pointer(15), SPIF_UPDATEINIFILE or SPIF_SENDCHANGE or SPIF_SENDWININICHANGE);
Wieso so oft neu anstetzen? je nach Bewegungsgeschwindigkeit der Maus sind es bei 4K ultrawide (UWGQH) 2 bis 5 Zentimeter, mit einer Standardmaus. (mit Gämingmaus auf HD ein paar Millimeter) PS: für 10€ eine neue Maus mit höherer DPI besorgen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz