| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > AutoFire |
| Автор: p0s0l 27.7.2003, 14:41 |
| В одной гаме надо часто нажимать пробел (раза 3-4 в секунду), меня это задолбало. Поэтому я хотел написать прогу, имитурующую нажатие пробела. Вот процедура таймера: hnd := GetForegroundWindow; PostMessage (hnd, WM_KEYDOWN, 32, $390001); PostMessage (hnd, WM_KEYUP, 32, $C0390001); И ничего не делается. WM_CHAR генерится автоматически. В чем дело ? Еще чето надо делать ? |
| Автор: stab 27.7.2003, 16:03 |
| игра наверно ипользует GetAsyncKeyState или GetKeyboardState или что-то подобное, попробуй SetKeyboardState или keybd_event, т.к. сообщения не устанавливают состояния клавиш... |
| Автор: p0s0l 27.7.2003, 18:23 |
| Да вообще, даже не игра, вообще ничо на это не реагирует. Даже Дельфи, и сама прога тоже.... Сообщения приходят, я смотрел, но почему-то ничего не происходит. Я вытащил на форму TEdit, туда поставил курсор - и нифига... |
| Автор: stab 27.7.2003, 18:26 |
| может sndkey32.pas тебе поможет..., на компакте с дельфями поищи в папке Extras кажется |
| Автор: <Spawn> 28.7.2003, 05:48 | ||
|
| Автор: p0s0l 28.7.2003, 12:52 |
| cully, спасибо за подсказку с sndkey32! Я понял свою ошибку. sndkey32 работает через keybd_event, а не через сообщения. А keybd_event посылает WM_KEYDOWN и WM_KEYUP текущему элементу активного окна, имеющему фокус (по-моему, узнать хендл этого окна сложно). А я посылал сообщения окну GetForegroundWindow - эта функция возвращает хэндл просто активного окна (формы), а не его дочернего окна, имеющего фокус. Сейчас всё работает с помощью sndkey32.pas, но только не в той гаме... |
| Автор: Гость_cully 28.7.2003, 13:38 |
| в sndkey32 есть еще AppActivate. Перед тем как посылать нажатия надо сделать AppActivate('Заголовок нужного окна'); |
| Автор: <Spawn> 28.7.2003, 14:25 | ||
Попробуй так (По крайней мере у меня сработало)
|
| Автор: p0s0l 28.7.2003, 19:00 |
| Ну сейчас в обычных приложениях работает и с помощью SendKeys и с помощью PostMessage. Только вот в гаме-то не работает, видимо как сказал cully там работают через GetAsyncKeyState. Так наверное уже не обмануть гаму... |
| Автор: stab 29.7.2003, 00:08 |
| p0s0l может кинишь гаму, я пороюсь может что-нить нарою... или она здоровая больно? |
| Автор: p0s0l 29.7.2003, 01:57 |
| cully - я тебе закинул, правда не знаю, получишь ли ты - у меня тут чо-то с мылом... Еще: в той гаме можно и мышью стрелять, тоже пробовал с помощью PostMessage вроде WM_LMOUSEBUTTON - только никакой реакции. Если с клавой облом может быть из-за юзанья GetAsyncKeyState, то из-за чего может быть облом с мышью ? |
| Автор: stab 29.7.2003, 15:00 |
| p0s0l, игра Direct Input использует, а он вроде почти на прямую общается с клавой и мышой, короче надо думать... |
| Автор: stab 29.7.2003, 15:01 |
| з.ы. p0s0l, ты не в курсе зачем это игра сокеты юсает? троян там походу какой-то или она в инет куда-то лазит. |
| Автор: p0s0l 29.7.2003, 17:21 |
| сокеты - свои результаты можно кидать в инет. DirectInput - значит облом, хотя игра то примитивнейшая... ладно уж, буду палец тренировать... Спасиб за советы! |