【问题标题】:Count number of mouse clicks C计算鼠标点击次数 C
【发布时间】:2014-09-26 13:46:08
【问题描述】:

我有一个 C 代码来检查鼠标左键是否被按下。它工作正常,但我想用它来计算按钮被点击的次数,并在按钮被随机点击次数时调用函数。

这是代码:

LRESULT CALLBACK mouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    int count = 0;
    MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lParam;
    if (pMouseStruct != NULL){
        if (wParam == WM_LBUTTONDOWN)
        {
            count++;
            printf("%d",count);
            if (count==finalNum){ // user clicked random times the mouse so we launch the final function
                printf("\ndone!\n");
                final();

            }
            printf("clicked");
        }
        printf("Mouse position X = %d  Mouse Position Y = %d\n", pMouseStruct->pt.x, pMouseStruct->pt.y);
    }
    return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
}

DWORD WINAPI MyMouseLogger(LPVOID lpParm)
{
    HINSTANCE hInstance = GetModuleHandle(NULL);
    // here I put WH_MOUSE instead of WH_MOUSE_LL
    hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, mouseProc, hInstance, NULL);
    MSG message;

    while (GetMessage(&message, NULL, 0, 0)) {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }

    UnhookWindowsHookEx(hMouseHook);
    return 0;
}

void custom_delay(){

}

int main(int argc, char *argv[])
{
    int count = 0;
    HANDLE hThread;
    DWORD dwThread;
    //////Generate random number to call a function after rand() number of clicks
    srand(time(NULL)); // Seed the time
    int finalNum = rand() % (150 - 50) + 50; // Generate the number, assign to variable.
    ////////////////////////////////////////////////////////////////////////////

    printf("%d", finalNum);
    hThread = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)MyMouseLogger, (LPVOID)argv[0], NULL, &dwThread);
    if (hThread)
        return WaitForSingleObject(hThread, INFINITE);
    else
        return 1;
    }
}

问题是每次发生鼠标事件时计数变量都会重置为 0,因此我无法跟踪用户用鼠标单击的次数。

另一个问题是我想生成 50 到 150 之间的随机次数来调用 final() 函数。如何发送该随机数作为参数?

感谢您的帮助!

【问题讨论】:

    标签: c++ c winapi mouseevent hook


    【解决方案1】:

    由于您在函数中声明count,它在函数被调用时分配,并在函数返回时自动释放,如果您希望计数持续更长时间,您可以将其设为全局(在函数外部声明)。

    或者你在count的声明中使用static关键字,即static int count = 0。当一个变量用静态声明时,它被分配给整个程序的长度。这样,当函数返回 count 时,将不会被取消分配。 以下是有关静态的更多信息 -
    What does static mean in ANSI-C
    http://en.wikipedia.org/wiki/Static_variable

    现在对于问题的下一部分,您可以使用 rand 函数在 C 中生成一个伪随机数。函数rand 返回一个从0RAND_MAX 的整数,这是标准库定义的常量。你可以在这里阅读更多关于rand的信息—— http://www.cplusplus.com/reference/cstdlib/rand/

    此外,如果您想存储一些随机数并能够从mouseProc 访问它,您可以将其赋予全局范围,但请注意,将所有变量设为全局并不总是一个好习惯。 http://en.wikipedia.org/wiki/Scope_(computer_science)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多