Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

послать Ctrl+S в другое приложение [D7, XP]


laronov ©   (2006-09-25 12:37:00) 

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


laronov   (2006-09-25 16:27:00) [1]

спасибо!


clickmaker   (2006-09-25 15:21:00) [2]


>  [10] laronov   (25.09.06 15:14)

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


laronov   (2006-09-25 15:14:00) [3]


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

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


clickmaker   (2006-09-25 14:51:00) [4]

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 14:26:00) [5]


> 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);

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


MacroDenS   (2006-09-25 14:16:00) [6]

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


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


clickmaker   (2006-09-25 13:20:00) [7]

можно еще keybd_event()


laronov   (2006-09-25 13:01:00) [8]


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

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


clickmaker   (2006-09-25 12:53:00) [9]


> [3] laronov   (25.09.06 12:49)

SetKeyboardState();


laronov   (2006-09-25 12:49:00) [10]

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


laronov   (2006-09-25 12:43:00) [11]

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

PostMessage(wnd, WM_KEYDOWN, VK_CTRL,0);

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


clickmaker   (2006-09-25 12:42:00) [12]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо