c++ - 使用 SendInput 激活 windows "Alt Tab"切换器

标签 c++ windows winapi input sendinput

我需要使用 SendInput 显示窗口切换器。 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 秒的 Tab 击键。我按住alt键。这是行不通的。但是触发了tab键,因为当我运行这段代码并切换到文本编辑器什么的时候,会有一个tab键事件。我的系统是win8.1 64bit

最佳答案

Windows 8 正在阻止您。

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

将 list 更改为 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

关于c++ - 使用 SendInput 激活 windows "Alt Tab"切换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31627385/

相关文章:

c++ - 在 C++ 中使用指针查找偶数

c++ - 如何使用 vtable 确定类类型

c++ - constexpr 的推导类型是什么?

.net - 如何获得 .NET TreeView 的 Windows 原生外观?

c++ - C++:如果没有来自串行端口的新数据,如何忽略ReadFile()?

winapi - 使用 Powershell 作为 COMSPEC

c++ - QFontMetrics 返回不准确的结果

c# - 如何从 wpf/windows c# 中的 Web 浏览器控件获取滚动宽度

c++ - Windows 无边界 OpenGL 窗口出现奇怪的制表问题

windows - IE 通过注册表启用/禁用代理设置