【问题标题】:Screen blacks out when simulating left click模拟左键单击时屏幕黑屏
【发布时间】:2015-04-11 19:58:07
【问题描述】:

我正在学习如何使用 SendInput(),但遇到了一个问题。每当我尝试模拟左键单击时,屏幕总是黑屏。这是我的代码:

#include <Windows.h>

void MouseLeftClick(){
    INPUT ip;

    ip.type = INPUT_MOUSE;

    ip.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;

    SendInput(1, &ip, sizeof(INPUT));


    ip.mi.dwFlags = MOUSEEVENTF_LEFTUP;

    SendInput(1, &ip, sizeof(INPUT));
}

void PressKey(int keyCode){
    INPUT ip;

    ip.type = INPUT_KEYBOARD;

    ip.ki.wVk = keyCode;

    ip.ki.dwFlags = 0;

    SendInput(1, &ip, sizeof(INPUT));


    ip.ki.dwFlags = KEYEVENTF_KEYUP;

    SendInput(1, &ip, sizeof(INPUT));
}

int main(){
    while (true){
        if (GetAsyncKeyState(VK_END)){
            MouseLeftClick();
            Sleep(1000);
        }
    }
}

当我模拟按键时也不会发生。

【问题讨论】:

  • 当我测试代码时没有发生任何类似的事情。它按预期工作。
  • 您没有初始化结构上的所有字段。一次发送一个事件也是错误的。按照文档说明进行批量处理。
  • 1 作为第一个参数传递给SendInput,然后连续调用两次是总是错误的。考虑彻底阅读documenation

标签: c++ winapi keypress


【解决方案1】:

INPUT ip; 行后添加ZeroMemory(&amp;ip, sizeof(ip)); 将解决您的问题。

【讨论】:

  • C 和 C++ 为初始化结构提供了方便的语法:INPUT ip = { 0 };
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多