Maus Beschleunigung per Batch beim Starten deaktivieren?
Hallo meine Freunde!
Mir ist die letzten Monate etwas sehr unangenehmes beim Zocken passiert was ich gerne vermeiden wollen würde. Undzwar hat irgendein Programm die Zeigerbeschleunigung oder Mouse Acceleration angemacht, weshalb mein Aim, mein Spaß und generell das "flüssige" Gefühl beim aimen mir genommen wurde, bemerkt hab ich das heute erst, nachdem gestern Nacht ein Tiktoker berichtet hat das das bei ihm genauso war. Jetzt wollte ich fragen ob es möglich ist eine Batch datei zu schreiben, die diese Funktion nach dem Starten von Windows automatisch ausschaltet, sodass hoffentlich nicht nochmal diese unannehmlichkeiten durchmachen muss.
LG
4 Antworten
Mit purem Batch geht das nicht,
Dazu müsste man schon auf Systemfunktionen wie SystemparametersInfo zugreifen. Dazu braucht man jedoch eine systemnahe Sprache (C++,C# etc).
Gegenwärtig habe ich jedoch keine Zeit mir die Sache näher Anzuschauen.
Hallo Einblock,
warum regulierst du nicht DPI an deiner Maus direkt und speicherst den Wert? Akut würde mir keine Software einfallen, die automatisch die Geschwindkeit meiner Maus verändert - außer die Maussoftware selber in der ich verschiedene Geschwindigkeitsprofile hinterlegt habe.
Nein nein. Die DPI ist nicht das Problem. Das Problem ist die Maus beschleunigungs Einstellung in den Windows Einstellungen. Hat man diese aktiviert, bewegt sich der Zeiger weiter wenn man die Maus schneller Bewegt. Also hat man eine Distanz von sagen wir mal 30cm die ohne diese Einstellung einmal 360° Drehen bedeutet, ist bei eingeschalteter Einstellung ein schnelles bewegen der Maus 420° und langsames bewegen 200°. Deswegen kann man kaum richtig aimen da die DPI von der Geschwindigkeit der Maus abhängt und nicht davon was man eingestellt hat.
Dann exit hab ich mich vertan. Aber in meinem Fall soll das Consolen Fenster wieder geschlossen werden nach Ausführung.
Ich bin in diesen Sachen auch nur absoluter Laie ;) Aber bei mir nutzt auch mein Opa den Rechner und wenn da irgendwas passiert was er nicht kennt, ruft der mich immer an.
Hab das sogar per Aufgabenplanung automatisiert. Da nach dem letzten Win Update sich bei mir die Mausbeschleunigung automatisch nach dem Neustarten vom Rechner aktiviert.
Gruß xHazeBaze und schönes Wochenende
Mausbeschleunigung ist standardmäßig eingeschaltet. Außer in einigen Spielen ist diese Funktion nützlich, sonst würde man mit der Maus riesige Strecken zurücklegen müssen um den Bildschirm zu überbrücken.
Es macht wenig Sinn die Beschleunigung komplett abzuschalten, besser ist es in einer Batch vor dem Spiel abzuschalten und danach wieder an.
habs mal mit heißer Nadel gestrickt.
wie bereits erwähnt, mit Batch ist da normalerweise nichts zu machen .
...aber mit Batch kann man andere Sprachen verwenden...
Toggle_Mouse_Acceleration.cmd
@echo off
powershell "Add-Type -Memberdefinition '[DllImport("""user32.dll""")]public static extern Boolean SystemParametersInfo(UInt32 uiAction,UInt32 uiParam,IntPtr pvParam,UInt32 fWinIni);' -Namespace WinUser -Name Tools;[IntPtr]$mouseParamsPtr=[system.runtime.interopservices.marshal]::AllocHGlobal(12);[WinUser.Tools]::SystemParametersInfo(3,0,$mouseParamsPtr, 0)>$Null;[int32]$MouseAcc = [system.runtime.interopservices.marshal]::ReadInt32($mouseParamsPtr, 8);[system.runtime.interopservices.marshal]::WriteInt32($mouseParamsPtr,8,$MouseAcc -bxor 1);[WinUser.Tools]::SystemParametersInfo(4,0,$mouseParamsPtr,0)>$Null;$MouseAcc -bxor 1;[system.runtime.interopservices.marshal]::FreeHGlobal($mouseParamsPtr)"
pause
...Der Powershell-Einzeiler ist ein wahres Monster.
Letztlich geschiet nichts weiter als das ich die gleichen Funktionen anspreche, welche auch über die GUI bedient werden können. https://www.pcwelt.de/tipps/So-deaktivieren-Sie-die-Mausbeschleunigung-in-Windows-10-10795160.html
Jeder Aufruf schaltet in den "entgegengesetzten" Zustand
Die Batchzeile ist nur schwer lesbar, darum auch noch das gleiche als normales Powerschelscript.
Toggle_Mouse_Acceleration.ps1
[UInt32]$SPI_GETMOUSE = 0x0003
[UInt32]$SPI_SETMOUSE = 0x0004
Add-Type -Memberdefinition '[DllImport("user32.dll")]public static extern Boolean SystemParametersInfo(UInt32 uiAction,UInt32 uiParam,IntPtr pvParam,UInt32 fWinIni);' -Namespace WinUser -Name Tools
[IntPtr]$mouseParamsPtr = [system.runtime.interopservices.marshal]::AllocHGlobal(12) #get pointer to new int32 Array
[WinUser.Tools]::SystemParametersInfo($SPI_GETMOUSE, 0, $mouseParamsPtr, 0) #get Mouseparameters to allocated Array
[int32]$MouseAcc = [system.runtime.interopservices.marshal]::ReadInt32($mouseParamsPtr, 8) #read 3 interger
[system.runtime.interopservices.marshal]::WriteInt32($mouseParamsPtr, 8, $MouseAcc -bxor 1) #write back negated Value
[WinUser.Tools]::SystemParametersInfo($SPI_SETMOUSE, 0, $mouseParamsPtr, 0) #set it
[system.runtime.interopservices.marshal]::FreeHGlobal($mouseParamsPtr) #free Memory
$MouseAcc -bxor 1 #show new state
pause
Hier noch etwas zum anpassen der Mousegeschwindigkeit:
set Mousespeed.cmd
@echo off
rem Zahlen von 1 bis 20 erlaubt! default ist 10.
set "MouseSpeed=5"
powershell "Add-Type -Memberdefinition '[DllImport("""user32.dll""")]public static extern Boolean SystemParametersInfo(UInt32 uiAction,UInt32 uiParam,IntPtr pvParam,UInt32 fWinIni);' -Namespace WinUser -Name Tools;[WinUser.Tools]::SystemParametersInfo(113, 0, %MouseSpeed%, 0)>$null"
pause
...dito lesbar als Powershellscript.
set Mousespeed.ps1
$MouseSpeed=5
[uint32]$SPI_SETMOUSESPEED = 0x0071
Add-Type -Memberdefinition '[DllImport("user32.dll")]public static extern Boolean SystemParametersInfo(UInt32 uiAction,UInt32 uiParam,IntPtr pvParam,UInt32 fWinIni);' -Namespace WinUser -Name Tools
[WinUser.Tools]::SystemParametersInfo($SPI_SETMOUSESPEED, 0, $MouseSpeed, 0)>$null
pause
natürlich kann man auf dieser Basis noch viel mehr beeinflussen, aber diese beiden kleinen Mousetweaker sollten für Deine Zwecke mehr als ausreichend sein.
die Anzahl der Scrolllines fü das Scrollwheel zu setzen ist drivial, da es hierfür eine dokumentierte API-Funktion gibt.
- https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfow (Siehe SPI_SETWHEELSCROLLLINES)
scrollspeed.cmd
@echo off
rem Zahlen von 0 bis 100 erlaubt! default ist 3.
set "MouseScrollLines=50"
powershell "Add-Type -Memberdefinition '[DllImport("""user32.dll""")]public static extern Boolean SystemParametersInfo(UInt32 uiAction,UInt32 uiParam,IntPtr pvParam,UInt32 fWinIni);' -Namespace WinUser -Name Tools;[WinUser.Tools]::SystemParametersInfo(105, MouseScrollLines, 0, 2)>$null"
das ganze noch mal als pures Powershellscript Zeilenweise aufgelöst:
$MouseScrollLines=50 #default is 3
[uint32]$SPI_SETWHEELSCROLLLINES = 0x0069
Add-Type -Memberdefinition '[DllImport("user32.dll")]public static extern Boolean SystemParametersInfo(UInt32 uiAction,UInt32 uiParam,IntPtr pvParam,UInt32 fWinIni);' -Namespace WinUser -Name Tools
[WinUser.Tools]::SystemParametersInfo($SPI_SETWHEELSCROLLLINES, $MouseScrollLines, 0, 2)
etwas haariger wird es bereits bei der Größe der Mousecursors. da gibt es mehr als einen Ansatzpunkt und keiner davon ist dokumentiert.
Man kann die in der Registry unter HKEY_CURRENT_USER\Control Panel\Cursors gesetzte CursorBaseSize direkt via einer undokumentierten SPI aktivieren :
@echo off
rem Zahlen von 1 bis Bildschirmgröße . default ist 32.
set "MouseCursorSize=256"
powershell "Add-Type -Memberdefinition '[DllImport("""user32.dll""")]public static extern Boolean SystemParametersInfo(UInt32 uiAction,UInt32 uiParam,IntPtr pvParam,UInt32 fWinIni);' -Namespace WinUser -Name Tools;[WinUser.Tools]::SystemParametersInfo(8233, 0, %MouseCursorSize%, 2)>$null"
dito pur Powershell:
$MouseCursoSize=512 # Size in Pixel
[uint32]$Undocumented_SPI_SETMouseCursorBaseSize = 0x2029 #undocumented SPI-function !!!SPI-Variablename is not the correct, only my fantasy!!!
Add-Type -Memberdefinition '[DllImport("user32.dll")]public static extern Boolean SystemParametersInfo(UInt32 uiAction,UInt32 uiParam,IntPtr pvParam,UInt32 fWinIni);' -Namespace WinUser -Name Tools
[WinUser.Tools]::SystemParametersInfo($Undocumented_SPI_SETMouseCursorBaseSize, 0, $MouseCursoSize, 0x01);
...Auf irgentwelche Interaktionen bezüglich geänderte Screen DPI Settings möchte ich nicht eingehen...
das hat auch nichts mit den Mouse-Settings unter "erleichterte Bedienung" zu tun:
die Settings für "ms-settings:easeofaccess-mouse" lassen sich zwar im Registrykey "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Accessibility" mit den Werten CursorColor, CursorType, CursorSize ohne GUI setzen, aber sind erst nach dem nächsten Login aktiv. Das wiederum wäre langwieriger als das setzen im GUI.
setEaseMousePointers.ps1
$EaseAccessPath = 'HKCU:\SOFTWARE\Microsoft\Accessibility'
#Parts of Color
$Color_Red = 255
$Color_Green = 127
$Color_Blue = 77
$Color_Alpha = 0
#convert to Interger-ColorNumber
$CursorColor = [BitConverter]::toInt32([byte[]]@($Color_Red,$Color_Green,$Color_Blue,$Color_Alpha ),0)
#Defined CursorColorTypes
$Cursor_Default = 0
$Cursor_Black = 1
$Cusor_Inverted = 2
$Cursor_UserColor = 6
$CursorType = $Cursor_UserColor
#set the Registryvalues at HKCU\SOFTWARE\Microsoft\Accessibility
$MouseCursorPath = 'HKCU:\SOFTWARE\Microsoft\Accessibility'
Set-ItemProperty -Path $EaseAccessPath -Name CursorColor -Value $CursorColor
Set-ItemProperty -Path $EaseAccessPath -Name CursorType -Value $CursorType
$CursorSize = 12 # 1 to 15 default 1
Set-ItemProperty -Path $EaseAccessPath -Name CursorSize -Value $CursorSize
gp $MouseCursorPath #show it
'Plaese Logoff and ReLogin'
pause
Die Cursorfarbe ist keine Option, welche direkt zu den Mousecursor-Funktionen gehört, sondern ist ein Filter für die erleichterte Bedienung. (Dafür wurde leider noch nirgends eine API-funktion erwähnt , Microsoft hat viele Geheimnisse , aber für eine Funktion, welche eigentlich keiner braucht, lohnt es nicht sich durch zig Programme zu "hacken")
um schnellen Zugriff zu haben erstelle eine Verknüpfung für :
ms-settings:easeofaccess-mousepointer
oder eine Batch/Powershellscript mit dem inhalt:
start ms-settings:easeofaccess-mousepointer
vielen vielen Dank für die schnelle Antwort und die bereitgestellten Skripte und Infos :)
anstelle von pause wurde ich quit verwenden, damit das fenster automatisch geschlossen wird.
anstelle von pause wurde ich quit verwenden...ähm...?🤔... Nein.
Keine Ahnung ob Du Sachen, welche Du von Dir gibst auch selber testest? Im Falle von "Quit" , wäre Dir mit Sicherheit aufgefallen, dass weder Batch noch Powershell dieses Wort im Befehlssatz haben.
Die meisten heute gängigen Sprachen verwenden "Exit" . (oder lassen den Compiler/Interpreter entscheiden wie das Programm terminiert wird).
Ich weiß was ich weshalb tue/schreibe....
Im Falle meiner (hier an Anfänger/Laien gerichteten) Scripte/Programmcodes verhindere ich bewusst das Schließen der Console durch eine geeignete Eingabeaufforderung. (damit eventuelle Ausgaben/Fehlermeldungen etc sichtbar bleiben)
Ich gehe in der Regel davon aus, das dies den meisten Nutzern auch ohne weitere Erklärungen klar ist (und wenn schließen sie eben das Fenster von Hand).
Hi, ich weiß, der Thread ist übel alt, aber hast du noch was, um die Farbe, die Scrollgeschwindigkeit und die Größe des Mauszeigers und der Maus zu verändern per Skript?
Danke schonmal