Специальная программа не распознает симулированный ввод с клавиатуры - PullRequest
0 голосов
/ 16 июля 2010

Я работаю над программой, которая автоматизирует использование этого программного обеспечения, EPIX XCAP.

В Capture () он привязывает изображение, открывает меню «Файл», открывает диалог сохранения, но затем, когда он достигает вкладок (для перехода к окну имени файла в диалоговом окне сохранения), он не делает их. Я могу достаточно хорошо прокручивать его вручную, и я проверил цикл Type (VK_TAB) в блокноте, и он отлично работал там, поэтому я понятия не имею, почему он не будет работать.

Сначала я пытался использовать SendInput, а не keybd_event, но я не смог заставить его работать с Ctrl / Alt, если вам интересно.

Любая помощь очень ценится.

void Type(int x){
    const int KEYEVENT_KEYUP = 0x02;
    keybd_event(x,0,0,0);
    keybd_event(x,0,KEYEVENT_KEYUP,0);
}

void Ctrl(int x){  
    const int KEYEVENT_KEYUP = 0x02;
    keybd_event(VK_CONTROL,0,0,0);              // press the CTRL key
    keybd_event(x,0,0,0);
    keybd_event(x,0,KEYEVENT_KEYUP,0);
    keybd_event(VK_CONTROL,0,KEYEVENT_KEYUP,0); // let up the CTRL key
}

void Alt(int x){  
    const int KEYEVENT_KEYUP = 0x02;
    keybd_event(VK_MENU,0,0,0);              // press the ALT key
    keybd_event(x,0,0,0);
    keybd_event(x,0,KEYEVENT_KEYUP,0);
    keybd_event(VK_MENU,0,KEYEVENT_KEYUP,0); // let up the ALT key
}

void Shift(int x){  
    const int KEYEVENT_KEYUP = 0x02;
    keybd_event(VK_SHIFT,0,0,0);              // press the SHIFT key
    keybd_event(x,0,0,0);
    keybd_event(x,0,KEYEVENT_KEYUP,0);
    keybd_event(VK_SHIFT,0,KEYEVENT_KEYUP,0); // let up the SHIFT key
}

void Capture(string filename){
    Ctrl('S');
    Alt(VK_SPACE);
    Type(VK_RIGHT);
    Type(VK_RETURN);
    for(int a = 0; a < 13; a++){
        Type(VK_TAB);
    }
    for(int b = 0; b < filename.length(); b++){
        Type(filename[b]);
    }
    Type(VK_RETURN);
}

1 Ответ

0 голосов
/ 16 июля 2010

Когда вы отправляете события клавиатуры, вам не нужно отправлять код, который указывает, какой элемент управления был нажат? GetKeyState и GetAsyncKeyState - это API-интерфейсы, используемые для определения, какие клавиши удерживаются, и они отвечают на VK_LSHIFT, VK_RSHIFT, VK_LCONTROL, VK_RCONTROL и т. Д. (В дополнение к независящим от позиции VK_CONTROL, VK_SHIFT и т. Д.).

...