C ++执行导致监视器断开连接

时间:2017-10-14 08:50:55

标签: c++ winapi input visual-studio-2017 monitor

我遇到的问题是,在执行此代码时,它会点击,然后我的显示器变为蓝色并说“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社区。调试代码和运行可执行文件时会发生此问题。我的代码没有错误或警告。

2 个答案:

答案 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;