![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в чужом окне нажать комбинацию Ctrl-P [D6, WinXP]
Grademax © (2008-02-26 06:14:00)Существует чужое окно. Необходимо из своего приложения нажать в чужом окне комбинацию Ctrl-P. Пробовал через PostMessage, но как сообщить параметру "Кеу" что нажата именно комбинация (Ctrl-P) я не знаю.
Key:=Byte('P'); {??? Куда Ctrl привязать ???}
PostMessage(Handle, WM_KEYDOWN, Key, 0);
Leonid Troyanovsky (2008-02-29 16:02:00) [1]
> MikeZ (28.02.08 22:38) [12]
> Ну, SendKey таки работает. Но вот Control - не получается.
Некоторые приложения обращают внимание на состояние
клавиатуры в момент прихода WM_KEYDOWN/UP|CHAR.
Т.е., иногда может помочь примерно такое
http://groups.google.com/group/fido7.ru.delphi.chainik/msg/e8115e50b604ca90?dmode=source&output=gplain
Кодировка KOI8-R
А, в общем-то, для неактивных окон существует слишком
большой произвол.
--
Regards, LVT.
MikeZ (2008-02-28 22:38:00) [2]Ну, SendKeyтаки работает. Но вот Control- не получается.
Leonid Troyanovsky (2008-02-28 22:19:00) [3]
> Leonid Troyanovsky © (28.02.08 22:08) [10]
> сойдет даже SendMessage with WM_CHAR and ^C.
^V, sorry.
--
Regards, LVT.
Leonid Troyanovsky (2008-02-28 22:08:00) [4]
> MikeZ (28.02.08 15:17) [9]
> Наверное, потому, что это Edit и ему WM_SETTEXT (или что
> там) надо делать...
Если про EDIT, то сойдет даже SendMessage with WM_CHAR and ^C.
Но, для других нужен SendMessageW или еще что хужей.
--
Regards, LVT.
MikeZ (2008-02-28 15:17:00) [5]Наверное, потому, что это Edit и ему WM_SETTEXT (или что там) надо делать...
MikeZ (2008-02-28 14:58:00) [6]"Да, не выходит, мастер, каменный цветок" :(
Значит, не везде этот способ работает - я его из свой программы выдрал, значит, всё же есть ситуации, где он прокатывает.
Leonid Troyanovsky (2008-02-28 13:56:00) [7]
> MikeZ (28.02.08 13:11) [5]
> Все аналогично. Почти :)
Ну, и попробуй послать, скажем, Ctrl+V в EDIT Notepad.
--
Regards, LVT.
MikeZ (2008-02-28 13:12:00) [8]Пардон:
begin
SendMessage(H, WM_KEYDOWN, VK_CONTROL, 0);
SendKey(H, Ord('P')); // <--------
SendMessage(H, WM_KEYUP, VK_CONTROL, 0);
end;
MikeZ (2008-02-28 13:11:00) [9]Все аналогично. Почти :)
Procedure SendKey(H: HWnd; Key: Byte);
Var
vKey, ScanCode, WParam : WORD;
LParam, ConvKey : LongInt;
Begin
ConvKey := OemKeyScan(Ord(Key));
ScanCode := ConvKey And $000000FF Or $FF00;
vKey := Key;
WParam := vKey;
LParam := LongInt(ScanCode) Shl 16;
SendMessage(H, WM_KEYDOWN, WParam, LParam);
SendMessage(H, WM_CHAR, WParam, LParam);
LParam := LParam Or $C0000000;
SendMessage(H, WM_KEYUP, WParam, LParam);
End;
begin
SendMessage(H, WM_KEYDOWN, VK_CONTROL, 0);
SendKey(H, 'P');
SendMessage(H, WM_KEYUP, VK_CONTROL, 0);
end;
Leonid Troyanovsky (2008-02-28 12:18:00) [10]
> Leonid Troyanovsky © (28.02.08 11:36) [3]
> См., например, как потрошить главное меню Notepad.
http://groups.google.com/group/fido7.ru.delphi/msg/925bebee0309bec9
--
Regards, LVT.
Leonid Troyanovsky (2008-02-28 11:36:00) [11]
> Grademax (28.02.08 10:48) [2]
> Проблема как раз в том, что фокус менять нельзя, даже кратковременно!
Попробуй найти WM_COMMAND, соответствующее этому акселератору.
См., например, как потрошить главное меню Notepad.
--
Regards, LVT.
Grademax (2008-02-28 10:48:00) [12]Проблема как раз в том, что фокус менять нельзя, даже кратковременно!
Rouse_ (2008-02-27 09:48:00) [13]Через keybd_event пробуй... Только окно активным сделать не забудь.