鼠标单击变双击了怎么办?难道只能换鼠标吗?下面这个程序可以在一定程度上解决这个问题。程序和代码可以在这里下载。
原理一看便知,代码如下:
/* * @file : MouseClickHotfix.cpp * @author: shilyx * @date : 2014-04-13 19:33:42.540 * @note : Generated by SlxTemplates */ #include <Windows.h> #pragma warning(disable: 4786) #include <tchar.h> #include "resource.h" #define CLASS_NAME TEXT("__MouseClickHotfix") LRESULT CALLBACK LowLevelMouseProc( int nCode, WPARAM wParam, LPARAM lParam ) { if (nCode == HC_ACTION) { if (WM_LBUTTONDOWN == wParam && 0 != lParam) { static POINT s_lastPt = {-1, -1}; static DWORD s_lastTickCount = 0; LPMSLLHOOKSTRUCT lpHookStruct = (LPMSLLHOOKSTRUCT)lParam; if (lpHookStruct->pt.x == s_lastPt.x && lpHookStruct->pt.y == s_lastPt.y ) { if (GetTickCount() - s_lastTickCount < 155) { return 1; } } s_lastPt = lpHookStruct->pt; s_lastTickCount = GetTickCount(); } } return CallNextHookEx(NULL, nCode, wParam, lParam); } LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: return 0; case WM_CLOSE: DestroyWindow(hWnd); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: break; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } void Run(HINSTANCE hInstance) { WNDCLASSEX wcex = {sizeof(wcex)}; wcex.lpszClassName = CLASS_NAME; wcex.hInstance = hInstance; wcex.lpfnWndProc = WndProc; wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAINFRAME)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); if (RegisterClassEx(&wcex)) { HWND hWindow = CreateWindowEx( 0, CLASS_NAME, CLASS_NAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); if (IsWindow(hWindow)) { // ShowWindow(hWindow, SW_SHOW); // UpdateWindow(hWindow); HHOOK hHook = SetWindowsHookEx(WH_MOUSE_LL, LowLevelMouseProc, hInstance, 0); MSG msg; while (TRUE) { int nRet = GetMessage(&msg, NULL, 0, 0); if (nRet <= 0) { break; } TranslateMessage(&msg); DispatchMessage(&msg); } UnhookWindowsHookEx(hHook); } } } int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd) { if (IsWindow(FindWindow(CLASS_NAME, CLASS_NAME))) { MessageBox(NULL, TEXT("已经在运行!"), NULL, MB_SYSTEMMODAL | MB_ICONEXCLAMATION); return 0; } Run(hInstance); return 0; } #if !defined(_DEBUG) && _MSC_VER < 1300 #pragma comment(linker, "/Entry:s") #pragma comment(linker, "/Opt:NoWin98") void s() { ExitProcess(_tWinMain(GetModuleHandle(NULL), NULL, NULL, 0)); } #endif