Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2011, 16:15   #1
viruss
Новичок
Джуниор
 
Регистрация: 17.01.2011
Сообщений: 3
По умолчанию Нажатие комбинации клавиш в неактивном окне.

Нужно нажать комбинацию клавиш alt+лево в IE.
Написал по уже имеющемуся примеру на форуме данный код но по исполнению нечего не происходит.

Код:
procedure TForm1.Button5Click(Sender: TObject);
var

   WinHanlde: HWnd;
begin

       WinHanlde := FindWindow('IEFrame', nil);
     if (0 <> WinHanlde) then


  keybd_event(VK_MENU, 0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
  keybd_event(VK_MENU, 0,KEYEVENTF_EXTENDEDKEY,0);

  keybd_event(VK_LEFT, 0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
  keybd_event(VK_LEFT, 0,KEYEVENTF_EXTENDEDKEY,0);

  keybd_event(VK_MENU, 0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
  keybd_event(VK_LEFT, 0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);


end;

Последний раз редактировалось Stilet; 17.01.2011 в 16:37.
viruss вне форума Ответить с цитированием
Старый 17.01.2011, 16:39   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А все потому что keybd_event заставляет реагировать активное окно (в твоем случае твою форму) а не какое то там.
Ты нашел WinHanlde, теперь ему нужно посылать сообщения WM_KEYDOWN,WM_KEYUP в найденное окно.
http://yandex.ua/yandsearch?date=&te...=8981&lr=20554
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.01.2011, 16:43   #3
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

http://delphiexpert.ru/view_lesson.php?id=15 помоему как раз то что нужно..
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 17.01.2011, 19:03   #4
viruss
Новичок
Джуниор
 
Регистрация: 17.01.2011
Сообщений: 3
По умолчанию

С одно клавишей теперь работает, но комбинация не воспримется.
Где ошибка?

procedure TForm1.Button5Click(Sender: TObject);
var

WinHanlde: HWnd;
begin

WinHanlde := FindWindow('IEFrame', nil);
if (0 <> WinHanlde) then

PostMessage(WinHanlde, WM_KEYDOWN, 164, 0);
PostMessage(WinHanlde, WM_KEYDOWN, 37, 0);
PostMessage(WinHanlde, WM_KEYUP, 164, 0);
PostMessage(WinHanlde, WM_KEYUP, 37, 0);


end;
viruss вне форума Ответить с цитированием
Старый 17.01.2011, 19:58   #5
viruss
Новичок
Джуниор
 
Регистрация: 17.01.2011
Сообщений: 3
По умолчанию

Так всё нашел решение. Надеюсь кому-нибудь пригодится.

procedure TForm1.Button5Click(Sender: TObject);
var

h : HWnd;
h2 : HWnd;
begin

h := FindWindow('IEFrame', nil);
h2 := FindWindowEx(h,0,'IEFrame',0);
h2 := FindWindowEx(h2,0,'IEFrame',0);
SetForegroundWindow(h);
PostMessage(h2, WM_SETFOCUS,0,0);
keybd_event(VK_LMENU, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(VK_LEFT, MapVirtualKey(Ord('C'), 0), 0, 0);
keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_LMENU, MapVirtualKey(VK_CONTROL,0), KEYEVENTF_KEYUP, 0);

end;

Через PostMessage и SendMessage нажатие комбинаций видимо сделать нельзя.
viruss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эмуляция клавиш в неактивном окне Аникейка Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 17.11.2010 09:21
Нажатие комбинации клавиш Sparky Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 09.12.2009 12:43
Нажатие комбинации клавиш pix_l Общие вопросы Delphi 7 31.03.2009 10:12
Нажатие мыши в неактивном окне? sanchopansa Общие вопросы Delphi 3 16.07.2008 08:18
сделать нажатие клавиш, в неактивном приложении Димарик Общие вопросы Delphi 1 22.06.2007 22:48