имитировать нажатие клавиши Alt Tab в C ++ для запуска окна быстрого переключения - PullRequest
1 голос
/ 14 ноября 2011

У меня есть идея для проекта, который должен быть запущен на устройстве с сенсорным экраном. Идея состоит в том, чтобы на экране была кнопка, которая при нажатии переключает между открытыми проектами. Так точно, как работает сочетание клавиш ALT + TAB. Я знаю, что событие SendKeys :: Send () в C ++ может имитировать нажатие клавиш, но мне кажется, что оно не работает, когда я пытаюсь отправить ALT + TAB. Так есть ли способ, которым у меня может быть окно, отображающее все открытые программы (как при нажатии ALT TAB) через C ++?

PS Проект представляет собой приложение для Windows! Windows 7, чтобы начать, но мы надеемся, что это может быть совместимо с большим количеством систем Windows позже.

1 Ответ

3 голосов
/ 14 ноября 2011

Предполагая C ++ / CLI, так как вы упомянули SendKeys. SendKeys не может работать надежно, потому что он отпускает ключи, в результате чего окно Alt-Tab исчезает. Вместо этого вы хотите использовать SendInput () и отправить нажатие клавиши для клавиши Alt и нажатие клавиши + вверх для клавиши Tab. Этот код работал хорошо:

#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;
    }
...