Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.052 c
14-1132792870
Джо
2005-11-24 03:41
2005.12.18
Правильная реклама ПО


14-1133154091
Antonn
2005-11-28 08:01
2005.12.18
Поздравьте меня, у меня сестренка родилась!


2-1133283723
BlacK_DiamonD
2005-11-29 20:02
2005.12.18
События папки


14-1132335263
lookin
2005-11-18 20:34
2005.12.18
У меня тоже пару вопросов...


4-1129824721
Эксперт
2005-10-20 20:12
2005.12.18
Вставить и растянуть рисунок на фон ListView