【发布时间】:2015-07-26 14:58:21
【问题描述】:
我需要用SendInput 显示Windows 切换器。 Another question我问解释了这样做的原因。简而言之,当我按住Alt Tab 切换到其他应用程序时,我的应用程序可能会使用SendInput 触发击键,这将中断当前切换器,这就是我需要重新触发Alt Tab 的原因。目前我正在发布另一个tab 击键(切换时我仍然按住alt)或完全alt down + tab down & up。但是在按住 alt 的情况下,SendInput 发送的单个选项卡笔划不会触发切换器。而且整个组合键也不起作用。这是一些测试代码。
#include <windows.h>
#include <WinUser.h>
#include <iostream>
int main(void) {
Sleep(1000 * 3);
INPUT tabinput[2];
tabinput[0].type = INPUT_KEYBOARD;
tabinput[0].ki = {0x09, 0}; // KEY_TAB = 0x09
tabinput[1].type = INPUT_KEYBOARD;
tabinput[1].ki = {0x09, 0, KEYEVENTF_KEYUP};
SendInput(2, tabinput, sizeof(INPUT));
getchar();
}
我正在尝试触发延迟 3 秒的制表键击键。我拿着alt键。这行不通。但是tab键被触发了,因为当我运行这段代码并切换到文本编辑器什么的时候,会有一个tab事件。我的系统是win8.1 64bit。
【问题讨论】:
-
停止伪造输入,所有问题都会消失
-
@DavidHeffernan 这是什么意思,这是一个常见情况下的具体问题。是的,您可能会说伪造输入不合理或不优雅,您能提出更好的建议来解决我的问题吗?那就是在不伪造输入的情况下重置大写的状态,以免中断当前键或通过伪造输入在中断后重新触发alt选项卡。
-
对于那些不赞成这个问题和另一个问题的人。请给出你的论点。
-
通过让用户管理大写锁定状态来解决您的问题。去掉所有的输入伪造,所有的问题都解决了。
-
@DavidHeffernan 如果我什么都不做,我将永远不会遇到这些问题,这听起来很合理。如果您有兴趣,尽管我强烈怀疑根据您的建议,请参阅@Software_Designer 提供的解决方案和我的补充。祝你有美好的一天!
标签: c++ windows winapi input sendinput