关于c ++:计算鼠标点击次数C.

Count number of mouse clicks C

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

这是代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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("
done!
"
);
                final();

            }
            printf("clicked");
        }
        printf("Mouse position X = %d  Mouse Position Y = %d
"
, 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;
    }
}

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

另一个问题是,我想生成一个介于50到150之间的随机次数来调用final()函数。我怎样才能把那个随机数作为参数发送呢?

谢谢你的帮助!


因为您在函数中声明count,所以在调用函数时会分配该函数,并在函数返回时自动取消分配,如果您希望计数持续更长时间,则可以将其设置为全局(在函数外部声明它)。

或者在count的代词中使用static关键字,即static int count = 0。当一个变量用static声明时,它被分配给整个程序的长度。这样,当函数返回count时,就不会未分配。以下是有关静态的更多信息-静态在ansi-c中是什么意思?http://en.wikipedia.org/wiki/static_变量

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

另外,如果你想存储一些随机数并能从mouseProc访问它,你可以给它一个全局范围,但是要注意,使所有变量都是全局的并不总是一个好的实践。http://en.wikipedia.org/wiki/scope(计算机科学)