Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 25.04.2010, 12:24   #1
Moriarty
 
Регистрация: 19.03.2010
Сообщений: 6
Вопрос [?] Послать клавишу в чужое окно, не выводя окно на передний план.

Данный код выводит окно на передний план, и посылает 1 и Enter.

Код:
.......
  WND := FindWindow(Nil, 'ОКНО');

  If WND <> 0 Then
  Begin
    SetForegroundWindow(WND);
    Sleep(300);
    keybd_event(31, 0, 0, 0);
    keybd_event(VK_RETURN, 0, 0, 0);
  End;
Но, мне бы хотелось оставлять окно в свёрнутом состоянии, и отдавать ему команды, так сказать, на расстоянии.

Прошу помощи. Желательный ответ - исходный код.

Последний раз редактировалось Stilet; 03.05.2010 в 08:45.
Moriarty вне форума Ответить с цитированием
Старый 25.04.2010, 19:37   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

Код:
 postmessage(WND, WM_LBUTTONDOWN,0 , (x shl 16)+ y);
 postmessage(WND, WM_LBUTTONUP,0 , (x shl 16)+ y);
смысл думаю ясен... также желательно вам поискать dfaq/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 03.05.2010, 06:14   #3
Moriarty
 
Регистрация: 19.03.2010
Сообщений: 6
По умолчанию

Спасибо. Смысл понятен, ага. Погуглил разные клавиши и посмотрел, что к чему. Сделал так:

Цитата:
Procedure EmulateKey(VKey: Integer);
Begin
PostMessage(FindWindow(Nil, 'ОКНО'), Wm_KeyDown, VKey, 1);
Sleep(200);
PostMessage(FindWindow(Nil, 'ОКНО'), Wm_KeyUp, VKey, 1);
Sleep(200);
End;
Всё это работает на ура. Но, я не могу разобраться как дочери окна передать команды. Если, допустим, хочу передать в вкладку браузера команду. Как правильно поступить?

Всё, я сам разобрался)
Цитата:
Okno := FindWindow(Nil, 'Окно1 - Mozilla Firefox');

Procedure EmulateKey(VKey: Integer);
Begin
Vkld := FindWindowEx(Okno, 0, 'MozillaWindowClass', Nil); //Берёт хендл текущей вкладки.
PostMessage(Vkld, Wm_KeyDown, VKey, 1);
Sleep(200);
PostMessage(Vkld, Wm_KeyUp, VKey, 1);
Sleep(200);
End;
Всем спасибо, хотя бы за просмотр темы)
ICQ=HexToDec("606D4D9")

Последний раз редактировалось Stilet; 03.05.2010 в 08:45.
Moriarty вне форума Ответить с цитированием
Старый 20.02.2011, 05:34   #4
Z3rique
Пользователь
 
Регистрация: 04.02.2011
Сообщений: 29
По умолчанию

Как вызвать эту процедуру по нажатию кнопки?
Z3rique вне форума Ответить с цитированием
Старый 21.02.2011, 06:11   #5
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
Как вызвать эту процедуру по нажатию кнопки?
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  EmulateKey(индекс клавиши, посматри в справочнике);
end;
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести чужое окно на передний план TwiX Общие вопросы Delphi 10 12.10.2009 20:54
Показать\Скрыть чужое окно с меняющимся заголовком Vol666 Общие вопросы Delphi 17 23.09.2009 17:08
Скрыть чужое окно ЧИЖ Win Api 8 12.06.2008 00:55
окно на задний план RammFan Общие вопросы Delphi 3 25.11.2007 16:11