|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.02.2014, 02:09 | #1 |
Пользователь
Регистрация: 15.02.2014
Сообщений: 53
|
Нажатие клавиш в неактивном окне
Hello, ребят, нуждаюсь в совете. Суть вопроса в заголовке, но нуждаюсь в уточнении.
Есть процесс, в который нужно послать сообщение о нажатии клавиши. Окно процесса не активно. Делаю это при помощи PostMessage. Но проблема в том, что 1 из сообщений не доходит, в результате чего произходит краш процесса. Но не совсем в этом суть. При помощи Spy++, отследил нужные параметры для посыла. То есть, нажал клавишу физически, скопировал параметры, и посылаю через PostMessage, выглядит так: PostMessage(hWindow, WM_KEYDOWN, (IntPtr)Keys.F2, (IntPtr)0x003C0001); PostMessage(hWindow, WM_KEYUP, (IntPtr)Keys.F2, (IntPtr)0xC03C0001); Чуть пояснений, хотя и так все ясно: hWindow - хендл, const int WM_KEYDOWN = 0x0100, const int WM_KEYUP = 0x0101. Первое сообщение с KEYDOWN проходит чудесно, но следующее не приходит вообще (логи Spy++). Слал как в активное, так и в неактивное окно. Сути не меняло. Пробавал так же keybd_event, уже просто в активное окно, так же как и при физическом нажатии, все прекрасно, и доходят 2 сообщения. Так вот вопрос, что я делаю не так, что у меня одно из сообщений PostMessage, повторюсь, а именно сообщение с KEYUP не доходят до процесса, как это исправить? |
15.02.2014, 14:59 | #2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...попробуйте отсылать с ожиданием, не через PostMessage(), а через SendMessage().
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
15.02.2014, 21:28 | #3 |
Пользователь
Регистрация: 15.02.2014
Сообщений: 53
|
Неа, к сожелению, SendMessage и вовсе не доходит до процесса..
|
15.02.2014, 22:53 | #4 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Не надо ля-ля. Они эквивалентны лишь с одним отличием, озвученным выше.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
16.02.2014, 01:04 | #5 |
Пользователь
Регистрация: 15.02.2014
Сообщений: 53
|
что значит не надо ляля?) лог Spy++, PostMessage есть лог, SendMessage его нет. вот и все ля ля.
|
16.02.2014, 01:20 | #6 |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Пожалуйста простите меня за то, что я вмешиваюсь.
Все необходимые параметры для SendMessage заданы корректно? Под какими правами работают оба процесса? В помощь: Не отправляется сообщение окну SendMessage (winApi) SendMessage function |
16.02.2014, 01:43 | #7 |
Пользователь
Регистрация: 15.02.2014
Сообщений: 53
|
Да нет, моя нелепейшая ошибка была, не с того длл импортнул. Поэтому приношу искренние извенения - raxp. Но сути не изменило, сообщения доходят до процесса, но он их отвергает, точнее если смотреть через spy++, сообщение посылается якобы без параметров, с припиской "вернуть". Параметры верные, ну как верные, lParam копия с лога реального нажатия, так же пробывал выставить 0. Итоги на скринах. и
|
16.02.2014, 01:57 | #8 |
Пользователь
Регистрация: 15.02.2014
Сообщений: 53
|
И вот что произходит при реальном нажатии.
Но забивая эти значения, и посылая через PostMessage, такого же результата не получается. Причем если в сообщение с WM_KEYUP вписать такое же значение с WM_KEYUP которое получается при реальном нажатии, то это сообщение и вовсе не дойдет до процесса. Повторюсь, слал как в активное так и в неактивное окно. keybd_event справляется идеально, но как его послать в неактивное окно, не знаю, ровно так же, как и реально ли это вообще. Последний раз редактировалось SPLER; 16.02.2014 в 02:02. Причина: Дополнение |
16.02.2014, 11:41 | #9 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
http://programmersforum.ru/showpost....95&postcount=6
Обратите внимание, что вообще означает последний параметр в данных функциях в определенных задачах. Можете для разнообразия почитать MSDN.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
16.02.2014, 13:55 | #10 |
Пользователь
Регистрация: 15.02.2014
Сообщений: 53
|
С мышью понятно, с клавиатурой не понятно, с мышью работает, с клавиатурой нет. Единственное почему происходит кик, это то, что я шлю 0хС03В0001, что при реальном нажатии и вызывает Repeat: 1, Up: 1. (Log Spy++), если же слать 0, или 0х003В0001 к примеру, то все доходит прекрасно. Но Repeat: 0, Up: 0, и через пару повторных пасылов, кик. Может проблема очевидна, но все равно не могу ни как осилить.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как блокировать перехват клавиш в неактивном окне? | Pamparam | Общие вопросы Delphi | 15 | 14.01.2012 22:32 |
Нажатие комбинации клавиш в неактивном окне. | viruss | Общие вопросы Delphi | 4 | 17.01.2011 19:58 |
Эмуляция клавиш в неактивном окне | Аникейка | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 17.11.2010 09:21 |
Нажатие мыши в неактивном окне? | sanchopansa | Общие вопросы Delphi | 3 | 16.07.2008 08:18 |
сделать нажатие клавиш, в неактивном приложении | Димарик | Общие вопросы Delphi | 1 | 22.06.2007 22:48 |