Форум: "WinAPI";
Текущий архив: 2009.01.18;
Скачать: [xml.tar.bz2];
ВнизКак в чужом окне нажать комбинацию Ctrl-P Найти похожие ветки
← →
Grademax (2008-02-26 06:14) [0]Существует чужое окно. Необходимо из своего приложения нажать в чужом окне комбинацию Ctrl-P. Пробовал через PostMessage, но как сообщить параметру "Кеу" что нажата именно комбинация (Ctrl-P) я не знаю.
Key:=Byte("P"); {??? Куда Ctrl привязать ???}
PostMessage(Handle, WM_KEYDOWN, Key, 0);
← →
Rouse_ © (2008-02-27 09:48) [1]Через keybd_event пробуй... Только окно активным сделать не забудь.
← →
Grademax (2008-02-28 10:48) [2]Проблема как раз в том, что фокус менять нельзя, даже кратковременно!
← →
Leonid Troyanovsky © (2008-02-28 11:36) [3]
> Grademax (28.02.08 10:48) [2]
> Проблема как раз в том, что фокус менять нельзя, даже кратковременно!
Попробуй найти WM_COMMAND, соответствующее этому акселератору.
См., например, как потрошить главное меню Notepad.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-02-28 12:18) [4]
> Leonid Troyanovsky © (28.02.08 11:36) [3]
> См., например, как потрошить главное меню Notepad.
http://groups.google.com/group/fido7.ru.delphi/msg/925bebee0309bec9
--
Regards, LVT.
← →
MikeZ (2008-02-28 13:11) [5]Все аналогично. Почти :)
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;
← →
MikeZ (2008-02-28 13:12) [6]Пардон:
begin
SendMessage(H, WM_KEYDOWN, VK_CONTROL, 0);
SendKey(H, Ord("P")); // <--------
SendMessage(H, WM_KEYUP, VK_CONTROL, 0);
end;
← →
Leonid Troyanovsky © (2008-02-28 13:56) [7]
> MikeZ (28.02.08 13:11) [5]
> Все аналогично. Почти :)
Ну, и попробуй послать, скажем, Ctrl+V в EDIT Notepad.
--
Regards, LVT.
← →
MikeZ (2008-02-28 14:58) [8]"Да, не выходит, мастер, каменный цветок" :(
Значит, не везде этот способ работает - я его из свой программы выдрал, значит, всё же есть ситуации, где он прокатывает.
← →
MikeZ (2008-02-28 15:17) [9]Наверное, потому, что это Edit и ему WM_SETTEXT (или что там) надо делать...
← →
Leonid Troyanovsky © (2008-02-28 22:08) [10]
> MikeZ (28.02.08 15:17) [9]
> Наверное, потому, что это Edit и ему WM_SETTEXT (или что
> там) надо делать...
Если про EDIT, то сойдет даже SendMessage with WM_CHAR and ^C.
Но, для других нужен SendMessageW или еще что хужей.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-02-28 22:19) [11]
> Leonid Troyanovsky © (28.02.08 22:08) [10]
> сойдет даже SendMessage with WM_CHAR and ^C.
^V, sorry.
--
Regards, LVT.
← →
MikeZ (2008-02-28 22:38) [12]Ну, SendKey таки работает. Но вот Control - не получается.
← →
Leonid Troyanovsky © (2008-02-29 16:02) [13]
> 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.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.01.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c