Вниз
Скачать: CL | DM;

Эмуляция нажатия клавиш в форме   Найти похожие ветки 

← →
Semenyak   (2002-10-24 14:02) [0]

Уважаемые мастаки! Неужели никто не знает, как программно "нажать" комбинацию клавиш Ctrl+P в окне???


← →
Игорь Шевченко ©   (2002-10-24 14:16) [1]

keybd_event


← →
Ru ©   (2002-10-24 16:08) [2]

а откуда это keybd_event?


← →
Song ©   (2002-10-24 16:23) [3]

Из АПИ


← →
Gayrus ©   (2002-10-25 03:48) [4]

Что-то вроде этого:
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);





← →
Dm9 ©   (2002-10-25 05:58) [5]

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, а делфи самому загружать в лом сейчас :=)


← →
uktus   (2002-11-17 11:57) [6]

Варианты :
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




← →
chips   (2002-11-19 16:30) [7]

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) [8]

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;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.01 c
14-15262
and_1
2002-12-14 06:03
2003.01.06
Проблема с Ping + Net send flood


14-15288
linker
2002-12-17 06:24
2003.01.06
Где можно слить MSDN в виде дисков?


8-15165
ПВВО
2002-09-11 14:39
2003.01.06
Пожалуйста помогите!!!


4-15349
DeepProg
2002-11-16 23:12
2003.01.06
Поиск не по имени, а по дате последнего доступа


7-15339
Дмитрий К.К.
2002-10-26 18:03
2003.01.06
Автозагрузка




   Наверх