Zeigerbeschleunigung verbessern

  • Hallo Zusammen,

    ich möchte gerne per AutoIT die "Zeigerbeschleunigung verbessern"-Funktion an-/ und ausschalten. (Systemsteuerung --> Maus)
    Ich könnte ja nun die einzelnen Fenster und deren Controls abklappen und jeweils einen aufruf machen, aber ich dachte mir, vielleicht kennt hier jemand eine elegantere Lösung per DLL oder CMD-Aufruf. Ich habe schon viel Gegooglet und nichts passendes gefunden. Anscheinend war dieses noch nie ein Thema.

    Ich hoffe, ihr könnt mir helfen,
    Anna :love:

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Hi BugFix,

    aber SPI_SETMOUSESPEED wird doch nur die Geschwindigkeit der Maus anpassen. Nicht die eine boolische Einstellung ändern, oder?

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • Hallo? :)

    Ich will ja keine Mausgeschwindigkeit verändern, sondern die Einstellung "Zeigerbeschleunigung verbessern"...
    Wenn es mit deiner Funktion auch geht, musst du mich aufklären :huh:

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

  • [autoit]

    #include <WinAPI.au3>

    [/autoit][autoit][/autoit][autoit]

    Global Const $SPI_GETMOUSE = 0x0003
    Global Const $SPI_SETMOUSE = 0x0004

    [/autoit][autoit][/autoit][autoit]

    Global $tVal = DllStructCreate("int[3];")

    [/autoit][autoit][/autoit][autoit]

    _WinAPI_SystemParametersInfo($SPI_GETMOUSE, 0, DllStructGetPtr($tVal))

    [/autoit][autoit][/autoit][autoit]

    DllStructSetData($tVal, 1, Not DllStructGetData($tVal, 1, 3), 3)
    _WinAPI_SystemParametersInfo($SPI_SETMOUSE, 0, DllStructGetPtr($tVal))

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Switch DllStructGetData($tVal, 1, 3)
    Case 1
    MsgBox(0, "", "Zeigerbeschleunigung Ein")
    Case Else
    MsgBox(0, "", "Zeigerbeschleunigung Aus")
    EndSwitch

    [/autoit]

    lgE

  • Danke dir.. echt kasse :)

    Aber ich versteh den Aufruf gar nicht. Kannst du es mir erklären?


    Global $tVal = DllStructCreate("int[3];")
    Also dieses baut ein DLL-Konstrukt auf, damit ich ein DLL-Aufruf machen kann

    _WinAPI_SystemParametersInfo($SPI_GETMOUSE, 0, DllStructGetPtr($tVal))

    Hier mache ich doch eigentlich einen System-API-Aufruf, oder? Wieso funktioniert der Code nicht mehr, wenn ich diesen Teil auskommentiere? Holt dieser Teil nicht die Maus-Werte? Wo wird diese Information gespeichert?

    DllStructSetData($tVal, 1, Not DllStructGetData($tVal, 1, 3), 3)
    oko, hier steige ich aus

    _WinAPI_SystemParametersInfo($SPI_SETMOUSE, 0, DllStructGetPtr($tVal))
    Und Hier? Ich dachte hier wird der eigentliche Parameter gesetzt. Aber irgendwie täusche ich mich da...


    Hilfe ?(:)

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko:

    Einmal editiert, zuletzt von AnnaM (1. Dezember 2013 um 13:27)

  • Auf msdn.com steht bei SPI_SETMOUSE folgende Beschreibung:
    Sets the two mouse threshold values and the mouse acceleration. The pvParam parameter must point to an array of three integers that specifies these values

    Mit SPI_SETMOUSE setzt man also gleichzeitig 3 Parameter.

    Zunächst reservieren wir den Speicherplatz für diese 3 Parameter vom Typ Integer:

    [autoit]

    Global $tVal = DllStructCreate("int[3];")

    [/autoit]


    Mit folgender Funktion erhalten wir die Position im Speicher. (die wir nacher an _WinAPI_SystemParametersInfo übergeben müssen):

    [autoit]

    DllStructGetPtr($tVal)

    [/autoit]


    Wir haben keine Ahnung, was die ersten 2 Parameter (two mouse threshold values) genau machen, geschweigen denn welchen Wert wir diesen zuweisen sollen.
    Darum lesen wir zuerst die aktuellen Werte aus:

    [autoit]

    _WinAPI_SystemParametersInfo($SPI_GETMOUSE, 0, DllStructGetPtr($tVal))

    [/autoit]

    Die aktuellen Werte wurden nun in den Speicher geschrieben.


    Der Wert für die Zeigerbeschleunigung liegt an dritter Position im Speicher und kann die Werte 0 oder 1 annehmen.

    Wir lesen den Wert nun aus und schreiben den gegenteiliegen Wert wieder zurück:

    [autoit]

    DllStructSetData($tVal, 1, Not DllStructGetData($tVal, 1, 3), 3)

    [/autoit]

    Mit Not wird in diesem Fall aus 0=1 bzw. 1=0


    Nun setzen wir die veränderten Parameter:

    [autoit]

    _WinAPI_SystemParametersInfo($SPI_SETMOUSE, 0, DllStructGetPtr($tVal))

    [/autoit]

    Alles klar? ^^

  • Ahhhhhh, super... nun habe ich es verstanden. Danke für deine Mühe :)

    Also Speicher reservieren, Position im Speicher holen, Werte auslesen, Werte in den Speicher schreiben, vom Speicher wieder in die API.

    Danke, nun kann ich es verwenden ;)

    Die Anna :*

    "Wo kämen wir hin, wenn jeder sagte wo kämen wir hin, und niemand ginge, um zu sehen, wohin wir kämen, wenn wir gingen..." :wacko: