Сейчас на форуме: tyns777 (+4 невидимых)

 eXeL@B —› Программирование —› Как послать WM_KEYDOWN неактивному окну?
Посл.ответ Сообщение

Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 24 сентября 2010 20:34
· Личное сообщение · #1

Есть программа, которой я хочу управлять через WM_KEYDOWN и WM_KEYUP, но окно программы должно быть неактивным, чтобы отсылаемые мной проге нажатия клавиш ни с чем не конфликтовали и не мешали моей работе за компом.

По идее можно было бы отсылать этой программе эти сообщения через postmessage и не париться, но в прогу вшита защита, которая блокирует эти сообщения. Вырезать/обходить из кода проги эту защиту - не вариант.

Получается посылать окну проги нажатия клавиш через keyb_event, но это работает только если окно проги в фокусе, а нужно посылать нажатия клавиш именно неактивному окну.

Можно в принципе реализовать все это с помощью vmware и не париться, свернув окно виртуальной машины. Но хочеться это как-то реализовать в реальной системе. Какие есть варианты? Может какой драйвер виртуальной клавы написать или еще чего?



Ранг: 226.0 (наставник), 67thx
Активность: 0.160
Статус: Участник

Создано: 24 сентября 2010 21:11 · Поправил: SergX
· Личное сообщение · #2

>>Может какой драйвер виртуальной клавы написать или еще чего?
Думаю лодырь с хуками тебе может помочь.



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 25 сентября 2010 02:04
· Личное сообщение · #3

Лодырь не обязателен, можно и без него глоб. хук поставить | SetWindowLong с подменой оконного обработчика

-----
продавец резиновых утёнков




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 25 сентября 2010 08:04
· Личное сообщение · #4

Опять видимо очередного кликерного бота под линейку/прифект ворлд мостырят..

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 25 сентября 2010 22:16
· Личное сообщение · #5

HiEndsoft пишет:
ен, можно и без него глоб. хук поставить | SetWindowLong с подменой оконного обработчика


А можно чуть подробнее?



Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 25 сентября 2010 22:27
· Личное сообщение · #6

sliderZ пишет:
SetWindowLong

www.google.com.ua/search?hl=ru&&sa=X&ei=yUyeTOeIHsvLswadsJjnDg&ved=0CCQQBSgA&q=%D1%81%D0%B0%D0%B1%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D0%BD%D0%B3&spell=1




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 25 сентября 2010 22:54 · Поправил: DenCoder
· Личное сообщение · #7

SetWindowLong будет только в контексте процесса работать. Поэтому если по этому пути идти, то инжектить надо. Потом, без знания принципов оригинальной оконной процедуры ничего не выйдет. И кроме того, некоторые творения любят каждый раз восстанавливать оригинальный обработчик той же SetWindowLong, поэтому его надо сплайсить для верности... Реверс, реверс и еще раз реверс подскажет вам правильный путь, господа!
______________________________________________________________________ _______________
В обход двойной проверки (1-ый раз в user-mode, 2-ой в kernel-mode - NtUserSetWindowLong) только если умудриться вызвать неэкспортируемую xxxSetWindowLong, но и хендл окна должен быть преобразован и критическая секция соблюдена во избежание бсода... И это тоже даст ERROR_ACCESS_DENIED

-----
IZ.RU




Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 26 сентября 2010 15:25 · Поправил: HiEndsoft
· Личное сообщение · #8

DenCoder
Чуш, вы бы еще про шадов написали

-----
продавец резиновых утёнков





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 26 сентября 2010 16:26 · Поправил: DenCoder
· Личное сообщение · #9

HiEndsoft, что именно Вы сочли чуш(ь)ю? Вы хотите сказать, что из другого процесса Вы сможете вызвать SetWindowLong, передавая хендл окна потока, принадлежащего другому процессу, и установите таким образом новый обработчик? - Вот это чушь!!! И не вводите в заблуждение остальных. Ничего личного, старое давно забыто, но если не согласны - аргументируйте свой ответ, хватит уже неадекватность в такой мере проявлять!

P.S. До меня дошло, что имелось ввиду под "глобальным хуком" - SetWindowsHookEx. HiEndsoft, ну хоть бы вместо "|" написали "&", а то ассоцируется с оператором описания использования консольных команд...

-----
IZ.RU





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 28 сентября 2010 15:20
· Личное сообщение · #10

У меня когда то была подобная проблема, защита обходилась перемещением окна, вот так делал

Code:
  1. hButton := FindWindowEx(hForm, 0, 'TButton','&Получить');
  2.   SendMessage(hButton, BM_CLICK, 0, 0);
  3.   // Хак, защита окна
  4.   SetWindowPos(hForm, 0, random(500), random(500), 0, 0, SWP_NOSIZE);


-----
Yann Tiersen best and do not fuck



 eXeL@B —› Программирование —› Как послать WM_KEYDOWN неактивному окну?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати