|
#1
|
|||
|
|||
клавиши..
помогите пожалуйста сэмулировать нажатие клавиш вообще.. тоесть, нажимать на кнопку (любую, включая мышь) независимо от того какое окно активно...
|
#2
|
|||
|
|||
можно попробовать получить активное окно и послать ему WM_CHAR и/или WM_MOUSE.
|
#3
|
|||
|
|||
и как же это осуществить?
|
#4
|
|||
|
|||
Послать - через SendMessage.
получить активное окно - там есть функции навигации по Z-стеку окон в API. навскидку не помню - посмотри по справке (MSDN). |
#5
|
|||
|
|||
Код:
procedure TForm1.Timer1Timer(Sender: TObject); var i : Integer; H : Hwnd; begin H := FindWindow('окно', 0); begin For i:=1 to length(Edit1.text) do sendmessage(H, wm_char, ord(Edit1.text[i]), 0); SendMessage(H, WM_KEYDOWN, vk_return, 0); SendMessage(H, WM_KEYUP, vk_return, 0); end; end; здесь нужно знать точное окно... а как сделать чтобы он отправлял на любое активное? Последний раз редактировалось Admin, 19.12.2008 в 19:19. |
#6
|
|||
|
|||
да, и, нажатие мыши здесь не получится сэмулировать
|
#7
|
|||
|
|||
Задаешь цикл repeat пользуешься функцией GetWindow с параметрами GW_HWNDFIRST и GW_HWNDNEXT, получаешь список имен окон, а дальше действуй.
|
#8
|
|||
|
|||
задача схожа , нужно эмулировать нажатие клавиш в чужом приложении в свернутом в трей окне , (послать сообщение в чат , sendmessage отправляет строчку в RichEdit20W , чтобы отправить необходимо нажать ctrl+enter , ) для активного и неактивного выполняется следующее
Код:
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; вызов EmulateKey(wnd, VK_RETURN); а как бы для свернутого в трей , не разворачивая его желательно... и еще вопрос в довесок , можно ли в свернутом в трей приложении выбрать элемент меню ( не разворачивая) и нажать кнопку... Последний раз редактировалось Admin, 20.12.2008 в 12:06. |
#9
|
||||
|
||||
а keybd_event() и mouse_event() разве не подойдут?
...сказал, и загрустил от бесспорной своей правоты |
#10
|
|||
|
|||
Цитата:
|
#11
|
||||
|
||||
ой извините. Тогда действительно лучше через SendMessage().
П программа ваша собственная? Если да то зарезервируяте например WM_USER и посылайте команды через него или через WM_COMMAND (в случае с Delph, WM_COMMAND не всегда удобен) ...сказал, и загрустил от бесспорной своей правоты |