在C ++中模拟Alt Tab键盘按下以启动Fast Switch窗口

时间:2011-11-14 17:07:57

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

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

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

1 个答案:

答案 0 :(得分:3)

自从您提到SendKeys以来假设C ++ / CLI。 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;
    }