Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Для новичков > Эмуляция клавиш в неактивном приложении |
Автор: Romы4 24.7.2009, 07:16 |
Делал так: var wnd: HWND; wnd := FindWindow('notepad', nil); PostMessage(wnd, WM_KEYDOWN, VK_F1, 0); С блокнотом проходит все на ура, даже когда он не активен, не работает правда когда свернут....с другими приложениями работает токо когда они активны.....помогите плиз примером, суть задачи состоит в том чтобы эмулировать нажатие клавишь в свернутом или хотябы не в активном приложении |
Автор: Romikgy 24.7.2009, 10:50 |
простой способ , считать состояние окна , запомнить , востановить и сделать его активным выполнить все что нужно и востановить каким было окно .... |
Автор: Romы4 24.7.2009, 11:04 |
это было слишком просто)))....нужно чтобы окно не вызывалось поверх остальных (всегда оставалось неактивным) |
Автор: Romikgy 24.7.2009, 11:09 |
зачем такое? |
Автор: Rrader 25.7.2009, 14:25 | ||
Есть и обходные пути. Команды меню можно эмулировать через WM_COMMAND, при этом идентификатор можно получить, подсмотрев в сканере окон (InqSoft Window Scanner умеет).
|
Автор: Romы4 1.8.2009, 16:37 | ||||
это прекрасно пашет с блокнотом.....но с другими приложениями не работает....... Я сделал так как мне посоветовал Romikgy -т.е. брал фокус нужного мне окна, посылал в него необходимое нажатие клавиатуры, затем возвращал фокус текущему окну.....НО создалась новая проблема, так как мне надо постоянно с интервалом 1-5 секунд посылать нажатие клавиатуры-возникло мерцание окон из-за постоянного смены фокуса........помогите как можно от этого избавится ![]() |
Автор: Romы4 1.8.2009, 17:39 |
а можно подробнее про параметры SendNotifyMessage...я имею в виду цифры |
Автор: Rrader 1.8.2009, 18:00 |
В аттаче |
Автор: Romы4 1.8.2009, 18:33 |
с этим я разобрался...но все равно спасибо большое.....но в сканере я так и ненашел где он отображает горячие клавиши Добавлено через 13 минут и 25 секунд я так понял что для горячих клавишь синтаксис такой: SendNotifyMessage(NotepadWindowHandle, WM_HOTKEY, 64, 0);.............но как сканер отображает id кнопок я не нашел |
Автор: Rrader 2.8.2009, 06:17 |
Ничего Вы не поняли, поэтому перечитайте всю тему внимательно от начала до конца и попробуйте понять еще раз. Не выйдет - бросайте это дело. |
Автор: Romы4 2.8.2009, 09:45 |
Ого поммог))))....если все следовали Вашему совету и бросали на полдороги....хммм-мы бы наверное еще на ветках сидели |
Автор: Yanis 5.8.2009, 11:23 |
Romы4 Да зачем тебе горячие клавиши-то? Тем более, что они есть не у всех пунктов меню. У тебя есть идентификатор пункта меню (узнаёшь чеоез s0m Windows Scanner) и ты его программно «нажимаешь», если так можно выразиться. П. С. Скорее, мы сидели бы на ветках, если бы вопрошающий не слышал ответа. |
Автор: Romы4 31.8.2009, 07:31 |
Ребят, спасибо вроде разобрался.....с любым окном получается кроме d3d приложения-на него фокус надо обязательно..можно конечно брать хэндл активного окна потом брать в фокус нужное d3d приложение нажимать в нем нужные клавиши и возвращать фокус на предыдущее окно-это единственный способ который я нашел....но от вызывает мерцание между окнам+пока d3d в фокусе не возможно с другим окном работать...а нужно именно так |
Автор: 0LineGate 21.10.2009, 09:13 | ||||
Так и с d3d приложениями должно работать, я думаю. ![]() |