Mausgeschwindigkeit abhängig vom Fenster machen?

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Meister Lampe
Posts: 231
Joined: 06 Apr 2014, 13:28

Mausgeschwindigkeit abhängig vom Fenster machen?

Post by Meister Lampe » 25 Oct 2023, 07:35

Hallo liebes Forum!

Ich habe viel Scan- und Bildbearbeitung zu erledigen, wofür es nötig ist, die jeweiligen Objekte zu erfassen. Einerseits durch das Setzen möglichst exakter Rahmen im Scanprogramm (EpsonScan), womit man sich dann schon viel Nachbearbeitung sparen kann, andererseits beim Beschneiden/Freistellen im Rahmen der Nachbearbeitung selber (Photoshop), die natürlich auch möglichst exakt sein sollte.
Das gelingt nur dann wirklich präzise, wenn die Mausgeschwindigkeit relativ langsam eingestellt ist. Sonst ist es auch sehr belastend für die Hand, wenn man so kleine Bewegungen mit der Maus ausführen muß und je nach dem Untergrund reagiert die auch nicht so genau.
Andererseits möchte ich außerhalb dieser beiden Programme die Maus wie gewöhnlich benutzen und bewegen können, auf dem Desktop und in den anderen Programmen wäre sie mir ansonsten zu lahm.
Kann ich dafür die Mausgeschwindigkeit entsprechend abhängig von dem aktuellen Fenster bzw. der aktuell benutzten Software festlegen?

Wäre Klasse, wenn Ihr mir helfen könntet.

Viele Grüße von Meister Lampe

Rohwedder
Posts: 7732
Joined: 04 Jun 2014, 08:33
Location: Germany

Re: Mausgeschwindigkeit abhängig vom Fenster machen?

Post by Rohwedder » 25 Oct 2023, 08:01

Hallo,
hiermit kannst du die Mausgeschwindigkeit steuern. Hotkey Q: ein/aus

Code: Select all

#Requires AutoHotkey v1.1.33
SetBatchLines -1
SetMouseDelay -1
CoordMode, Mouse, Screen
DllCall("SetWindowsHookEx"
, "Int", 14
, "Ptr", RegisterCallback("MouseMove")
, "Ptr", DllCall("GetModuleHandle", "Ptr", 0, "Ptr")
, "UInt", 0) ; returns a pointer (32bit = 4 bytes / 64bit = 8 bytes)
GroupAdd, Slow, ahk_class OpusApp ahk_exe WINWORD.EXE
GroupAdd, Slow, ahk_class XLMAIN ahk_exe EXCEL.EXE
GroupAdd, VerySlow, ahk_class Notepad++ ahk_exe notepad++.exe
GroupAdd, Inverse, ahk_exe firefox.exe
Return
q:: ; Hook On/Off
MouseGetPos, X0, Y0
SetTimer, Factor,% (Hook := !Hook)?100:"Off"
Factor:
MouseGetPos,,, ID
IF WinExist("ahk_id " ID " ahk_group Slow")
	Factor := .3
Else IF WinExist("ahk_id " ID " ahk_group VerySlow")
	Factor := .1
Else IF WinExist("ahk_id " ID " ahk_group Inverse")
	Factor := -1
Else Factor := 1
Return

MouseMove(nCode, wParam, lParam)
{
    Global
    If (wParam = 0x0200) And Hook ; WM_MOUSEMOVE
    {
        dx := NumGet(lParam+0, "Short") - X0, dy := NumGet(lParam+4, "Short") - Y0
        DllCall("SetCursorPos", "int", X0 += dx*Factor, "int", Y0 += dy*Factor) 
        Return, 1
    }
    Return, DllCall("CallNextHookEx", "UInt", 0, "Int"
    , nCode, "UInt", wParam, "UInt", lParam)
}
Oder eine weniger aufwendige Methode, Escape beendet das Skript:

Code: Select all

#Requires AutoHotkey v1.1.33
GroupAdd, Slow, ahk_class OpusApp ahk_exe WINWORD.EXE
GroupAdd, Slow, ahk_class XLMAIN ahk_exe EXCEL.EXE
GroupAdd, VerySlow, ahk_class Notepad++ ahk_exe notepad++.exe
SPI_GETMOUSESPEED := 0x70
SPI_SETMOUSESPEED := 0x71
; Ermittelt die aktuelle Geschwindigkeit, um sie später wiederherzustellen:
DllCall("SystemParametersInfo", "UInt", SPI_GETMOUSESPEED, "UInt", 0, "UIntP", OrigMausGeschw, "UInt", 0)
SetTimer, Geschw, 100
OnExit, ~*Esc
Return
Geschw:
MouseGetPos,,, ID
IF WinExist("ahk_id " ID " ahk_group Slow")
	Geschwneu := 3
Else IF WinExist("ahk_id " ID " ahk_group VerySlow")
	Geschwneu := 1
Else Geschwneu := OrigMausGeschw
IF (Geschwneu <> Geschwist)
; Verringert nun die Geschwindigkeit des Mauszeigers im vorletzten Parameter (im Bereich von 1 bis 20, 10 ist Standard):
	DllCall("SystemParametersInfo", "UInt", SPI_SETMOUSESPEED, "UInt", 0, "Ptr", Geschwist:=Geschwneu, "UInt", 0)
Return
~*Esc::
Critical
DllCall("SystemParametersInfo", "UInt", SPI_SETMOUSESPEED, "UInt", 0, "Ptr", OrigMausGeschw, "UInt", 0)
ExitApp
Die Fenstergruppen kannst du beliebig erweitern und anpassen.

Post Reply

Return to “Ich brauche Hilfe”