Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: 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 вся ветка

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
2-1159188905
Crazy monkey
2006-09-25 16:55
2006.10.15
Курсы $ и евро.


2-1159355584
TakTak
2006-09-27 15:13
2006.10.15
вызов функции из DLL динамически.


2-1159273579
Alex_C
2006-09-26 16:26
2006.10.15
Как получить canvas элемента?


2-1159269540
iamdanil
2006-09-26 15:19
2006.10.15
Ещё два вопроса по мыши


15-1158931308
Megabyte
2006-09-22 17:21
2006.10.15
Firebird 2.0 и IB_Expert 2.5.0.22