我遇到的问题是,在执行此代码时,它会点击,然后我的显示器变为蓝色并说“HDMI没有连接电缆"”并在1秒后恢复正常,或者在我执行某个动作之前停留在该屏幕上(点击,alt等)。
任何知道为什么会发生这种情况的人都会受到赞赏。
#include "stdafx.h"
#include <Windows.h>
using namespace std;
void function() {
INPUT Input;
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
SendInput(true, &Input, sizeof(Input));
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(true, &Input, sizeof(Input));
};
int main()
{
Sleep(3000);
function();
return 0;
}
另外,我使用的是Visual Studio 2017社区。调试代码和运行可执行文件时会发生此问题。我的代码没有错误或警告。
答案 0 :(得分:-1)
您没有正确初始化INPUT结构,因此(可能)调用undefined behavior。使用以下命令将结构字段初始化为零:
INPUT Input = {};
您还可以使用两个元素的数组:
INPUT Input[2] = {0};
然后是:
Input[0].type = INPUT_MOUSE;
Input[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
Input[1].type = INPUT_MOUSE;
Input[1].mi.dwFlags = MOUSEEVENTF_LEFTUP;
并致电SendInput:
SendInput(2, Input, sizeof(INPUT));
答案 1 :(得分:-1)
您没有初始化发送垃圾并可能触发未定义行为的大多数INPUT
字段。你应该至少用零填充它们:
Input.type = INPUT_MOUSE;
Input.mi.dx = 0;
Input.mi.dy = 0;
Input.mi.mouseData = 0;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
Input.mi.time = 0;
Input.mi.dwExtraInfo = 0;