Einzelnen Beitrag anzeigen

Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#1

Maus-Bewegung beschleunigen

  Alt 11. Feb 2024, 16:32
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/
Ralf Stehle
ralfstehle@yahoo.de

Geändert von Ralf Stehle (11. Feb 2024 um 16:50 Uhr)
  Mit Zitat antworten Zitat