Сейчас на форуме: tyns777 (+4 невидимых) |
eXeL@B —› Программирование —› Как послать WM_KEYDOWN неактивному окну? |
Посл.ответ | Сообщение |
|
Создано: 24 сентября 2010 20:34 · Личное сообщение · #1 Есть программа, которой я хочу управлять через WM_KEYDOWN и WM_KEYUP, но окно программы должно быть неактивным, чтобы отсылаемые мной проге нажатия клавиш ни с чем не конфликтовали и не мешали моей работе за компом. По идее можно было бы отсылать этой программе эти сообщения через postmessage и не париться, но в прогу вшита защита, которая блокирует эти сообщения. Вырезать/обходить из кода проги эту защиту - не вариант. Получается посылать окну проги нажатия клавиш через keyb_event, но это работает только если окно проги в фокусе, а нужно посылать нажатия клавиш именно неактивному окну. Можно в принципе реализовать все это с помощью vmware и не париться, свернув окно виртуальной машины. Но хочеться это как-то реализовать в реальной системе. Какие есть варианты? Может какой драйвер виртуальной клавы написать или еще чего? |
|
Создано: 24 сентября 2010 21:11 · Поправил: SergX · Личное сообщение · #2 |
|
Создано: 25 сентября 2010 02:04 · Личное сообщение · #3 |
|
Создано: 25 сентября 2010 08:04 · Личное сообщение · #4 |
|
Создано: 25 сентября 2010 22:16 · Личное сообщение · #5 |
|
Создано: 25 сентября 2010 22:27 · Личное сообщение · #6 |
|
Создано: 25 сентября 2010 22:54 · Поправил: DenCoder · Личное сообщение · #7 SetWindowLong будет только в контексте процесса работать. Поэтому если по этому пути идти, то инжектить надо. Потом, без знания принципов оригинальной оконной процедуры ничего не выйдет. И кроме того, некоторые творения любят каждый раз восстанавливать оригинальный обработчик той же SetWindowLong, поэтому его надо сплайсить для верности... Реверс, реверс и еще раз реверс подскажет вам правильный путь, господа! ______________________________________________________________________ _______________ В обход двойной проверки (1-ый раз в user-mode, 2-ой в kernel-mode - NtUserSetWindowLong) только если умудриться вызвать неэкспортируемую xxxSetWindowLong, но и хендл окна должен быть преобразован и критическая секция соблюдена во избежание бсода... И это тоже даст ERROR_ACCESS_DENIED ----- IZ.RU |
|
Создано: 26 сентября 2010 15:25 · Поправил: HiEndsoft · Личное сообщение · #8 |
|
Создано: 26 сентября 2010 16:26 · Поправил: DenCoder · Личное сообщение · #9 HiEndsoft, что именно Вы сочли чуш(ь)ю? Вы хотите сказать, что из другого процесса Вы сможете вызвать SetWindowLong, передавая хендл окна потока, принадлежащего другому процессу, и установите таким образом новый обработчик? - Вот это чушь!!! И не вводите в заблуждение остальных. Ничего личного, старое давно забыто, но если не согласны - аргументируйте свой ответ, хватит уже неадекватность в такой мере проявлять! P.S. До меня дошло, что имелось ввиду под "глобальным хуком" - SetWindowsHookEx. HiEndsoft, ну хоть бы вместо "|" написали "&", а то ассоцируется с оператором описания использования консольных команд... ----- IZ.RU |
|
Создано: 28 сентября 2010 15:20 · Личное сообщение · #10 У меня когда то была подобная проблема, защита обходилась перемещением окна, вот так делал Code:
----- Yann Tiersen best and do not fuck |
eXeL@B —› Программирование —› Как послать WM_KEYDOWN неактивному окну? |