Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.015 c
2-1133264260
Sysanin
2005-11-29 14:37
2005.12.18
реестр


2-1133518721
msgipss
2005-12-02 13:18
2005.12.18
как можно использовать наследование TService


2-1133522904
oleggar
2005-12-02 14:28
2005.12.18
doc files


14-1132910088
Александр Иванов
2005-11-25 12:14
2005.12.18
Сверхурочная работа


4-1129487692
Швч
2005-10-16 22:34
2005.12.18
Как вставить рисунок JPG на фон ListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский