使用SendInput激活窗口“Alt Tab”切换器

时间:2015-07-25 14:18:17

标签: c++ windows winapi input sendinput

我需要使用SendInput显示Windows切换器。 Another question我问了解这样做的原因。简而言之,当我按住Alt Tab切换到其他应用程序时,我的应用程序可能会使用SendInput触发按键,这会中断当前切换器,这就是我需要重新启动{{1 }}。目前我正在发布另一个Alt Tab键击(切换时我仍然保持alt)或完全tab。但是使用alt保持,SendInput发送的单个标签笔划不会触发切换器。并且整个组合键也不起作用。这是一些测试代码。

alt down + tab down & up

我正试图触发Tab键击延迟3s。我拿着alt键。这不起作用。但tab键被触发,因为当我运行此代码并切换到文本编辑器或其他东西时,会有一个tab事件。我的系统是#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(); }

2 个答案:

答案 0 :(得分:3)

Windows 8阻止了你。

在Windows 8安全模型中,应用程序没有成为UI自动化客户端所需的权限。但您可以编写一个桌面应用程序,充当自动化客户端,并将您的应用作为目标。为此,需要使用UIAccess权限构建桌面自动化客户端应用程序。

将清单更改为UIAccess="true"并要求管理员权限,创建证书,使用该证书对应用程序进行签名,将其放在Program Files下的某个位置,然后运行它。正如这里所解释的

https://msdn.microsoft.com/en-us/library/windows/desktop/dd979761.aspx?f=255&MSPPError=-2147217396

在这里

https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/4b6dbc43-a026-4957-9178-91d2001e2d0d/windows-8-block-alttab-simulation#291eb5b4-f6d2-49b6-83db-658bd832f2c9

加上这个

https://msdn.microsoft.com/en-us/library/ms742884.aspx?f=255&MSPPError=-2147217396

和这个

https://translate.google.com/translate?sl=it&tl=en&js=y&prev=_t&hl=en&ie=UTF-8&u=http%3A%2F%2Fblogs.msdn.com%2Fb%2Fitasupport%2Farchive%2F2009%2F09%2F16%2Fsendsas-step-by-step.aspx&edit-text=&act=url

答案 1 :(得分:0)

数组是0索引的,但您使用基于1的索引填充数组。所以你没有填充第一个数组元素,并且在最后一个数组元素之后丢弃了内存。请改用:

int main(void) {
    Sleep(1000 * 3);
    INPUT tabinput[2];
    tabinput[0].type = INPUT_KEYBOARD;
    tabinput[0].ki = {VK_TAB, 0};
    tabinput[1].type = INPUT_KEYBOARD;
    tabinput[1].ki = {VK_TAB, 0, KEYEVENTF_KEYUP};
    SendInput(2, tabinput, sizeof(INPUT));
    getchar();
}