admin管理员组

文章数量:1516870

鼠标单击变双击了怎么办?难道只能换鼠标吗?下面这个程序可以在一定程度上解决这个问题。程序和代码可以在 下载。


原理一看便知,代码如下:

/*
 *  @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


本文标签: 深入解析到双击从一点击