gpt4 book ai didi

c++ - C++ Windows API MOUSEEVENTF_XDOWN,MOUSEEVENTF_XUP不起作用

转载 作者:行者123 更新时间:2023-12-02 10:06:50 26 4
gpt4 key购买 nike

我试图学习使用c++ Windows API将鼠标输入发送到Windows,到目前为止,它一直很棒,但是由于某些原因,当我尝试使用mouseInput设置为dwflags(MOUSEEVENTF_XDOWN | MOUSEEVENTF_XUP)结构时,它似乎无能为力其他dwFlags似乎也能正常工作,
在文档中,据说当MOUSEEVENTF_XDOWN(或MOUSEEVENTF_XUP)用作dwFlags时,它应调用mouseData(例如XBUTTON1)中存储的按钮上的按下或释放,但似乎没有任何作用,这是有问题的码?还是我使用不正确?
我正在使用Windows 10 64x

#include<iostream>
#include<Windows.h>


void clickMouse()
{
INPUT event;
MOUSEINPUT mouseInput =
{
0,
0,
XBUTTON1,
(MOUSEEVENTF_XDOWN | MOUSEEVENTF_XUP),
0,
NULL
};
event.type = INPUT_MOUSE;
event.mi = mouseInput;
SendInput(1, &event, sizeof(INPUT));

}

int main()
{
bool buttonPressed = false;
while (true)
{
if (!buttonPressed && (GetKeyState(VK_CONTROL) >> 15))
{
clickMouse();
buttonPressed = true;
}
else if (buttonPressed && !(GetKeyState(VK_CONTROL) >> 15))
{
buttonPressed = false;
}
}

}

最佳答案

我对您的代码进行了较小的更改(由Andreas指出),以按真实用户的顺序依次触发事件。通过将鼠标放在窗口上的任意位置,我将Chrome用作目标。至少在我的机器上,无论鼠标位于何处,都会出现WM_XBUTTONDOWN和WM_XBUTTONUP消息激活后退按钮。我还使用了Spy ++来验证这些是正在生成的消息。指定0,0时,它将在最后一个已知的鼠标位置触发事件。因为这是一个X按钮,所以您必须找到一个响应该事件的应用程序以查看其是否正在运行,或者使用Spy ++或类似的工具来查看其正在触发。这是我使用的代码。

#include<iostream>
#include<Windows.h>


void clickMouse()
{
INPUT event;
MOUSEINPUT mouseInput[] =
{
{
0,
0,
XBUTTON1,
(MOUSEEVENTF_XDOWN),
0,
NULL
},
{
0,
0,
XBUTTON1,
(MOUSEEVENTF_XUP),
0,
NULL
}};
event.type = INPUT_MOUSE;
event.mi = mouseInput[0];
SendInput(1, &event, sizeof(INPUT));
event.mi = mouseInput[1];
SendInput(1, &event, sizeof(INPUT));
}

int main()
{
bool buttonPressed = false;
while (true)
{
if (!buttonPressed && (GetKeyState(VK_CONTROL) >> 15))
{
clickMouse();
buttonPressed = true;
}
else if (buttonPressed && !(GetKeyState(VK_CONTROL) >> 15))
{
buttonPressed = false;
}
}
}

关于c++ - C++ Windows API MOUSEEVENTF_XDOWN,MOUSEEVENTF_XUP不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59812475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com