Как активировать какое-то окно из внешнего приложения в windows? - PullRequest
0 голосов
/ 27 ноября 2011

Я хочу отправить некоторое нажатие клавиши во внешнее приложение, и оно работает нормально, но когда я пытаюсь отправить нажатие клавиши в дочернее окно того же внешнего приложения, по какой-то причине это не работает, поэтому мне нужна помощь.Допустим, мы хотим напечатать текст из буфера обмена из блокнота и сделать это за один шаг.Код, который будет выглядеть следующим образом.

        #include <windows.h>
    #include <stdio.h>
    #include <iostream.h>
    using namespace std;

    int main(int argc, char* argv[]){
        WinExec("notepad", 1);
        Sleep(1000);
        HWND handle = FindWindow("notepad",0);  // it's handling as well
        SetForegroundWindow(handle);        
        keybd_event(VK_CONTROL, 0, 0, 0);   // simulate CTRL down
        keybd_event(VkKeyScan('V'), 0, 0, 0);
        keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); 
        Sleep(500);
        keybd_event(VK_CONTROL, 0, 0, 0);   // simulate CTRL down
        keybd_event(VkKeyScan('P'), 0, 0, 0);
        keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); // simulate CTRL up
        Sleep(1000);
        HWND handle1 = FindWindow(0, "Print");  // it wann't find "Print" window
        SetForegroundWindow(handle1);
        keybd_event(VK_MENU, 0, 0, 0); // simulate ALT down
        keybd_event(VkKeyScan('P'), 0, 0, 0);
        keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
        return 0;
    }

Но он хочет отправить ALT + P в окно «Печать», почему?Конечная цель состоит в том, чтобы сделать небольшой макрос, который отправляет в keystorkes приложения (в любом дочернем или родительском Windows). ОС: WIN 7 64bit

1 Ответ

0 голосов
/ 27 ноября 2011

Вероятно, вы можете заставить существующий код (вроде) работать, просто удалив эти строки:

HWND handle1 = FindWindow(0, "Print");  // it wann't find "Print" window
SetForegroundWindow(handle1);

Помните, что ложный ввод идет в поток, который имеет фокус ввода, и когда вы показываете диалоговое окно печати в Блокноте, этот диалог получает фокус ввода. Вам просто не нужно устанавливать фокус, система сделает это за вас.

Однако ваш подход невероятно хрупок. Я подозреваю, что вам было бы гораздо лучше, если бы вы использовали что-то вроде UI Automation .

...