![]() |
Показать все 36 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- эмуляция нажатия (https://hlfx.ru/forum/showthread.php?threadid=2049)
эмуляция нажатия
Прошу помощи с написанием мини программки, которая отслеживала бы состояние определенной кнопки (нажата/не нажата) и эмулировала бы нажатия этой кнопки энное количество раз пока нажата сама кнопка.. как только кнопка отпускается, цикл останавливается..
Проблема еще и в том, чтобы кнопка "нажималась" даже если кроме нее нажато что то еще..
BioHazard проведи простой эксперимент. Поставь курсор в форму быстрого ответа, нажми, скажем, кнопку "пробел" и не отпускай. В нее начнут ставиться пробелы. Как только кнопка отпускается, цикл останавливается.
То есть, это как бе уже есть в Винде...
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
дело в том, что это нужно реализовать в одной игре... Доступа к сорцам нету, а зажав пробел прыгнет он там всего 1 раз =| поэтому и хочу прибегнуть к помощи извне..
BioHazard ну так ты запоминай што пробел зажат и генерь оттуда хаатычные импульсы, пока кнопку не отпустят. Делов-то.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
т.е. весь код это 6-7 строк условие+цикл? оке, стартуем
BioHazard цыкл общий юзай
додумался блин.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Есть программа AutoHotkey для этих дел
BioHazard я тебя научу.
Заведи массив для всех кнопок и храни там их состояние.
Допстим пришел импульс на то что кнопка G нажата.
пишешь в массив труе напротив G.
В общем цикле проверяешь нажатые кнопки и генеришь для них импульсы с определенной переодичностью. Тебе понадобится еще массив для хранения времени, прошедшего с момента нажатия кнопки.
Как только кнопка отжимается - приходит импульс, обнуляешь состояние конкретной кнопки. Тривиальная задачка, работы на час.
И то больше времени на создание нового проекта уйдет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ну с этим понятно, мне бы сначала узнать как в винде состояние кнопки узнать и как ее передавать в любое активное окно..
GetAsyncKeyState
SendMessage(WM_KEYDOWN)
SendMessage(WM_CHAR)
SendMessage(WM_KEYUP)
__________________
:>>> спасибо :>
с горем пополам разобрался с винапи, скомпилил, но вот мессагу в окно он упорно не хочет отправлять..
да и сам цикл по нажатии не начинается, а наоборот завершает процесс.. Если поменять местами true и false то наоборот, сразу с запуска начинается цикл, но стоит нажать кнопку он остановится =\
хотелось бы еще узнать о чтении флажков в командной строке, типа bhop.exe -shift -50... Без "-" то знаю что через argv[], но значения их него все равно в просто не сохранить в качестве переменной..
1 | #include "stdafx.h" |
2 | #include "fstream.h" |
3 | #include "windows.h" |
4 | void bhop(void) |
5 | { |
6 | SendMessage(GetForegroundWindow(), WM_KEYDOWN, VK_SPACE, NULL); |
7 | SendMessage(GetForegroundWindow(), WM_CHAR, VK_SPACE, NULL); |
8 | SendMessage(GetForegroundWindow(), WM_KEYUP, VK_SPACE, NULL); |
9 | } |
10 |
11 | void main() |
12 | { |
13 | do |
14 | { |
15 | while(GetAsyncKeyState(VK_SPACE) == true) |
16 | bhop(); |
17 | } |
18 | while(GetAsyncKeyState(VK_SPACE) == false); |
19 | } |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
а разве он что то не правильно сказал? я полистал немного, вроде бы действительно можно отправлять мессагу в окно, через SendMessage или PostMessage .. Тут уже я чото налепил, не люблю винапи :S Прошу уж подсказать как тут быть..
BioHazard выкинь среднюю мессагу нафиг. Не нужна она.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
убрал, но я не понимаю почему процесс завершается как только я нажму на нужную кнопку
Вместо мессаг ставил просто cout, дабы посмотреть как оно там работает, оказывается проблема в самом цикле.. Хотя даже наверное не в самом цикле, а в GetAsyncKeyState(VK_SPACE).. То ли я не правильно что то указал, то ли она не хочет возвращать false что конечно маловероятно..
BioHazard да ты посмотри как в квейке устроено
Там маленький цикл, который считывает все пришедшие мессаги.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
да цикл у тебя организован неправильно, что тут думать?
надо его сделать бесконечным, и прерывать только при нажатии другой клавиши, скажем, еск.
__________________
У меня такое ощущние - наугад как ночью по тайге.
Человек задает совершенно посторонние вопросы, мы ему даем совершенно посторонние ответы, а в конце он напишет - спасибо все получилось. Вот и думай что это было.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Главное, чтобы у автора получилось.
__________________
тык я спасибо написал за то что сказали куда копать..
А по делу - делов то, подправить цикл и разобраться с мессагами
ну помогите хотябы с отправкой мессаги
BioHazard да ты хотябы код покажы. Только не в теге, а вложением, блин.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
к стати, это правда, что GetAsyncKeyState() можно использовать только в win32 оконном приложении?Я же делал консольным, поэтому наверное и не получалось, т.к. точка входа там через WinMain().. В общем тут я вообще не знаю поэтому прошу подправить если что..
------------------------------------------
еще хотелось бы спросить, как считывать параметры запуска программы? например bhop.exe -space ?
Пробовал через char argv[], но передать параметры в GetAsyncKeyState() из нее у меня не получалось =/
BioHazard это не код, а гамно какое-то. Тут все переделывать надо.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
не спорю. вот и прошу помощи..
Со считыванием состояния кнопки разобрался. Остался вопрос с отправкой мессаги в окно.. Мессага в окно не отправляется вообще =(
Во-первых, посмотри внимально МСДН. Я смотрю, ты лихо поставил четвертый параметр в 0 в обоих вызовах.
Во-вторых, вот почитай:
__________________
так получается, не получится передать сообщение в игровое окно пока там не будет ожидаться ввода?
lParam: Longint что можно передать в этом параметре?
вообще запутался
можно ли как нибудь не используя SendMessage сэмулировать нажатие?
Добавлено 14-01-2010 в 21:21:
кстати, если сообщение не было отправлено, то функция должна вернуть 0?
BioHazard да идиж ты msdn читай. Он уже давно на русском.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
тут я уже бессилен.. мессага спокойно передается с помощью keybd_event в игру в консоль, а вот выйдя из консоли прыгать он отказывается =/ ну что мне еще сделать уффф...
BioHazard сделай бочку
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Чуть позже напишу как сделать
__________________
Сайт поддержки кодеров на AMX Mod X
хех, спасибо :>
Временная зона GMT. Текущее время 12:49. | Показать все 36 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024