Главная страница
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.203 c
2-1159542353
NSD
2006-09-29 19:05
2006.10.15
Работа с реестром из ChekListBox


8-1142727130
ivane
2006-03-19 03:12
2006.10.15
Мультимедийные клавиши


10-1124370623
Lotus
2005-08-18 17:10
2006.10.15
Достучаться до текста в ячейке таблицы Ворда


15-1157982846
Desdechado
2006-09-11 17:54
2006.10.15
Смайлики в Миранде


2-1159273402
Stanislav
2006-09-26 16:23
2006.10.15
Рисовать в FastReport