Winapi 如何永久禁用鼠标滚轮按钮
我有个问题困扰着我。所以我有一个朋友的鼠标滚轮坏了,但不是机械的,它只是疯了——没有任何输入就自动滚动。我编写了一个简单的c++/批处理程序,它询问您是否要通过修改注册表中的值来禁用滚动按钮:Winapi 如何永久禁用鼠标滚轮按钮,winapi,win32gui,Winapi,Win32gui,我有个问题困扰着我。所以我有一个朋友的鼠标滚轮坏了,但不是机械的,它只是疯了——没有任何输入就自动滚动。我编写了一个简单的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 "WheelScro
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。就像他打开AdobePremiere或任何其他软件时一样,滚动实际上并没有被禁用——它会自动上下随机滚动。是的,我知道买一只新老鼠不成问题,但我只是好奇有没有别的办法。我发现了一个叫做X-Mouse Button Control(我想是用C/C++编写的)的软件,它实际上有一个永久禁用滚动的选项,但它只能在程序运行时工作。我试图在IDA中反转它的二进制文件,尽管在整个系统中找不到用于禁用滚动的实际函数,而不仅仅是几个Windows应用程序
所以我想问一下,如果C++中有可能使它在整个Windows(在运行的任何应用程序中)禁用,那么你有什么想法?我想如果有人通过这个软件,X-鼠标按钮控制,这是可能的,但我还没有找到任何东西。无论如何,非常感谢您的帮助,我期待着您的回复,谢谢
该方法已在评论中给出。我所做的就是
让你熟悉钩子的用法
以下是最简洁的实现代码供您参考:
#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;
}
#包括
#包括
使用名称空间std;
HHOOK鼠标套;
LRESULT uu stdcall MouseHookCallback(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM)
{
如果(nCode>=0)
{
交换机(wParam)
{
案例WM_鼠标滚轮:
返回1;
}
}
返回CallNextHookEx(鼠标指针、nCode、wParam、lParam);
}
void SetHook()
{
if(!(mouseHook=SetWindowsHookEx(WH\u MOUSE\u LL,MouseHookCallback,NULL,0)))
{
或者你可以花10美元买一个新的鼠标…很可能你提到的程序是通过将其插入系统输入队列来工作的。你可以用WH_mouse_LL钩子禁用鼠标滚轮(当wParam==WM_mouseweel时只需返回1)…但程序当然必须运行。注册表值仅控制首选滚动距离,应用程序可以根据需要进行自定义处理。低级挂钩是AFAIK的唯一软件选项。低级挂钩不需要任何DLL。它只是几行代码(在LowLevel MouseProc中)非常感谢!这正是我想要实现的,它工作得非常完美!