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;
我遇到的问题是,在执行此代码时,它会发出咔嗒声,然后我的显示器变成蓝色并显示 "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;