使用 SendInput 激活 windows "Alt Tab" 切换器
Activate windows "Alt Tab" switcher with SendInput
我需要用 SendInput
显示 windows 切换器。 Another question 我问解释了这样做的原因。简而言之,当我按住 Alt Tab
切换到其他应用程序时,我的应用程序可能会使用 SendInput
触发击键,这将中断当前切换器,这就是为什么我需要重新触发 [=14] =].目前我正在努力发布另一个 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 秒的 Tab 击键。我按住alt键。这是行不通的。但是触发了tab键,因为当我运行这段代码切换到文本编辑器什么的时候,就会有一个tab键事件。我的系统是win8.1 64bit
。
数组是从 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();
}
Windows 8 挡住了你
在 Windows 8 安全模型中,应用程序没有成为 UI 自动化客户端所需的权限。但是您可以编写一个桌面应用程序作为自动化客户端,以您的应用程序为目标。为此,您的桌面自动化客户端应用程序需要使用 UI 访问权限构建。
将清单更改为 UIAccess="true"
并要求管理员权限,创建证书,使用该证书签署应用程序,将其放在 Program Files 下的某个位置,然后 运行 它。如此处所述
https://msdn.microsoft.com/en-us/library/windows/desktop/dd979761.aspx?f=255&MSPPError=-2147217396
这里
加上这个
https://msdn.microsoft.com/en-us/library/ms742884.aspx?f=255&MSPPError=-2147217396
还有这个
我需要用 SendInput
显示 windows 切换器。 Another question 我问解释了这样做的原因。简而言之,当我按住 Alt Tab
切换到其他应用程序时,我的应用程序可能会使用 SendInput
触发击键,这将中断当前切换器,这就是为什么我需要重新触发 [=14] =].目前我正在努力发布另一个 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 秒的 Tab 击键。我按住alt键。这是行不通的。但是触发了tab键,因为当我运行这段代码切换到文本编辑器什么的时候,就会有一个tab键事件。我的系统是win8.1 64bit
。
数组是从 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();
}
Windows 8 挡住了你
在 Windows 8 安全模型中,应用程序没有成为 UI 自动化客户端所需的权限。但是您可以编写一个桌面应用程序作为自动化客户端,以您的应用程序为目标。为此,您的桌面自动化客户端应用程序需要使用 UI 访问权限构建。
将清单更改为 UIAccess="true"
并要求管理员权限,创建证书,使用该证书签署应用程序,将其放在 Program Files 下的某个位置,然后 运行 它。如此处所述
https://msdn.microsoft.com/en-us/library/windows/desktop/dd979761.aspx?f=255&MSPPError=-2147217396
这里
加上这个
https://msdn.microsoft.com/en-us/library/ms742884.aspx?f=255&MSPPError=-2147217396
还有这个