Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2014, 02:09   #1
SPLER
Пользователь
 
Регистрация: 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 не доходят до процесса, как это исправить?
SPLER вне форума Ответить с цитированием
Старый 15.02.2014, 14:59   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...попробуйте отсылать с ожиданием, не через PostMessage(), а через SendMessage().
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 15.02.2014, 21:28   #3
SPLER
Пользователь
 
Регистрация: 15.02.2014
Сообщений: 53
По умолчанию

Неа, к сожелению, SendMessage и вовсе не доходит до процесса..
SPLER вне форума Ответить с цитированием
Старый 15.02.2014, 22:53   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Не надо ля-ля. Они эквивалентны лишь с одним отличием, озвученным выше.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.02.2014, 01:04   #5
SPLER
Пользователь
 
Регистрация: 15.02.2014
Сообщений: 53
По умолчанию

что значит не надо ляля?) лог Spy++, PostMessage есть лог, SendMessage его нет. вот и все ля ля.
SPLER вне форума Ответить с цитированием
Старый 16.02.2014, 01:20   #6
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Пожалуйста простите меня за то, что я вмешиваюсь.
Все необходимые параметры для SendMessage заданы корректно? Под какими правами работают оба процесса?
В помощь:
Не отправляется сообщение окну SendMessage (winApi)
SendMessage function
Streletz вне форума Ответить с цитированием
Старый 16.02.2014, 01:43   #7
SPLER
Пользователь
 
Регистрация: 15.02.2014
Сообщений: 53
По умолчанию

Да нет, моя нелепейшая ошибка была, не с того длл импортнул. Поэтому приношу искренние извенения - raxp. Но сути не изменило, сообщения доходят до процесса, но он их отвергает, точнее если смотреть через spy++, сообщение посылается якобы без параметров, с припиской "вернуть". Параметры верные, ну как верные, lParam копия с лога реального нажатия, так же пробывал выставить 0. Итоги на скринах. и
SPLER вне форума Ответить с цитированием
Старый 16.02.2014, 01:57   #8
SPLER
Пользователь
 
Регистрация: 15.02.2014
Сообщений: 53
По умолчанию

И вот что произходит при реальном нажатии.



Но забивая эти значения, и посылая через PostMessage, такого же результата не получается. Причем если в сообщение с WM_KEYUP вписать такое же значение с WM_KEYUP которое получается при реальном нажатии, то это сообщение и вовсе не дойдет до процесса.

Повторюсь, слал как в активное так и в неактивное окно. keybd_event справляется идеально, но как его послать в неактивное окно, не знаю, ровно так же, как и реально ли это вообще.

Последний раз редактировалось SPLER; 16.02.2014 в 02:02. Причина: Дополнение
SPLER вне форума Ответить с цитированием
Старый 16.02.2014, 11:41   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

http://programmersforum.ru/showpost....95&postcount=6

Обратите внимание, что вообще означает последний параметр в данных функциях в определенных задачах. Можете для разнообразия почитать MSDN.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.02.2014, 13:55   #10
SPLER
Пользователь
 
Регистрация: 15.02.2014
Сообщений: 53
По умолчанию

С мышью понятно, с клавиатурой не понятно, с мышью работает, с клавиатурой нет. Единственное почему происходит кик, это то, что я шлю 0хС03В0001, что при реальном нажатии и вызывает Repeat: 1, Up: 1. (Log Spy++), если же слать 0, или 0х003В0001 к примеру, то все доходит прекрасно. Но Repeat: 0, Up: 0, и через пару повторных пасылов, кик. Может проблема очевидна, но все равно не могу ни как осилить.
SPLER вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как блокировать перехват клавиш в неактивном окне? 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