Как отключить кнопку колеса прокрутки мыши навсегда - PullRequest
0 голосов
/ 02 июля 2019

У меня есть вопрос, который беспокоит меня.Итак, у меня есть друг, чье колесо прокрутки мыши просто сломалось, но не механически, оно просто сошло с ума - прокрутка сама по себе без какого-либо ввода.Я написал простую программу на c ++ / batch, которая спрашивает вас, хотите ли вы отключить кнопку прокрутки, изменив значения в реестре:

reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v "WheelScrollChars" /t REG_SZ /d 0 /f
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v "WheelScrollLines" /t REG_SZ /d 0 /f

К сожалению, она работает только в некоторых приложениях, например, в Chrome.Как и при открытии Adobe Premiere или любого дополнительного программного обеспечения, прокрутка на самом деле не отключена - она ​​продолжает прокручивать себя случайным образом вверх и вниз.Да, я знаю, что это не проблема купить новую мышь, но мне просто интересно, есть ли другой способ обойти это.И я нашел часть программного обеспечения под названием X-Mouse Button Control (написана на C / C ++, я полагаю), которая на самом деле имеет возможность отключить прокрутку навсегда, но она работает только во время работы программы.Я попытался изменить его двоичный код в IDA, хотя не смог найти фактическую функцию, используемую для отключения прокрутки во всей системе, а не только в нескольких приложениях Windows.

Поэтому я подумал, что могу спросить, может быть, у вас есть идеи, есть ли возможности в C ++ отключить его во всей Windows (в любом запущенном приложении)?Я думаю, если кто-то сделал это с помощью этой программы, X-Mouse Button Control, это возможно, но я еще ничего не нашел.В любом случае, любая помощь очень ценится, и я с нетерпением жду ваших ответов, спасибо!

1 Ответ

0 голосов
/ 03 июля 2019

Метод приведен в комментариях. Все, что я сделал, это ознакомить вас с использованием крючка.

Ниже приведен наиболее краткий код реализации для вашей справки:

#include <Windows.h>
#include <iostream>

using namespace std;

HHOOK mouseHook;

LRESULT __stdcall MouseHookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode >= 0)
    {
        switch (wParam)
        {       
        case WM_MOUSEWHEEL:
            return 1;
        }
    }
    return CallNextHookEx(mouseHook, nCode, wParam, lParam);
}

void SetHook()
{
    if (!(mouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookCallback, NULL, 0)))
    {
        cout << "Failed to install mouse hook!" << endl;
    }
}

void ReleaseHook()
{
    UnhookWindowsHookEx(mouseHook);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    SetHook();
    MSG msg;

    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

Колесо мыши перехвачено крюком мыши, поэтому колесо мыши отключено.

...