C++执行导致monitor断开

C++ execution causes monitor to disconnect

我遇到的问题是,在执行此代码时,它会发出咔嗒声,然后我的显示器变成蓝色并显示 "HDMI no cable connected",然后 returns 在 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 社区。调试代码和 运行 可执行文件时会出现此问题。我的代码没有错误或警告。

您没有初始化 INPUT structure properly thus (probably) invoking 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));

您没有初始化大多数 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;