Форум: "WinAPI";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизOтправить комбинацию Crtl+C Найти похожие ветки
← →
Rentgen © (2005-10-20 09:14) [0]Всем привет!
Нужно отправить комбинацию клавишь в текстовое окно своей программы - Ctrl+C.
Делаю так:
PostMessage(HWND, WM_KEYDOWN, Ord("C"), MOD_CONTROL);
Посылается обычная "c"
Хотя в результате нужно: ^C
//пробовал WM_KEYFIRST, SendMessage - таже проблема.
Что я делаю не так?
P.S.
Вручную комбинация работает и выдает: ^C
← →
Rentgen © (2005-10-20 09:20) [1]Наверно нужно добавить, что это терминальное окно компонента AdTerminal
← →
umbra © (2005-10-20 10:11) [2]по смыслу надо сначала нажать контрол, нажать "с", отпустить "С", отпустить контрол. Т.е. Должно быть несколько сообщений
← →
Rentgen © (2005-10-20 10:40) [3]Это конечно логично, и я проверил:
PostMessage(AdTerminal1.Handle, WM_KEYDOWN, VK_CONTROL , 0);
PostMessage(AdTerminal1.Handle, WM_KEYDOWN, ord("C"),0);
//sleep(500);
PostMessage(AdTerminal1.Handle, WM_KEYUP, ord("C"),0);
PostMessage(AdTerminal1.Handle, WM_KEYUP, VK_CONTROL , 0);
Всеравно приходит обычная "cc"
Еще идеи есть?
← →
umbra © (2005-10-20 10:52) [4]Но ведь в lParam (четвертый аргумент) должен быть, наверное, не ноль. Там должен содержаться сканкод клавиши, количество нажатий и т.д.)
← →
Rentgen © (2005-10-20 11:12) [5]Когда-то написал программу:
AutoCheats (http://autocheats.narod.ru)
Она симулирует нажатие клавиш (для игр делал - набирать коды)
дк вот там я точно неиспользовал 4 параметр так как [4]
и все же вопрос открыт.
← →
Ботвин Дмитрий (2005-10-20 11:42) [6]Rentgen © (20.10.05 10:40) [3]
Посылать следующее сообщение нужно только после того, как поток
целевого окна обработал предыдущее. А где в коде
PostMessage(AdTerminal1.Handle, WM_KEYDOWN, VK_CONTROL , 0);
PostMessage(AdTerminal1.Handle, WM_KEYDOWN, ord("C"),0);
гарантия того, что PostMessage(AdTerminal1.Handle, WM_KEYDOWN, VK_CONTROL , 0) обработано к моменту посылки
PostMessage(AdTerminal1.Handle, WM_KEYDOWN, ord("C"),0).
Это не факт!!! Может быть из-за этого...
← →
Rentgen © (2005-10-20 11:46) [7]
> Ботвин Дмитрий (20.10.05 11:42) [6]
Если вы имеете в виду ставить паузу, то эт я пробовал.
тоже самое... :((((
← →
Rentgen © (2005-10-20 12:04) [8]
> ALL
Очень нужно!!!! Горю!!!
← →
Ботвин Дмитрий (2005-10-20 12:27) [9]Можно попробывать keybd_event, чаще всего помагает
← →
Rentgen © (2005-10-20 12:43) [10]
> Ботвин Дмитрий (20.10.05 12:27) [9]
пробовал... (((((
← →
Ботвин Дмитрий (2005-10-20 12:51) [11]Если AdTerminal1.Handle - это хэндл окна, тогда пробуй так:
SetForegroundWindow(AdTerminal1.Handle);
// имитация нажатия клавиши Key
procedure PressKey(Key: Word);
begin
keybd_event(Key,0,0,0);
end;
// имитация отпускания клавиши Key
procedure ReleaseKey(Key: Word);
begin
keybd_event(Key,0,KEYEVENTF_KEYUP,0);
end;
// имитация щелчка на клавише Key
procedure ClickKey(Key: Word);
begin
keybd_event(Key,0,0,0);
keybd_event(Key,0,KEYEVENTF_KEYUP,0);
end
// нажатие Ctrl+C
PressKey(VK_CONTROL);
ClickKey(ord("C"));
ReleaseKey(VK_CONTROL);
Должно сработать :-)))
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c