Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > keybd_event в WinXP


Автор: LamerTM 13.12.2007, 21:05
Есть Опера, в которой загружена страница. На странице объект по виду типа Combobox. Навожу на него мышь (программно). Кликаю по нему мышью программно (чтобы фокус был на этом "комбобоксе").
Дальше задача: нажать программно enter. Это я делаю процедурой keybd_event.
Делаю так:
Код

keybd_event(13, 13, 0, 0); 

Этот код работает как часы под Win2K. Под WinXP он можно сказать не работает вообще (иногда срабатывает (enter нажимается), но чаще всего - нет). В чём может быть причина?

Пробовал и так:
Код

keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN,0), 0, 0);
keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN,0), KEYEVENTF_KEYUP, 0);

Тоже не работает.

Автор: Dubrov 27.12.2007, 18:18
Похожая проблема и у меня.  :(
Эмулирую нажатие Ctrl+v программно:

Код

keybd_event(VK_LCONTROL,MapVirtualKeyA(VK_CONTROL,0),0,0);
keybd_event('V',MapVirtualKeyA('V',0),0,0);
keybd_event('V',MapVirtualKeyA('V',0),KEYEVENTF_KEYUP,0);
keybd_event(VK_LCONTROL,MapVirtualKeyA(VK_CONTROL,0),KEYEVENTF_KEYUP,0);


иногда срабатывает, иногда нет. Иногда получается почему-то только V, без ctrl'a.

Автор: dumb 27.12.2007, 23:08
Sleep(10) поставь между 2-ой и 3-ей строкой.

Автор: Dubrov 28.12.2007, 11:35
Спасибо БрейнФакер!

Я методом тыка ужо поставил Sleep. Правда немножко не там, где ты сказал. Но тоже работает!

Код

    keybd_event(VK_LCONTROL,MapVirtualKeyA(VK_CONTROL,0),0,0);
    keybd_event('V',MapVirtualKeyA('V',0),0,0);
    keybd_event('V',MapVirtualKeyA('V',0),KEYEVENTF_KEYUP,0);
    Sleep(10); //как решение проблемы 'v'
    keybd_event(VK_LCONTROL,MapVirtualKeyA(VK_CONTROL,0),KEYEVENTF_KEYUP,0);


Автор: dumb 28.12.2007, 12:58
Цитата(Dubrov @  28.12.2007,  11:35 Найти цитируемый пост)
Спасибо БрейнФакер!
[offtop]и почему никто не замечает красного зачеркнутого круга?! - аватара имеет диаметрально противоположный смысл - "ду нот фак май брейн!"[/offtop]

Цитата(Dubrov @  28.12.2007,  11:35 Найти цитируемый пост)
Правда немножко не там, где ты сказал.
правильнее все таки там, где я указал, т.к. у тебя получается, что нажатие кнопки "v" происходит моментально.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)