![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Эмуляция нажатия клавиш в форме [D5, D6, Win95/98, Win2k]
Semenyak © (2002-10-24 14:02:00)Уважаемые мастаки! Неужели никто не знает, как программно "нажать" комбинацию клавиш Ctrl+P в окне???
chips (2002-11-19 16:30:00) [1]procedure TForm1.Button1Click(Sender: TObject);
var
w: word;
winhandl:HWND;// - handle окна в которое отсылаешь
own:HWND; // -handle твоего приложения
begin
SetForeGroundWindow(winhandl);
keybd_event(vk_control, 0, 0, 0);
w:=VkKeyScan("p");
keybd_event(w,0,0,0);
keybd_event(w,0,KEYEVENTF_KEYUP,0);
keybd_event(vk_control,0,KEYEVENTF_KEYUP,0);
SetForegroundWindow(own);// а теперь обратно
end;
chips (2002-11-19 16:30:00) [2]procedure TForm1.Button1Click(Sender: TObject);
var
w: word;
winhandl:HWND;// - handle окна в которое отсылаешь
own:HWND; // -handle твоего приложения
begin
SetForeGroundWindow(winhandl);
keybd_event(vk_control, 0, 0, 0);
w:=VkKeyScan("p");
keybd_event(w,0,0,0);
keybd_event(w,0,KEYEVENTF_KEYUP,0);
keybd_event(vk_control,0,KEYEVENTF_KEYUP,0);
SetForegroundWindow(own);// а теперь обратно
end;
uktus (2002-11-17 11:57:00) [3]Варианты :
SendMessage (YourWindow.Handle, WM_KeyDown, VK_CONTROL,0);
SendMessage (YourWindow.Handle, WM_KeyDown, Ord("P"), 0);
SendMessage (YourWindow.Handle, WM_KeyUp, Ord("P"), 0);
SendMessage (YourWindow.Handle, WM_KeyUp, VK_CONTROL,0);
или то же самое с keybd_event не работают.
Мне тоже нужно сэмулировать нажатие "Ctrl(Shift)+любая кнопка" в окне чужой программы.
Простое нажатие одной клавиши легко выполняется путем посылки 2-ух сообщений:
SendMessage (Handle, WM_KeyDown, Ord("P"), 0);
SendMessage (Handle, WM_KeyUp, Ord("P"), 0);
Но как сделать то же самое с комбинацией 2-ух клавиш ???
Конкретный пример: послать команду "Play" на Windows Media Player: Ctrl+P
Dm9 (2002-10-25 05:58:00) [4]SendMessage (YourWindow.Handle, WM_KeyDown, Ord("P"), 0);
SendMessage (YourWindow.Handle, WM_KeyUp, Ord("P"), 0); -
это без контрола.
А если с ним - не пробовал, но должно работать:
SendMessage (YourWindow.Handle, WM_KeyDown, 17, 0);
SendMessage (YourWindow.Handle, WM_KeyDown, Ord("P"), 0);
SendMessage (YourWindow.Handle, WM_KeyUp, Ord("P"), 0);
SendMessage (YourWindow.Handle, WM_KeyUp, 17, 0);
Или код контрола 16? По-моему, 17. Проверь - в обработчик onKeyDown вставь ShowMessge (IntToStr (Key)) и нажми ctrl.
Получившееся число поставь вместо 17 (хотя, по-моему, там всё-таки 17, а делфи самому загружать в лом сейчас :=)
Gayrus (2002-10-25 03:48:00) [5]Что-то вроде этого:
Keybd_Event(VK_CONTROL,0,0,0);
Keybd_Event(Ord("P"),0,0,0);
Keybd_Event(Ord("P"),0,KEYEVENTF_KEYUP,0);
Keybd_Event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
Song (2002-10-24 16:23:00) [6]Из АПИ
Ru (2002-10-24 16:08:00) [7]а откуда это keybd_event?
Игорь Шевченко (2002-10-24 14:16:00) [8]keybd_event