5

我是 C++ 新手,我试图仅在按住鼠标左键时才激活一行代码。在此示例中,我的代码有效,但似乎只是切换它。当我单击时,它会向密钥发送垃圾邮件,H然后当我再次单击时,它会停止。

目前我有这个代码:

if ((GetKeyState(VK_LBUTTON)))
{
    keybd_event(VkKeyScan('H'),0,0,0);
    Sleep ( 30 );
}

编辑:

我有里面的功能:

int WINAPI WinMain ( HINSTANCE hInst, HINSTANCE P, LPSTR CMD, int nShowCmd );
4

4 回答 4

15

使用它来确定按钮是否被按下。

if((GetKeyState(VK_LBUTTON) & 0x8000) != 0)

http://vcpptips.wordpress.com/tag/vk_lbutton/

于 2013-08-19T16:47:40.677 回答
4

该应用程序可以捕获发送到您的窗口的消息和进程,指示任何鼠标按钮的状态变化。

当按下左键时

WM_LBUTTONDOWN

已发送。

发布时

WM_LBUTTONUP

已发送。

在此处阅读用于指示鼠标事件的各种消息

于 2013-08-19T16:56:42.060 回答
2

使用以下检测鼠标左键按下

if(GetAsyncKeyState(VK_LBUTTON)){
   //your code controls here
 }

您可以在此处找到更多控件:https ://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getasynckeystate

此外,如果GetAsyncKeyState(VK_LBUTTON)显示语法错误,请尝试通过添加代码的包含来包含 winuser.h #include <winuser.h>

这是一个例子

if(GetKeyState(VK_LBUTTON))
    {   //finding clicked position
        HWND hWnd = FindWindowA(0,("Motion Paths"));
        ::GetWindowThreadProcessId(hWnd,&pid);
        if (hWnd) { cout << "Found" << endl;}

            POINT p;
            GetCursorPos(&p);
            if (ScreenToClient(hWnd, &p))
            {
                int mouseX = p.x;
                int mouseY = p.y;
                cout<< p.x << " "<< p.y <<endl;
            }
    }
于 2020-06-01T14:50:41.063 回答
-3

首先 - 在开始代码中需要定义按钮 ID(或另一个对象 ID):

#define ID_BUTTON1      105

然后在创建 hWnd 之后 - 我们制作按钮:

   HWND HwndButton1 = CreateWindow( 
    L"BUTTON",  // Predefined class; Unicode assumed 
    L"OK",      // Button text 
    WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,  // Styles 
    10,         // x position 
    10,         // y position 
    100,        // Button width
    100,        // Button height
    hWnd,     // Parent window
   (HMENU) ID_BUTTON1, // ID кнопки в меню
    NULL,            // Сущность мне неведомая 8-)
    NULL);         // Pointer not needed.

然后在函数中添加触发器:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId=0, wmEvent;  //wmId NEED DEFINE null - if he is not available in event, else be ашипка
    PAINTSTRUCT ps;
    HDC hdc;

    switch (message)
    {
    case WM_COMMAND:
        wmEvent = HIWORD(wParam);  //  Name of EVENT - имя события
        wmId    = LOWORD(wParam);  // ID element for event - элемент с которым оно случилось

        case WM_LBUTTONDOWN: MessageBox(NULL, L"MouseL_Click", L"WndHeader", MB_OK | MB_ICONEXCLAMATION);  // Left Mouse Button pressed

        if( LOWORD(wParam) == 105 && WM_COMMAND == WM_LBUTTONDOWN){ // Клик по ID_BUTTON1 левым мышком
        EndDialog(hWnd,0);
        }
................  // Many another function
}
于 2016-11-07T17:07:28.403 回答