Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;Windows API MOUSEEVENTF\u XDOWN、MOUSEEVENTF\u XUP don';行不通 我试图学习使用C++ Windows API来向Windows发送鼠标输入,到目前为止它是很棒的,但是由于某种原因,当我尝试使用鼠标输入< /COD>结构时,使用 DWFLAGG/ SET到(MouSeEvffxXDOWN MouSeVFEXXUP)它似乎什么也不做,所有其他DWFLAGS也都能正常工作, 文档中说,当MOUSEEVENTF_XDOWN(或MOUSEEVENTF_XUP)用作dwFlags时,它应该调用存储在mouseData中的按钮上的按下或释放(例如XBUTTON1),但它似乎没有做任何事情,代码是否有问题?还是我没有正确地使用它? 我使用的是Windows1064X #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; } } } #包括 #包括 void clickMouse() { 输入事件; 鼠标输入鼠标输入= { 0, 0, 按钮1, (MOUSEEVENTF_XDOWN | MOUSEEVENTF_XUP), 0, 无效的 }; event.type=输入\鼠标; event.mi=鼠标输入; SendInput(1,&事件,sizeof(输入)); } int main() { bool按钮按下=错误; while(true) { 如果(!buttonPressed&&(GetKeyState(VK_控件)>>15)) { 单击鼠标(); 按钮按下=真; } 否则如果(按钮按下&&!(GetKeyState(VK_控件)>>15)) { 按钮按下=错误; } } }_C++_Windows - Fatal编程技术网

C++;Windows API MOUSEEVENTF\u XDOWN、MOUSEEVENTF\u XUP don';行不通 我试图学习使用C++ Windows API来向Windows发送鼠标输入,到目前为止它是很棒的,但是由于某种原因,当我尝试使用鼠标输入< /COD>结构时,使用 DWFLAGG/ SET到(MouSeEvffxXDOWN MouSeVFEXXUP)它似乎什么也不做,所有其他DWFLAGS也都能正常工作, 文档中说,当MOUSEEVENTF_XDOWN(或MOUSEEVENTF_XUP)用作dwFlags时,它应该调用存储在mouseData中的按钮上的按下或释放(例如XBUTTON1),但它似乎没有做任何事情,代码是否有问题?还是我没有正确地使用它? 我使用的是Windows1064X #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; } } } #包括 #包括 void clickMouse() { 输入事件; 鼠标输入鼠标输入= { 0, 0, 按钮1, (MOUSEEVENTF_XDOWN | MOUSEEVENTF_XUP), 0, 无效的 }; event.type=输入\鼠标; event.mi=鼠标输入; SendInput(1,&事件,sizeof(输入)); } int main() { bool按钮按下=错误; while(true) { 如果(!buttonPressed&&(GetKeyState(VK_控件)>>15)) { 单击鼠标(); 按钮按下=真; } 否则如果(按钮按下&&!(GetKeyState(VK_控件)>>15)) { 按钮按下=错误; } } }

C++;Windows API MOUSEEVENTF\u XDOWN、MOUSEEVENTF\u XUP don';行不通 我试图学习使用C++ Windows API来向Windows发送鼠标输入,到目前为止它是很棒的,但是由于某种原因,当我尝试使用鼠标输入< /COD>结构时,使用 DWFLAGG/ SET到(MouSeEvffxXDOWN MouSeVFEXXUP)它似乎什么也不做,所有其他DWFLAGS也都能正常工作, 文档中说,当MOUSEEVENTF_XDOWN(或MOUSEEVENTF_XUP)用作dwFlags时,它应该调用存储在mouseData中的按钮上的按下或释放(例如XBUTTON1),但它似乎没有做任何事情,代码是否有问题?还是我没有正确地使用它? 我使用的是Windows1064X #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; } } } #包括 #包括 void clickMouse() { 输入事件; 鼠标输入鼠标输入= { 0, 0, 按钮1, (MOUSEEVENTF_XDOWN | MOUSEEVENTF_XUP), 0, 无效的 }; event.type=输入\鼠标; event.mi=鼠标输入; SendInput(1,&事件,sizeof(输入)); } int main() { bool按钮按下=错误; while(true) { 如果(!buttonPressed&&(GetKeyState(VK_控件)>>15)) { 单击鼠标(); 按钮按下=真; } 否则如果(按钮按下&&!(GetKeyState(VK_控件)>>15)) { 按钮按下=错误; } } },c++,windows,C++,Windows,我对您的代码做了一个小改动(Andreas指出),以便像真正的用户那样按顺序触发事件。我使用Chrome作为目标,将鼠标放在窗口的任意位置。看起来,至少在我的机器上,WM_XBUTTONDOWN后跟WM_XBUTTONUP消息会激活后退按钮,无论鼠标位于何处。我还使用Spy++验证这些消息是否是正在生成的消息。指定0,0后,它将在最后一个已知的鼠标位置触发事件。因为这是一个X按钮,所以您必须找到一个响应该事件的应用程序才能看到它正在工作,或者使用Spy++或类似的工具来看到它正在启动。这是我使用

我对您的代码做了一个小改动(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;
    }
}
}
#包括
#包括
void clickMouse()
{
输入事件;
鼠标输入鼠标输入[]=
{  
{
0,
0,
按钮1,
(Mouseeventfxdown),
0,
无效的
},
{
0,
0,
按钮1,
(MOUSEEVENTF_XUP),
0,
无效的
}};
event.type=输入\鼠标;
event.mi=鼠标输入[0];
SendInput(1,&事件,sizeof(输入));
event.mi=鼠标输入[1];
SendInput(1,&事件,sizeof(输入));
}
int main()
{
bool按钮按下=错误;
while(true)
{
如果(!buttonPressed&&(GetKeyState(VK_控件)>>15))
{
单击鼠标();
按钮按下=真;
}
否则如果(按钮按下&&!(GetKeyState(VK_控件)>>15))
{
按钮按下=错误;
}
}
}

您是否检查了
SendInput
的返回值?它报告成功还是失败?我不确定将MOUSEEVENTF_XDOWN事件和MOUSEEVENTF_XUP事件结合起来是否有意义。首先发送向下事件,然后发送向上事件似乎更有意义。您似乎在相对于上次鼠标单击位置的坐标(0,0)处发送单击事件。这是故意的吗?如果目标窗口位于左上角,绝对坐标不是更合适吗(100100)?对于绝对坐标,您必须设置MOUSEEVENTF_绝对标志。@AndreasWenzel Success(非零值)@AndreasWenzel我不想移动鼠标,相对于上次报告的位置的坐标(0,0)不适合吗?