Вниз
Скачать: 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.014 c
6-15185
RETAND
2002-11-05 23:34
2003.01.06
ClientSocket стучиться на ServerSocket, как реализовать??


1-14975
BaSergey
2002-12-23 18:05
2003.01.06
Как правильно освобождать память из-под COM/ActiveX?


1-15139
MaxXXXL
2002-12-20 23:00
2003.01.06
подскожите мастера!!!!!


3-14959
Max Zyuzin
2002-12-15 10:14
2003.01.06
Drag&Drop в DBGrid


1-15028
alex_ran
2002-12-24 17:11
2003.01.06
Проблема с печатью в FastReport




   Наверх