Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Посыл клав. события - помогите переделать процедуру [D6, WinXP]


Страницы:   1 2

=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;

ужосс )

ассемблер тут ни к чему.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо