C++ 激活windows";Alt Tab";带输入的开关

C++ 激活windows";Alt Tab";带输入的开关,c++,windows,winapi,input,sendinput,C++,Windows,Winapi,Input,Sendinput,我需要用SendInput显示windows切换器。我问他为什么这样做。简而言之,当我按住Alt Tab切换到其他应用程序时,我的应用程序可能会使用SendInput触发按键,这将中断当前的切换程序,这就是为什么我需要重新输入Alt Tab。目前我正在发布另一个tab按键(切换时我仍然按住alt键)或整个alt down+tab down&up。但在按住alt键的情况下,SendInput发送的单个制表符笔划不会触发开关。而整个组合键也不起作用。这里有一些测试代码 #include <wi

我需要用
SendInput
显示windows切换器。我问他为什么这样做。简而言之,当我按住
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();
}
#包括
#包括
#包括
内部主(空){
睡眠(1000*3);
输入选项卡输入[2];
tabinput[0]。类型=输入\键盘;
tabinput[0].ki={0x09,0};//KEY_TAB=0x09
tabinput[1]。类型=输入\键盘;
tabinput[1].ki={0x09,0,KEYEVENTF_KEYUP};
SendInput(2,tabinput,sizeof(INPUT));
getchar();
}

我正试着按tab键。我拿着alt键。这不管用。但是tab键会被触发,因为当我运行此代码并切换到文本编辑器或其他东西时,会出现一个tab事件。我的系统是
win8.1 64位

数组是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();
}

数组是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();
}

数组是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();
}

数组是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自动化客户端所需的权限。但是你可以编写一个桌面应用程序,作为一个以你的应用程序为目标的自动化客户端。为此,需要使用UIAccess权限构建桌面自动化客户端应用程序

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

这里呢

再加上这个

还有这个


Windows 8正在阻止您

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

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

这里呢

再加上这个

还有这个


Windows 8正在阻止您

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

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

这里呢

再加上这个

还有这个


Windows 8正在阻止您

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

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

这里呢

再加上这个

还有这个


很抱歉我犯了错误,这是一个测试代码,正如您指出的那样,它是错误的。但即使我修复了错误,这段代码也不能实现我想要的。您是否在您的计算机上测试过此代码(在按住alt键的同时运行)?如果windows切换器出现或没有出现?对不起,我的错误,这是一个测试代码,正如您所指出的,它是错误的。但即使我修复了错误,这段代码也不能实现我想要的。您是否在您的计算机上测试过此代码(在按住alt键的同时运行)?如果windows切换器出现或没有出现?对不起,我的错误,这是一个测试代码,正如您所指出的,它是错误的。但即使我修复了错误,这段代码也不能实现我想要的。您是否在您的计算机上测试过此代码(在按住alt键的同时运行)?如果windows切换器出现或没有出现?对不起,我的错误,这是一个测试代码,正如您所指出的,它是错误的。但即使我修复了错误,这段代码也不能实现我想要的。您是否在您的计算机上测试过此代码(在按住alt键的同时运行)?如果windows切换器出现与否?停止伪造输入,所有问题都会消失away@DavidHeffernan这意味着什么,这是一个普遍情况下的具体问题。耶