Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.024 c
5-1116502039
andrey__
2005-05-19 15:27
2005.12.18
Как в DBGrid ячейку вставить CheckBox


1-1132744928
К00е
2005-11-23 14:22
2005.12.18
Как заблокировать ctrl+alt+f1 комбинацию в litestep?


9-1122218078
Большой Брат
2005-07-24 19:14
2005.12.18
Антилязинг


14-1133169476
Жук
2005-11-28 12:17
2005.12.18
Просмотр телевидения (почти опрос)


8-1121438062
Kerk
2005-07-15 18:34
2005.12.18
Screen Mate




   Наверх