Главная страница
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.056 c
1-1157126393
Колобок
2006-09-01 19:59
2006.10.15
в теме кратко не изложить что надо)


6-1148280538
Тфьу
2006-05-22 10:48
2006.10.15
TIdSMTP при отсылке в теме пишет ерунду...


2-1159160368
ROOT
2006-09-25 08:59
2006.10.15
Как вставить изображение в чужую форму.


2-1159532700
zac
2006-09-29 16:25
2006.10.15
Зарисовка сегмента круга


15-1159082637
AntiUser
2006-09-24 11:23
2006.10.15
Форум по Oracle?