如何永久禁用鼠标滚轮按钮
How to disable mouse scroll wheel button permanently
我有一个问题困扰着我。所以我有一个朋友,他的鼠标滚轮刚刚坏了,但不是机械的,它只是发疯了——在没有任何输入的情况下自行滚动。我写了一个简单的 c++/批处理程序,它会询问您是否要通过修改注册表中的值来禁用滚动按钮:
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 做到了,这可能是可能的,但我还没有找到任何东西。无论如何,非常感谢您的帮助,我期待您的回复,谢谢!
The method has been given in the comments. All I have done is to
familiarize you with the use of hook.
以下是最简洁的实现代码,供大家参考:
#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;
}
鼠标滚轮被鼠标钩子拦截,导致鼠标滚轮被禁用
我有一个问题困扰着我。所以我有一个朋友,他的鼠标滚轮刚刚坏了,但不是机械的,它只是发疯了——在没有任何输入的情况下自行滚动。我写了一个简单的 c++/批处理程序,它会询问您是否要通过修改注册表中的值来禁用滚动按钮:
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 做到了,这可能是可能的,但我还没有找到任何东西。无论如何,非常感谢您的帮助,我期待您的回复,谢谢!
The method has been given in the comments. All I have done is to familiarize you with the use of hook.
以下是最简洁的实现代码,供大家参考:
#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;
}
鼠标滚轮被鼠标钩子拦截,导致鼠标滚轮被禁用