Вниз
Скачать: CL | DM;

послать Ctrl+S в другое приложение   Найти похожие ветки 

← →
laronov   (2006-09-25 12:37) [0]

Как послать Ctrl+S в другое приложение?
Пытаюсь послать
PostMessage(<хендл окна>, WM_KEYDOWN, VK_F4, Ord("S"))
но не получается....


← →
clickmaker ©   (2006-09-25 12:42) [1]

а причем тут VK_F4?
и если уж на то пошло надо слать и нажатие и отпускание


← →
laronov   (2006-09-25 12:43) [2]

не внимателен....

PostMessage(wnd, WM_KEYDOWN, VK_CTRL,0);

так вообще ругается на VK_CTRL


← →
laronov   (2006-09-25 12:49) [3]

вернее вот так :)
PostMessage(wnd, WM_KEYDOWN, VK_CONTROL, Ord("S"));
не ругается но и не срабатывает...
при этом, когда надо было нажать F4
PostMessage(wnd, WM_KEYDOWN, VK_F4, 0);
срабатывало....


← →
clickmaker ©   (2006-09-25 12:53) [4]


> [3] laronov   (25.09.06 12:49)

SetKeyboardState();


← →
laronov   (2006-09-25 13:01) [5]


> clickmaker ©   (25.09.06 12:53) [4]

на сколько я понимаю, я не смогу передать потом это сочитание клавиш в др окно...?


← →
clickmaker ©   (2006-09-25 13:20) [6]

можно еще keybd_event()


← →
MacroDenS ©   (2006-09-25 14:16) [7]

А если попробовать:


PostMessage(wnd, WM_KEYDOWN, VK_CONTROL+Ord("S"), 0);
PostMessage(wnd, WM_KEYUP, VK_CONTROL+Ord("S"), 0);


← →
laronov   (2006-09-25 14:26) [8]


> clickmaker ©   (25.09.06 13:20) [6]

там так же негде указать хендл окна, и соответственно это нажатие не будет передано...


> MacroDenS ©   (25.09.06 14:16) [7]

не срабатывает... :(

так
PostMessage(wnd, WM_KEYDOWN, VK_CONTROL, 0);
PostMessage(wnd, WM_KEYDOWN, ord("S"), 0);
PostMessage(wnd, WM_KEYUP, ord("S"), 0);
PostMessage(wnd, WM_KEYUP, VK_CONTROL, 0);

тоже не сработало...


← →
clickmaker ©   (2006-09-25 14:51) [9]

H := FindWindow("Notepad", nil);
 if (H <> 0) then begin
   ThreadId := GetWindowThreadProcessId(H, nil);
   AttachThreadInput(GetCurrentThreadId(), ThreadId, True);
   GetKeyboardState(KS);
   KS[VK_CONTROL] := $80;
   SetKeyboardState(KS);
   PostMessage(H, WM_KEYDOWN, 83, 0);
   PostMessage(H, WM_KEYUP, 83, 0);
   Sleep(1000);
   KS[VK_CONTROL] := 0;
   SetKeyboardState(KS);
   AttachThreadInput(GetCurrentThreadId(), ThreadId, False);
 end;


← →
laronov   (2006-09-25 15:14) [10]


> clickmaker ©   (25.09.06 14:51) [9]

Заработало! Большое спасибо!
только я не совсем понял что занчит
KS[VK_CONTROL] := $80;
и что значит код 83. который мы посылаем....


← →
clickmaker ©   (2006-09-25 15:21) [11]


>  [10] laronov   (25.09.06 15:14)

KS[VK_CONTROL] := $80; - состояние клавиши ctrl нажатое (старший бит взведен)
83 = "S"


← →
laronov   (2006-09-25 16:27) [12]

спасибо!



Страницы: 1 вся ветка

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



Память: 0.47 MB
Время: 0.034 c
15-1158812778
palva
2006-09-21 08:26
2006.10.15
Электронные книги.


11-1131834249
qazwsx
2005-11-13 01:24
2006.10.15
ошибка в..


2-1159346762
Aleks
2006-09-27 12:46
2006.10.15
Как из программы открыть окно проводника с выделенным,нужным файл


15-1158816466
Ega23
2006-09-21 09:27
2006.10.15
С Днём рождения! 21 сентября


15-1156970785
Джо
2006-08-31 00:46
2006.10.15
Kiyiv Mastak Party




   Наверх