![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Посыл клав. события - помогите переделать процедуру [D6, WinXP]
=BuckLr= © (2007-06-15 21:19:00)Привет. Проблема вот в чём. Мне нужно послать сочетание клавиш в неактивное окно, при этом keybd_event иногда не срабатывает. В Делфи ворлде накопал такой код:
procedure EmulateKey(Wnd: HWND; VKey: Integer);
asm
push 0
push edx
push 0101H //WM_KEYUP
push eax
push 0
push edx
push 0100H //WM_KEYDOWN
push eax
call PostMessage
call PostMessage
end;
и всё работает отлично, однако посылает только на одну клавишу. А мне надо сразу на четыре. К сожалению, специфика задачи такова, что абсолютно подходит только этот способ. А так как ассемблера я не знаю :( то прошу помочь с процедурой. Если кто-нибудь переделает её так, чтобы она принимала сразу четыре кода клавиши, последовательно "нажимала" их, а затем "отпускала", то буду чрезмерно благодарен
Заранее примите благодарность
Углук (2007-06-17 20:41:00) [21]
> SetActiveWindow будет работать только для окон текущего
> потока
По-моему, Вы ошибаетесь. Совсем недавно я вроде бы переключался на окно другого потока через эту функцию.
> попробуйте вызвать эту ф-цию из программы, у которой нет
> в данный момент активных окон )
Активных окон не может быть у программы, у которой нет окон вообще, иначе единственное окно останется активным. Так?
А где оговорено, что у программы не должно быть окон? В задаче об этом ни слова.
Eraser (2007-06-17 20:33:00) [22]> [4] Углук © (17.06.07 20:13)
тогда уж SetForegroundWindow, т.к. SetActiveWindow будет работать только для окон текущего потока.
попробуйте вызвать эту ф-цию из программы, у которой нет в данный момент активных окон )
Углук (2007-06-17 20:13:00) [23]SetActiveWindow?
Eraser (2007-06-17 20:07:00) [24]> [2] Углук © (17.06.07 19:47)
в xp сделать окно активным из неактивной программы проблемотично.
Углук (2007-06-17 19:47:00) [25]
> keybd_event иногда не срабатывает.
Сделайте окно активным и сработает на 100%.
Eraser (2007-06-15 22:06:00) [26]> procedure EmulateKey(Wnd: HWND; VKey: Integer);
> asm
> push 0
> push edx
> push 0101H //WM_KEYUP
> push eax
> push 0
> push edx
> push 0100H //WM_KEYDOWN
> push eax
> call PostMessage
> call PostMessage
> end;
ужосс )
ассемблер тут ни к чему.