Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Автоматизация ввода с клавиатуры

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

zondex

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возможно существуют готовые решения, буду благодарен за информацию.
 
Необходимо написать приложение которое будет перехватывать нажатие комбинации одной-двух заданных клавиш на клавиатуре.
После отжатие одной или обеих клавиш необходимо что бы приложение в ответ, кратковременно через указанный промежуток  
 
времени сэмулировала нажатие другой комбинаций клавиш.
Пример: Пользователь зажал клавиши "A" и "S", далее он отпускает одну или обе зажатых клавиш - в ответ программа эмулирует  
 
нажатие (с заданной продолжительностью) двух других клавиш "W" и "D".

Всего записей: 22 | Зарегистр. 20-04-2010 | Отправлено: 12:19 16-06-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На третьей кваке работает:
 
#include <windows.h>
 
int main()
{
    int flag;
    short stateA, stateS;
    INPUT inp[2];
 
    inp[0].type = INPUT_KEYBOARD;
    inp[0].ki.wVk = 0;
    inp[0].ki.wScan = 0x11; //W
    inp[0].ki.time = 0;
    inp[0].ki.dwExtraInfo = 0;
    inp[1].type = INPUT_KEYBOARD;
    inp[1].ki.wVk = 0;
    inp[1].ki.wScan = 0x20; //D
    inp[1].ki.time = 0;
    inp[1].ki.dwExtraInfo = 0;
 
    for(;;)
    {
        for(flag = 0; ;)
        {
//            if(1 & GetAsyncKeyState(VK_ESCAPE))
//                return 0;
            stateA = GetAsyncKeyState('A');
            stateS = GetAsyncKeyState('S');
            if(!flag && (stateA & 0x8000) && (stateS & 0x8000))
                flag = 1;
            if(flag && (!(stateA & 0x8000) || (!(stateS & 0x8000))))
                break;
            Sleep(8);
        }
 
        inp[0].ki.dwFlags = KEYEVENTF_SCANCODE; //down
        inp[1].ki.dwFlags = KEYEVENTF_SCANCODE; //down
        SendInput(2, inp, sizeof(INPUT));
        Sleep(1000);
        inp[0].ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_SCANCODE; //up
        inp[1].ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_SCANCODE; //up
        SendInput(2, inp, sizeof(INPUT));
    }
}
 

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 19:55 16-06-2014 | Исправлено: ne_viens, 23:18 16-06-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Автоматизация ввода с клавиатуры


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru