Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

keybd_event

2.2K
01 ноября 2010 года
cls
24 / / 26.07.2003
Как сымитировать русские буквы функцией keybd_event? Задача, чтобы побуквенно пропечатать строку ret. С английскими буквами всё работает.

Цитата:

wsprintf(ret, "тест");
SendMessage(hWnd, WM_INPUTLANGCHANGEREQUEST, 0, (long)LoadKeyboardLayoutA("00000419", KLF_ACTIVATE)); //русская раскладка
for(i = 0; i < strlen(ret); i++)
{
c = (unsigned char)ret;
keybd_event(c, (BYTE)MapVirtualKey(c, 0), 0, 0);
keybd_event(c, (BYTE)MapVirtualKey(c, 0), KEYEVENTF_KEYUP, 0);
Sleep(10);
}



Такой код не работает.

Как запасной вариант пытался написать функцию ремапинга русской раскладки в английскую, так чтобы для русской Й выдавало Q, Ц => W, ...
Но споткнулся о букву Б, Ю и прочие буквы которым соответствуют спец символы и знаки препинания.

Вопрос в догонку. Я посылаю эти нажатия клавиш во флэш-ролик в браузере. Когда я пользуюсь SendMessage(...,WM_CHAR,...,...), даже если указатель мыши стоит в поле ввода, всё равно ролику нажатия не приходят. Видимо надо не просто в окно браузера посылать, а конкретно в ролик. Как это сделать, чтобы более не мучаться с keybd_event?

2.2K
01 ноября 2010 года
cls
24 / / 26.07.2003
Разобрался сам. С помощью SendInput.
Если кому понадобится, вот код.
Код:
char ret[1024];
INPUT pInput;
wchar_t wc;
wsprintfA(ret, "тест123")
for(i = 0; i < strlen(ret); i++)
{
 MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, &ret, 1, &wc, 1);
 pInput.type = INPUT_KEYBOARD;
 pInput.ki.wVk = 0;
 pInput.ki.time = 0;
 pInput.ki.wScan = wc;
 pInput.ki.dwFlags = KEYEVENTF_UNICODE;
 SendInput(1, &pInput, sizeof(pInput));
 pInput.ki.dwFlags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;
 SendInput(1, &pInput, sizeof(pInput));
 Sleep(20);
}


И всё таки вопрос в силе. А через keybd_event как это реализуется?

И второй вопрос тоже остаётся в силе: как послать во флэш-ролик нажатие кнопки?
297
01 ноября 2010 года
koodeer
1.2K / / 02.05.2009
Читаем про keybd_event:
[QUOTE=MSDN]This function has been superseded. Use SendInput instead.[/QUOTE]
Функция keybd_event заменена на SendInput, нет смысла к ней возвращаться. Так что всё правильно сделал.

К тому же, keybd_event работает с виртуальными кодами и скан-кодами, а не с символами!


Насчёт флэш-плеера: вам уже писали - используйте API плеера.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог