【问题标题】:simulate Alt Tab keyboard press in C++ to launch Fast Switch window在 C++ 中模拟 Alt Tab 键盘按下以启动快速切换窗口
【发布时间】:2011-11-14 17:07:57
【问题描述】:

我有一个需要在触摸屏设备上运行的项目的想法。这个想法是在屏幕上有一个按钮,当按下它时在打开的项目之间切换。那么 ALT + TAB 键盘快捷键是如何工作的。 我知道 C++ 中的 SendKeys::Send() 事件可以模拟按键,但是当我尝试发送 ALT + TAB 时它似乎对我不起作用。那么有没有一种方法可以让窗口通过 C++ 显示所有打开的程序(就像按下 ALT TAB 时一样)?

PS 该项目是一个 Windows 应用程序! Windows 7 开始,但希望以后可以与更多 Windows 系统兼容。

【问题讨论】:

  • 你说的是什么平台?为其添加标签。

标签: windows c++-cli keyboard-shortcuts keyboard-events alt-tab


【解决方案1】:

假设 C++/CLI,因为您提到了 SendKeys。 SendKeys 不能可靠地工作,因为它会释放键,使 Alt-Tab 窗口消失。您想改用 SendInput() 并为 Alt 键发送一个 keydown,为 Tab 键发送一个 keydown + up。这段代码运行良好:

#include <windows.h>
#pragma comment(lib, "user32.lib")

...
    System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
        INPUT input = {INPUT_KEYBOARD};
        input.ki.wVk = (WORD)Keys::Menu;
        UINT cnt = SendInput(1, &input, sizeof(input));
        input.ki.wVk = (WORD)Keys::Tab;
        if (cnt == 1) cnt = SendInput(1, &input, sizeof(input));
        input.ki.dwFlags = KEYEVENTF_KEYUP;
        if (cnt == 1) cnt = SendInput(1, &input, sizeof(input));
        if (cnt != 1) throw gcnew System::ComponentModel::Win32Exception;
    }

【讨论】:

  • 您应该发送一个由 3 个INPUT 结构组成的数组,这样就没有其他击键可以干预了。而System::Void 是写void 的糟糕方式。您还检查了 3 次相同的错误,而不是检查所有 3 个调用。但这绝对是正确的方向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
相关资源
最近更新 更多