自动禁用鼠标加速 - Windows

时间:2015-06-14 02:55:08

标签: windows batch-file mouse acceleration

我有一台笔记本电脑,我经常使用鼠标。使用鼠标时我不喜欢加速。因此,每次插入鼠标时都必须禁用加速。每当我插上鼠标时,有没有办法自动禁用鼠标加速? 我知道你可以用udev做一个脚本,所以它可以识别鼠标插入并自动禁用鼠标加速......但我怎么在Windows上做呢?

1 个答案:

答案 0 :(得分:1)

我相信使用简单的批处理文件是不可能的。但是,您可以在c ++中使用Windows API:

您可以使用RegisterDeviceNotification

注册设备通知(例如插入USB鼠标)
HANDLE hRecipient = hWnd; // your window handle as returned by CreateWindow

GUID InterfaceClassGuid = { 0x378de44c, 0x56ef, 0x11d1, 0xbc, 0x8c, 0x00, 0xa0, 0xc9, 
                            0x14, 0x05, 0xdd }; // GUID_DEVINTERFACE_MOUSE
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;

ZeroMemory(&NotificationFilter, sizeof(NotificationFilter));
NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
NotificationFilter.dbcc_classguid = InterfaceClassGuid;

HDEVNOTIFY hDeviceNotify = RegisterDeviceNotification(hRecipient, &NotificationFilter, 
                                                      DEVICE_NOTIFY_WINDOW_HANDLE);
if (hDeviceNotify == NULL) {
    GetLastError(); // do error handling here
}

并在您窗口的留言处理程序(LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam))中收听它们。

switch (message)
{
case WM_DEVICECHANGE:
    switch (wParam)
    {
    case DBT_DEVICEARRIVAL:
        // Mouse plugged in - turn mouse acceleration off here
        break;
    case DBT_DEVICEREMOVECOMPLETE:
        // Mouse removed - turn mouse acceleration on here
        break;
    default:
        break;
    }
    break;
case // ... your usual window message handling

实际更改设置可以使用SystemParametersInfo中描述的this excellent answer来实现。

我实现了一个名为accelSwitcher的小工具。它可以在github上找到。