Главная страница
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.05 c
2-1133252752
sapsi
2005-11-29 11:25
2005.12.18
Одна таблица- 2 грида


14-1132775232
pound
2005-11-23 22:47
2005.12.18
проблема с потоком TThread в XP


14-1132910754
Pazitron_Brain
2005-11-25 12:25
2005.12.18
Что бы было...


4-1129726836
Uran
2005-10-19 17:00
2005.12.18
Помогите сгенерировать глюк:)


14-1132815553
Lexer
2005-11-24 09:59
2005.12.18
С нашего сайта архив стал скачиваться в битом виде