gpt4 book ai didi

c++ - SendInput() 发送 '[' 时按下开始按钮 ?? C++

转载 作者:行者123 更新时间:2023-11-28 02:55:45 25 4
gpt4 key购买 nike

我正在制作一个程序,其中 C++ 自动为我按下键盘上的键。我对键盘上的每个键都这样做了。除了我尝试使用方括号“[”之外,它工作得很好。如果我告诉计算机打印出一个方括号,它会按预期打印出方括号,但它也会按下 Windows 开始按钮,因此打开开始菜单?经过一些调试后,我发现开始菜单仅在使用 SendInput 函数释放键后弹出,而不是在按下时弹出。所以我的问题是为什么会这样? PS 在任何人询问之前,我的代码对于每个键都是 100% 正确的,所以我知道我正在使用的方法有效。

ip.ki.wVk = VK_OEM_4; // this is the '[' key
ip.ki.dwFlags = 0;
SendInput(1, &ip, sizeof(INPUT)); // the key has been pressed

ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT)); // the key is released, THE START MENU POPS UP!

最佳答案

我无法重现这个,这是我的最小代码:

#include <Windows.h>

int main() {
INPUT ip = {0};

ip.type = INPUT_KEYBOARD;
ip.ki.wVk = VK_OEM_4;

Sleep(2000);

SendInput(1, &ip, sizeof ip);

ip.ki.dwFlags = KEYEVENTF_KEYUP;

// Note: Adding some kind of delay here might be a good idea.

SendInput(1, &ip, sizeof ip);

return 0;
}

检查这是否适合您,看看它是否是您的程序问题或某种键盘布局问题。

这在我的电脑上正确地按下了 [ 并且没有打开开始菜单,但请注意这取决于键盘布局映射 VK_OEM_4[ 在某些布局上可能并非如此。你可以使用 VkKeyScanEx将字符转换为虚拟键码。

关于为什么您的程序会像您描述的那样运行的一些猜测:也许您没有将您的 INPUT 结构归零(使用 = {0}memset) 并且它包含一些垃圾值,或者您不小心模拟了某种碰巧打开开始菜单的组合键,或者您的代码中可能存在其他一些错误但由于您没有显示完整而无法分辨例如,有很多可能性。

此外,如果您想发送字符,使用 Unicode 值可能更便携:

#include <Windows.h>

int main() {
INPUT ip = {0};

ip.type = INPUT_KEYBOARD;
ip.ki.dwFlags = KEYEVENTF_UNICODE;
ip.ki.wScan = 0x5B; // unicode value for '['

Sleep(2000);

SendInput(1, &ip, sizeof ip);

return 0;
}

无论键盘布局如何,这都可以工作,但在技术上与模拟按键有点不同,因此使用它取决于你到底想做什么。

关于c++ - SendInput() 发送 '[' 时按下开始按钮 ?? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22038338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com