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/