Maus Beschleunigung per Batch beim Starten deaktivieren?

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.

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

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.

Woher ich das weiß:Studium / Ausbildung – Ausgebildeter Fachinformatiker
Einblock26 
Fragesteller
 05.09.2021, 14:18

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.

0

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.

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
xHazeBaze  01.02.2024, 22:59

anstelle von pause wurde ich quit verwenden, damit das fenster automatisch geschlossen wird.

0
Erzesel  02.02.2024, 06:29
@xHazeBaze
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).

0