Форум: "WinAPI";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
Внизkeybd_event - CTRL+C Найти похожие ветки
← →
Kerk © (2005-07-04 09:51) [0]Пытаюсь имитировать нажатие CTRL+C.. как-то странно себя этот код ведет.. по всем ощущениям CTRL не отпускается..
keybd_event(VK_CONTROL,0,0,0);
keybd_event(MapVirtualKey(Ord("C"),1),0,0,0);
keybd_event(MapVirtualKey(Ord("C"),1),0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
← →
alpet © (2005-07-04 10:10) [1]Есть различные флажки, в том числе и KEYEVENTF_EXTENDEDKEY, попробуй его для VK_CONTROL - может подойдет.
← →
alpet © (2005-07-04 10:45) [2]
procedure PressCtrlC;
var scan: byte;
begin
scan := MapVirtualKey (VK_CONTROL, 0);
keybd_event(VK_CONTROL, scan, 0,0);
sleep (100);
keybd_event(ord ("C"), 0, 0, 0);
sleep (100);
keybd_event(ord ("C"), 0, KEYEVENTF_KEYUP,0);
sleep (100);
keybd_event(VK_CONTROL, scan, KEYEVENTF_KEYUP,0);
end;
Вроде работает..
← →
alpet © (2005-07-04 10:46) [3]Все Sleep можно убрать.
← →
Kerk © (2005-07-04 11:57) [4]Вдогонку :)
VOID keybd_event(
BYTE bVk,
BYTE bScan,
DWORD dwFlags,
PTR dwExtraInfo
);
bScan
This parameter is not used.
Тем не менее регулярно вижу использование этого параметра. Зачем??
← →
dmitry501 © (2005-07-04 12:12) [5]Kerk © (04.07.05 11:57) [4]
Наверно для уневирсальности. Для Windows CEbScan
[in] Specifies a hardware scan code for the key.
← →
dmitry501 © (2005-07-04 12:13) [6]dmitry501 © (04.07.05 12:12) [5]
"уневирсальности" читать как "универсальности" :)
← →
alpet © (2005-07-04 14:13) [7]Я заметил это, и без scan все прекрасно работает. Но пример в MSDN к этой функции почему-то имеет такой вид:
// Simulate a key press
keybd_event( VK_NUMLOCK,
0x45, // Scan code - not used :)
KEYEVENTF_EXTENDEDKEY | 0,
0 );
← →
serko © (2005-07-04 15:08) [8]А как тогда нажать Ctrl+Alt+1!
← →
serko © (2005-07-04 15:10) [9]Удалено модератором
Примечание: Дубль
← →
alpet © (2005-07-04 16:24) [10]Если просто - с помощью клавиатуры. Программно выше описанным способом - сначала симулировать нажатие control, alt, 1, затем отпускание но в обратном порядке.
← →
ANB © (2005-07-04 17:30) [11]
> alpet © (04.07.05 16:24) [10]
- а через сообщения ? Без keyb_event ?
← →
alpet © (2005-07-04 18:06) [12]ANB © (04.07.05 17:30) [11]
Еще можно через хуки, можно драйвер написать, в случае консольных/DOS приложений - перехватить стандартный ввод. Способов много - выбирай какой нравится.
Касательной сообщений - WM_SYSKEYDOWN + WM_SYSKEYUP и WM_KEYDOWN + WM_KEYUP обеспечивают для гуевых (GUI) приложений несложную симуляцию нажатия клавиши.
← →
serko © (2005-07-05 00:17) [13]>> alpet © (04.07.05 16:24) [10]
Так чтоли?
scan := MapVirtualKey (VK_CONTROL, 0);
keybd_event(VK_CONTROL, scan, 0,0);
sleep (100);
keybd_event(VK_ALT, scan, 0,0);
sleep (100);
keybd_event(ord ("1"), 0, 0, 0);
sleep (100);
keybd_event(ord ("1"), 0, KEYEVENTF_KEYUP,0);
sleep (100);
keybd_event(VK_ALT, scan, KEYEVENTF_KEYUP,0);
sleep (100);
keybd_event(VK_CONTROL, scan, KEYEVENTF_KEYUP,0);
Если че подправьте!
← →
Virgo_Style © (2005-07-05 08:50) [14]serko © (05.07.05 0:17) [13]
VK_CONTROL и VK_ALT соответствуют разные scan - коды %-)
← →
serko © (2005-07-05 11:56) [15]А у меня пишет что VK_Alt не известный идентификатор!
← →
Virgo_Style © (2005-07-05 12:41) [16]Действительно. Надо VK_MENU %-)
← →
serko © (2005-07-07 09:59) [17]Ну вот я так сделал:
procedure TForm1.Button1Click(Sender: TObject);
var scan: byte;
scan1:byte;
begin
scan := MapVirtualKey (VK_CONTROL, 0);
Scan1:= MapVirtualKey (VK_Menu, 0);
keybd_event(VK_CONTROL, scan, 0,0);
sleep (100);
keybd_event(VK_Menu, scan1, 0,0);
sleep (100);
keybd_event(ord ("w"), 0, 0, 0);
sleep (100);
keybd_event(ord ("w"), 0, KEYEVENTF_KEYUP,0);
sleep (100);
keybd_event(VK_Menu, scan1, KEYEVENTF_KEYUP,0);
sleep (100);
keybd_event(VK_CONTROL, scan, KEYEVENTF_KEYUP,0);
end;
<\code>
Но по нажатию на Button должно проиходить Windowsовское событие, а не происходит! Если ручками нажать то работает а через Button не хочет! Это получается горячие клавиши на которые я могу настроить что угодно!
Че делать?
← →
Virgo_Style © (2005-07-07 10:06) [18]А слабО было взять и заменить "w" на "W"? Или для этого обязательно подсказка нужна? :-\
← →
serko © (2005-07-07 17:05) [19]Гыыыыы работает! А как быть тогда для Ctrl+Alt+1?
← →
serko © (2005-07-07 17:07) [20]Всем спасибо ВСЕ работает!
← →
Alexander Panov © (2005-07-07 17:36) [21]Вместо Ord можно использовать VkKeyScanEx и VkKeyScan.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.045 c