Página 1 de 1

Sensibilidad del mouse y registro

Publicado: 04 Dic 2009, 22:15
por Pablo2m
Hola, hoy en dia tengo conectado simultaneamente a la pc un trackball optomecanino y un mouse optico, el problema es que uno es mucho mas sensible que el otro por eso quise hacer un script para poder cambiar la sensibilidad con la que el windows capta los movimientos y asi pasar de uno a otro con comodidad y facilidad.
Para eso corri uno de esos programas que comprara el registro y entre una toma y otra cambie la sensibilidad. El resultado fue este

Código: Seleccionar todo

Regshot 1.8.2

----------------------------------
Values modified:10
----------------------------------

HKLM\SYSTEM\ControlSet001\Control\Nsi\{eb004a03-9b1a-11d4-9123-0050047759bc}\24\ffffffffffffffffffffffffffffff01: 01 00 00 00 A5 03 00 00 36 A0 03 00 FF FF FF FF FF FF FF FF FF FF FF FF
HKLM\SYSTEM\ControlSet001\Control\Nsi\{eb004a03-9b1a-11d4-9123-0050047759bc}\24\ffffffffffffffffffffffffffffff01: 01 00 00 00 A5 03 00 00 39 A0 03 00 FF FF FF FF FF FF FF FF FF FF FF FF
HKLM\SYSTEM\CurrentControlSet\Control\Nsi\{eb004a03-9b1a-11d4-9123-0050047759bc}\24\ffffffffffffffffffffffffffffff01: 01 00 00 00 A5 03 00 00 36 A0 03 00 FF FF FF FF FF FF FF FF FF FF FF FF
HKLM\SYSTEM\CurrentControlSet\Control\Nsi\{eb004a03-9b1a-11d4-9123-0050047759bc}\24\ffffffffffffffffffffffffffffff01: 01 00 00 00 A5 03 00 00 39 A0 03 00 FF FF FF FF FF FF FF FF FF FF FF FF
HKU\S-1-5-21-253273470-2590505109-4206340648-1001\Control Panel\Mouse\MouseSensitivity: "4"
HKU\S-1-5-21-253273470-2590505109-4206340648-1001\Control Panel\Mouse\MouseSensitivity: "20"
HKU\S-1-5-21-253273470-2590505109-4206340648-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\CIDSizeMRU\MRUListEx: 01 00 00 00 09 00 00 00 02 00 00 00 04 00 00 00 05 00 00 00 08 00 00 00 07 00 00 00 06 00 00 00 00 00 00 00 03 00 00 00 FF FF FF FF
HKU\S-1-5-21-253273470-2590505109-4206340648-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\CIDSizeMRU\MRUListEx: 09 00 00 00 01 00 00 00 02 00 00 00 04 00 00 00 05 00 00 00 08 00 00 00 07 00 00 00 06 00 00 00 00 00 00 00 03 00 00 00 FF FF FF FF
HKU\S-1-5-21-253273470-2590505109-4206340648-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU\*\MRUListEx: 0C 00 00 00 0B 00 00 00 0A 00 00 00 09 00 00 00 08 00 00 00 07 00 00 00 06 00 00 00 05 00 00 00 04 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 13 00 00 00 03 00 00 00 12 00 00 00 11 00 00 00 10 00 00 00 0F 00 00 00 0E 00 00 00 0D 00 00 00 FF FF FF FF
HKU\S-1-5-21-253273470-2590505109-4206340648-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU\*\MRUListEx: 0A 00 00 00 0C 00 00 00 0B 00 00 00 09 00 00 00 08 00 00 00 07 00 00 00 06 00 00 00 05 00 00 00 04 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 13 00 00 00 03 00 00 00 12 00 00 00 11 00 00 00 10 00 00 00 0F 00 00 00 0E 00 00 00 0D 00 00 00 FF FF FF FF
HKU\S-1-5-21-253273470-2590505109-4206340648-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU\hiv\MRUListEx: 01 00 00 00 00 00 00 00 FF FF FF FF
HKU\S-1-5-21-253273470-2590505109-4206340648-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU\hiv\MRUListEx: 00 00 00 00 01 00 00 00 FF FF FF FF
HKU\S-1-5-21-253273470-2590505109-4206340648-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}\Count\{S38OS404-1Q43-42S2-9305-67QR0O28SP23}\rkcybere.rkr: 05 00 00 00 00 00 00 00 29 01 00 00 6F 73 37 00 9C CE 7D 3E 62 B5 E6 3D 27 76 37 3E 3F D4 AB 3E 4C 66 29 3E 00 00 80 BF 00 00 80 BF 00 00 80 BF 00 00 80 BF 00 00 80 BF 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
HKU\S-1-5-21-253273470-2590505109-4206340648-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}\Count\{S38OS404-1Q43-42S2-9305-67QR0O28SP23}\rkcybere.rkr: 05 00 00 00 00 00 00 00 2A 01 00 00 BD 73 37 00 9C CE 7D 3E 62 B5 E6 3D 27 76 37 3E 3F D4 AB 3E 4C 66 29 3E 00 00 80 BF 00 00 80 BF 00 00 80 BF 00 00 80 BF 00 00 80 BF 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
H
----------------------------------
Total changes:10
----------------------------------
Luego de un muy leve analisis dije cambiando este valor andara

HKU\S-1-5-21-253273470-2590505109-4206340648-1001\Control Panel\Mouse\MouseSensitivity: "4"
HKU\S-1-5-21-253273470-2590505109-4206340648-1001\Control Panel\Mouse\MouseSensitivity: "20"

Pero al hacer mi programa no pasa nada a pesar de que el valor cambia (lo verifique en el registro )
¿Alguna idea de que pasa?, les dejo el codigo

Código: Seleccionar todo

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.0.0
 Author: Pablo2m

#ce ----------------------------------------------------------------------------

HotKeySet("{F10}", "Cambiazo")

$S1= 1
$S2= 20

while 0 = 0
	Sleep (100)
WEnd

Func Cambiazo ()

$s= RegRead ("HKEY_USERS\S-1-5-21-253273470-2590505109-4206340648-1001\Control Panel\Mouse\", "MouseSensitivity")
;MsgBox(4096, "Sensibilidad del mouse en ", $S)

If $S <> $S1 Then
    $S = $S1
Else
	$S= $S2
EndIf

RegWrite("HKEY_USERS\S-1-5-21-253273470-2590505109-4206340648-1001\Control Panel\Mouse\", "MouseSensitivity", "REG_SZ", $S)

;MsgBox(4096, "Sensibilidad del mouse en ", $S)

EndFunc
EDITADO: Al reiniciar si se da cuenta del cambio en la sensibilidad

Por cierto si alguien tiene un trackball para vender en Argentina yo estoy interesado

Saludos

Re: Sensibilidad del mouse y registro

Publicado: 05 Dic 2009, 04:30
por Chefito
Sí, por desgracia para que muchos valores de los que se cambian en el registro surjan efecto, éste tiene que ser recargado. Creo recordar que puede ser recargado el registro sin reiniciar matando el proceso del archivo explorer.exe y volviendo a cargar éste. Pero este método hace desaparecer por un momento el escritorio y esto no me gusta nada.

Hay otra forma mucho más correcta....utilizando la api SystemParametersInfo. Por fortuna en AutoIt está implementada como _WinAPI_SystemParametersInfo.
Te dejo un ejemplo:

Código: Seleccionar todo

#include <winapi.au3>
;los valores de velocidad del cursor del ratón están comprendidos entre 1 y 20.
Global Const $SPI_SETMOUSESPEED=113
Global Const $SPIF_UPDATEINIFILE=1
Global Const $SPIF_SENDCHANGE=2
Dim Const $velocidadLenta=4
Dim Const $velocidadRapida=20
HotKeySet("{f5}","ratonRapido")   ;si pulsas f5 el cursor ira más rapido
HotKeySet("{f4}","ratonLento")   ;si pulsas f4 el cursor ira más lento
HotKeySet("{esc}","salir")
While 1
   Sleep(10)
WEnd

Func ratonRapido()
   _WinAPI_SystemParametersInfo($SPI_SETMOUSESPEED,0,$velocidadRapida,BitOR($SPIF_SENDCHANGE,$SPIF_UPDATEINIFILE))
EndFunc

Func ratonLento()
   _WinAPI_SystemParametersInfo($SPI_SETMOUSESPEED,0,$velocidadLenta,BitOR($SPIF_SENDCHANGE,$SPIF_UPDATEINIFILE))
EndFunc

Func Salir()
   Exit
EndFunc
Si pulsas f4 el cursor va lento (valor 4), y si pulsas f5 el cursor va rápido (valor 20).

Saludos.

Re: Sensibilidad del mouse y registro

Publicado: 05 Dic 2009, 14:02
por Pablo2m
Sí, por desgracia para que muchos valores de los que se cambian en el registro surjan efecto, éste tiene que ser recargado. Creo recordar que puede ser recargado el registro sin reiniciar matando el proceso del archivo explorer.exe y volviendo a cargar éste. Pero este método hace desaparecer por un momento el escritorio y esto no me gusta nada.
A mi tampoco me parece una buena solucion
Hay otra forma mucho más correcta....utilizando la api SystemParametersInfo. Por fortuna en AutoIt está implementada como _WinAPI_SystemParametersInfo.
Muy claro tu ejemplo, muchas gracias. No se me ocurrio buscar en la ayuda algo asi, ni siquiera que podia existir

Saludos

Re: Sensibilidad del mouse y registro

Publicado: 07 Dic 2009, 00:06
por Pablo2m
Mientras usaba el ejemplo de Chefito para refinar mi codigo me puese a buscar sobre _WinAPI_SystemParametersInfo y encontre este codigo para autohotkey, tiene un enfoque interesante

Código: Seleccionar todo

#cs
AutoHotkey Version: 1.x
Language:   English
Platform:   WinXP

Title:      Laptop Mouse Monitor
Author:      Wesley Treat, www.wesleytreat.com
Date:      May 2006

Script Function:
If a USB mouse is plugged into the laptop, optimize the pointer speed and
precision settings for the mouse. If it's not, optimize the settings
for the touch pad. Monitor for changes in mouse's presence.
#ce


; ============================================================
; CONFIGURATION
; ============================================================

; ------------------------------------------------------------
; USER POINTER SETTINGS

; Mouse ID
; Check HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mouclass\Enum
; to determine the ID of your mouse. This should be the value of the key that
; appears and disappears when you plug in and unplug your mouse. You can
; probably just use "HID."

MouseID = HID


; Pointer Speed (1-20)
PadSpeed = 10
MouseSpeed = 12

; Enhance Pointer Precision
PadEnhance = 1
MouseEnhance = 0

; Precision Thresholds
PadThreshold1 = 6
PadThreshold2 = 10
MouseThreshold1 = 0
MouseThreshold2 = 0

; For details on precision and threshold settings, see
; http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceui40/html/cerefSystemParametersInfo.asp
; under SPI_SETMOUSE. By default, thresholds 1 and 2 are "6" and "10" respectively.


; Use a tray icon?
TrayIcon = 1

; Tray Icons
; If you want the tray icon to reflect the current settings, enter a valid
; PadIcon and PadIconGroup. To use the only standard AutoHotkey icon, comment
; out all the icon locations.

MouseIcon = %A_WinDir%\system32\main.cpl
MouseIconGroup = 1

; The likely location of the Alps Touch Pad icon.
; PadIcon = %ProgramFiles%\Apoint\Apoint.exe
; PadIconGroup = 1

; The likely location of the Synaptics Touch Pad icon.
; PadIcon = %ProgramFiles%\Synaptics\SynTP\SynTPEnh.exe
; PadIconGroup = 1


; If you like, you can change the names for your devices. These names are
; reflected in the tooltips.
MouseName = Mouse
PadName = Touch Pad

; ------------------------------------------------------------
; SCRIPT SETTINGS - YOU SHOULDN'T NEED TO CHANGE ANYTHING BELOW THIS LINE.

If !TrayIcon
   Menu, Tray, NoIcon

; Constants
; Read more at the following:
; http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/systemparametersinfo.asp
; http://www.pinvoke.net/search.aspx?search=SPI&namespace=%5BAll%5D
SPI_GETMOUSE =      0x0003
SPI_SETMOUSE =      0x0004
SPI_GETMOUSESPEED =   0x0070
SPI_SETMOUSESPEED =   0x0071

; Watch for hardware changes
OnMessage(0x219, "HardwareUpdate")

; Check whether or not the mouse exists to begin with and make sure the pointer
; settings match.
   Gosub, MouseCheck
   Gosub, ChangeSettings
   If !MousePresent and !FileExist(PadIcon) and FileExist(MouseIcon)
      Menu, Tray, Icon, %MouseIcon%, %MouseIconGroup%
   MouseLast = %MousePresent%
   ToolTip, Pointer Settings Set To: %CurrentName%
   Sleep, 2000
   ToolTip
   Return


Exit ; Everything above this line is run when the script is loaded.


; ============================================================
; FUNCTIONS & SUBROUTINES
; ============================================================

HardwareUpdate()
{
   Global MouseLast
   Global MousePresent
   Global CurrentName
   Gosub, MouseCheck
   ; We might get phantom hardware-change messages, so make sure the status
   ; of the mouse has actually changed before changing any settings.
   If MousePresent = %MouseLast%
      Exit
   Else
   {
      Gosub, ChangeSettings
      MouseLast = %MousePresent%   ; Update mouse status.
      ToolTip, Pointer Settings Changed To: %CurrentName%
      Sleep, 2000
      ToolTip
   }
   Return
}

MouseCheck:
   MousePresent = 0
   Sleep, 1000   ; Give the registry a moment to update.
   Loop, HKEY_LOCAL_MACHINE, SYSTEM\CurrentControlSet\Services\Mouclass\Enum, 0, 0
   {
      RegRead, CurrentValue
      IfInString, CurrentValue, %MouseID%
      {
         MousePresent = 1
         Break   ; Don't check any more values.
      }
   }
   Return

ChangeSettings:
   If MousePresent
   {
      CurrentName = %MouseName%
      DeviceSpeed = %MouseSpeed%
      DeviceEnhance = %MouseEnhance%
      DeviceThreshold1 = %MouseThreshold1%
      DeviceThreshold2 = %MouseThreshold2%
      If TrayIcon and FileExist(MouseIcon)
         Menu, Tray, Icon, %MouseIcon%, %MouseIconGroup%
      Menu, Tray, Tip, Current Pointer Settings: %CurrentName%
   }
   Else
   {
      CurrentName = %PadName%
      DeviceSpeed = %PadSpeed%
      DeviceEnhance = %PadEnhance%
      DeviceThreshold1 = %PadThreshold1%
      DeviceThreshold2 = %PadThreshold2%
      If TrayIcon and FileExist(PadIcon)
         Menu, Tray, Icon, %PadIcon%, %PadIconGroup%
      Menu, Tray, Tip, Current Pointer Settings: %CurrentName%
   }

   VarSetCapacity(DeviceArray, 12, 0)
   InsertInteger(DeviceThreshold1, DeviceArray, 0)   ; Reg. Value MouseThreshold1
   InsertInteger(DeviceThreshold2, DeviceArray, 4)   ; Reg. Value MouseThreshold2
   InsertInteger(DeviceEnhance, DeviceArray, 8)      ; Reg. Value MouseSpeed

   InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4)
   ; The caller must ensure that pDest has sufficient capacity.  To preserve any existing contents in pDest,
   ; only pSize number of bytes starting at pOffset are altered in it.
   {
      Loop %pSize%  ; Copy each byte in the integer into the structure as raw binary data.
         DllCall("RtlFillMemory", "UInt", &pDest + pOffset + A_Index-1, "UInt", 1, "UChar", pInteger >> 8*(A_Index-1) & 0xFF)
   }

   ; Keep this here for future reference.
   ; DllCall("SystemParametersInfo", UInt, SPI_GETMOUSESPEED, UInt, 0, UIntP, SpeedCurrent, UInt, 0)

   ; Change the pointer speed.
   DllCall("SystemParametersInfo", UInt, SPI_SETMOUSESPEED, UInt, 0, UInt, DeviceSpeed, UInt, 1)
   ; Change the pointer precision settings.
   DllCall("SystemParametersInfo", UInt, SPI_SETMOUSE, UInt, 0, Str, DeviceArray, UInt, 1)
   Return
La verdad es que ando viendo como funciona para implementar (si es posible) alguna de las cosas que han hecho

Saludos

Re: Sensibilidad del mouse y registro

Publicado: 07 Dic 2009, 04:41
por Chefito
Pero que quieres de ese código? :smt017 .
Hace lo mismo que yo te dije (cambia la sensibilidad).
Es que también quieres cambiar la precisión del puntero?

De ese código creo que solamente veo algo que te puede interesar, y es intentar detectar cuando conectas un ratón u otro, y según el que esté conectado cambiar la sensibilidad automáticamente.
Esto lo hace mirando los valores de la clave del registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mouclass\Enum.
Según parece en el foro ingles dicen que cuando aparece un dato que empieza por HUD es un ratón usb, aunque también he visto que puede ser un ratón bluetooth (y sospecho que puede que también uno wifi :smt001 ).
Si vas a hacer un script específico para tus ratones, mira que valores y datos que contienen éstos te dejan en el registro cuando conectas uno u otro y comparalos para ponerles la sensibilidad. Para leer en el registro mira la función RegRead.

Por cierto, parece que se me olvidó poner unos valores al final para que se guardase bien los valores de sensibilidad en el registro. He editado el código para que haga esto sin problemas.

Saludos.

Re: Sensibilidad del mouse y registro

Publicado: 08 Dic 2009, 15:04
por Pablo2m
Pero que quieres de ese código? .
Hace lo mismo que yo te dije (cambia la sensibilidad).
Quiero ver si es posible realizar el cambio detectando que uno de los mouses esta en movimiento, si fuera posible detectar que esta conectado seria un primer paso

Saludos

Re: Sensibilidad del mouse y registro

Publicado: 10 Dic 2009, 16:58
por Chefito
A esta cuestión ya te contesté en el post anterior:
Chefito escribió:De ese código creo que solamente veo algo que te puede interesar, y es intentar detectar cuando conectas un ratón u otro, y según el que esté conectado cambiar la sensibilidad automáticamente.
Esto lo hace mirando los valores de la clave del registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mouclass\Enum.
Según parece en el foro ingles dicen que cuando aparece un dato que empieza por HUD es un ratón usb, aunque también he visto que puede ser un ratón bluetooth (y sospecho que puede que también uno wifi ).
Si vas a hacer un script específico para tus ratones, mira que valores y datos que contienen éstos te dejan en el registro cuando conectas uno u otro y comparalos para ponerles la sensibilidad. Para leer en el registro mira la función RegRead.
Sería ir revisando esta clave para ver que ratones están conectados.
Pablo2m escribió:Quiero ver si es posible realizar el cambio detectando que uno de los mouses esta en movimiento
Pufffffff.........si los dos ratones están conectados, detectar cual estás utilizando ni idea. Como no mires de que puertos le llega la información...... :smt017 ...otra cosa no se me ocurre.

Saludos.

Re: Sensibilidad del mouse y registro

Publicado: 16 Dic 2009, 20:04
por Pablo2m
Bueno, resulta que hace un tiempo repare un mouse microsoft 1.1a que habia venido en un lote de mouses y resulta que posee una sensibilidad similar al trackball asi que por ahora no habra novedades
Saludos