Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.12.2008, 19:24
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию клавиши..

помогите пожалуйста сэмулировать нажатие клавиш вообще.. тоесть, нажимать на кнопку (любую, включая мышь) независимо от того какое окно активно...
Ответить с цитированием
  #2  
Старый 17.12.2008, 20:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

можно попробовать получить активное окно и послать ему WM_CHAR и/или WM_MOUSE.
Ответить с цитированием
  #3  
Старый 17.12.2008, 21:07
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию

и как же это осуществить?
Ответить с цитированием
  #4  
Старый 17.12.2008, 21:17
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Послать - через SendMessage.
получить активное окно - там есть функции навигации по Z-стеку окон в API. навскидку не помню - посмотри по справке (MSDN).
Ответить с цитированием
  #5  
Старый 17.12.2008, 22:27
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию

Код:
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: Не забываем пользоваться тегами, иначе последуют санкции!

здесь нужно знать точное окно... а как сделать чтобы он отправлял на любое активное?

Последний раз редактировалось Admin, 19.12.2008 в 19:19.
Ответить с цитированием
  #6  
Старый 17.12.2008, 22:29
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию

да, и, нажатие мыши здесь не получится сэмулировать
Ответить с цитированием
  #7  
Старый 19.12.2008, 16:52
Ama Ama вне форума
Активный
 
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
По умолчанию

Задаешь цикл repeat пользуешься функцией GetWindow с параметрами GW_HWNDFIRST и GW_HWNDNEXT, получаешь список имен окон, а дальше действуй.
Ответить с цитированием
  #8  
Старый 20.12.2008, 08:59
smollvrn smollvrn вне форума
Прохожий
 
Регистрация: 20.12.2008
Сообщения: 1
Репутация: 10
По умолчанию

задача схожа , нужно эмулировать нажатие клавиш в чужом приложении в свернутом в трей окне , (послать сообщение в чат , 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  
Старый 20.12.2008, 12:48
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

а keybd_event() и mouse_event() разве не подойдут?
__________________
...сказал, и загрустил от бесспорной своей правоты
Ответить с цитированием
  #10  
Старый 20.12.2008, 13:16
smollvrn smollvrn вне форума
Прохожий
 
Регистрация: 20.12.2008
Сообщения: 1
Репутация: 10
По умолчанию

Цитата:
Сообщение от 0nni
а keybd_event() и mouse_event() разве не подойдут?
для свернутого в трей не проходит , разворачивать я не хочу , чтоб перед глазами мелкало
Ответить с цитированием
  #11  
Старый 20.12.2008, 14:36
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

ой извините. Тогда действительно лучше через SendMessage().
П программа ваша собственная? Если да то зарезервируяте например WM_USER и посылайте команды через него или через WM_COMMAND (в случае с Delph, WM_COMMAND не всегда удобен)
__________________
...сказал, и загрустил от бесспорной своей правоты
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:21.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter