Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Maus-Bewegung beschleunigen (https://www.delphipraxis.net/214630-maus-bewegung-beschleunigen.html)

Ralf Stehle 11. Feb 2024 15:32

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:
  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;
Hat jemand eine Idee, wie das richtig geht?

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!

https://blogs.embarcadero.com/de/win...ted-in-delphi/

Rollo62 11. Feb 2024 17:57

AW: Maus-Bewegung beschleunigen
 
Was sind Bordmittel, meinst Du das ControlPanel von Windows?
Hilft das weiter?
https://superuser.com/questions/1698...or-mouse-usage
https://learn.microsoft.com/en-us/wi...arametersinfoa

Es scheint aber auch Grenzen zu haben und maximal zu verdoppeln.
Zitat:

SPI_SETMOUSESPEED
0x0071

Sets the current mouse speed. The pvParam parameter is an integer between 1 (slowest) and 20 (fastest). A value of 10 is the default. This value is typically set using the mouse control panel application.

Ralf Stehle 12. Feb 2024 13:39

AW: Maus-Bewegung beschleunigen
 
Vielen Dank, hilft mir leider aber nicht weiter.

itsChris 12. Feb 2024 14:21

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?

Ralf Stehle 14. Feb 2024 18:43

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.

himitsu 14. Feb 2024 18:56

AW: Maus-Bewegung beschleunigen
 
Zitat:

HKEY_CURRENT_USER\Control Panel\Mouse\MouseSpeed
Jetzt rate mal was die Trackbar in den Mauseinstellungen macht. :roll:

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:
SystemParametersInfo(SPI_SETMOUSESPEED, 0, Pointer(15), SPIF_UPDATEINIFILE or SPIF_SENDCHANGE or SPIF_SENDWININICHANGE);
:gruebel:


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