powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Посоветуйте, что можно сделать (scroll)
12 сообщений из 12, страница 1 из 1
Посоветуйте, что можно сделать (scroll)
    #39732149
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть игра, в которой нужно крутить скролл.
Мне нужно сделать так, что если я прокрутил скролл, то программа автоматически прокрутила еще N количество раз.
Я сделал хук на скролл,и при его прокрутке хочу послать сообщение в окно игры, с повтором прокрутки.
Пробовал
Код: pascal
1.
 Mouse_Event(MOUSEEVENTF_WHEEL, 0, 0, 120, 0);


Но при прокрутки колеса, программа зависает намертво. Я думаю из-за того, что хук отлавливает как ручную прокрутку, так и Mouse_Event , и повторяет его бесконечно. По этому нужно что-то другое...
Есть какие-то варианты у вас, как можно это сделать?

Проще говоря, мне нужно иметь возможность удвоить или утроить прокрутку. Что бы в игре, 1 тик колеса мыши, ровнялся двум-трём и более. Прокрутил скролл, хук это понял и добавил еще 2-3-4 прокрута.
Надеюсь внятно объяснил))
...
Рейтинг: 0 / 0
Посоветуйте, что можно сделать (scroll)
    #39732222
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Tech N9neЕсть игра, в которой нужно крутить скролл.
Мне нужно сделать так, что если я прокрутил скролл, то программа автоматически прокрутила еще N количество раз.
Я сделал хук на скролл,и при его прокрутке хочу послать сообщение в окно игры, с повтором прокрутки.
Пробовал
Код: pascal
1.
 Mouse_Event(MOUSEEVENTF_WHEEL, 0, 0, 120, 0);



Но при прокрутки колеса, программа зависает намертво. Я думаю из-за того, что хук отлавливает как ручную прокрутку, так и Mouse_Event , и повторяет его бесконечно. По этому нужно что-то другое...
Есть какие-то варианты у вас, как можно это сделать?

Проще говоря, мне нужно иметь возможность удвоить или утроить прокрутку. Что бы в игре, 1 тик колеса мыши, ровнялся двум-трём и более. Прокрутил скролл, хук это понял и добавил еще 2-3-4 прокрута.
Надеюсь внятно объяснил))

так для этого не надо мышку имитировать.
достаточно отловить один раз "прокрутку", а потом хоть по таймеру несколько раз повторить то действие,
которое у тебя заложено в "прокрутку"
...
Рейтинг: 0 / 0
Посоветуйте, что можно сделать (scroll)
    #39732243
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorтак для этого не надо мышку имитировать.
достаточно отловить один раз "прокрутку", а потом хоть по таймеру несколько раз повторить то действие,
которое у тебя заложено в "прокрутку"
Я так понимаю, что "вертит" он чужую программу.

По теме: можно попробовать реализовать флаг, что-то типа: Emulated: Boolean; (или через Event'ы, там же вроде может быть параллельная обработка?..) и в хуке делать что-то вроде:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
if not Emulated then 
try
  Emulated := True;
  { тут эмулируем прокрутку сколько надо раз }
finally
  Emulated := False;
end;
...
Рейтинг: 0 / 0
Посоветуйте, что можно сделать (scroll)
    #39732266
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что счетчика хватит. По событию возводить его в 3 и пока не уменьшиться до 0 - не обрабатывать события скрола.
...
Рейтинг: 0 / 0
Посоветуйте, что можно сделать (scroll)
    #39732271
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanДумаю, что счетчика хватит. По событию возводить его в 3 и пока не уменьшиться до 0 - не обрабатывать события скрола.
Хотя нет... Наверное, можно использовать dwExtraInfo для определения, что событие "своё".
...
Рейтинг: 0 / 0
Посоветуйте, что можно сделать (scroll)
    #39732305
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpdefecatorтак для этого не надо мышку имитировать.
достаточно отловить один раз "прокрутку", а потом хоть по таймеру несколько раз повторить то действие,
которое у тебя заложено в "прокрутку"
Я так понимаю, что "вертит" он чужую программу.

По теме: можно попробовать реализовать флаг, что-то типа: Emulated: Boolean; (или через Event'ы, там же вроде может быть параллельная обработка?..) и в хуке делать что-то вроде:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
if not Emulated then 
try
  Emulated := True;
  { тут эмулируем прокрутку сколько надо раз }
finally
  Emulated := False;
end;


Всё ровно залипает.. Если перевести фокус на браузер, всегда крутит вверх.
Так как я покрутил скрол, хук начал делать своё действие, то-есть имитировать скролл... и потом он(хук) своё же действие(эмуляцию), принимает за действие пользователя и продолжает эмулировать.

defecator, забиндил на кнопку действие, которое происходит по событию скролла.
Пробовал keybd_event — но игра не реагирует.
Postmessage аналогично.
Только Sendmessage работает. Через него пытаюсь нажать клавишу клавы. Всё ок. Но если сделать несколько нажатий за раз, то в игре в этот момент лагает.
к примеру так
Код: pascal
1.
2.
3.
       SendMessage(CS, WM_KEYDOWN ,VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
       SendMessage(CS, WM_KEYUP ,VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
Sleep(10);
...
Рейтинг: 0 / 0
Посоветуйте, что можно сделать (scroll)
    #39732418
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9neВсё ровно залипает.. Если перевести фокус на браузер, всегда крутит вверх.
Так как я покрутил скрол, хук начал делать своё действие, то-есть имитировать скролл... и потом он(хук) своё же действие(эмуляцию), принимает за действие пользователя и продолжает эмулировать.
Так там как раз и смысл был в том, что флаг показывает - внешнее это действие или эмулированное. Надо просто найти как сделать, чтобы значение флага сохранялось между вызовами хука. Поэтому я и предполагал что, возможно, вместо переменной стоит использовать mutex (наверное он тут лучше подходит, чем event).
...
Рейтинг: 0 / 0
Посоветуйте, что можно сделать (scroll)
    #39732547
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpTech N9neВсё ровно залипает.. Если перевести фокус на браузер, всегда крутит вверх.
Так как я покрутил скрол, хук начал делать своё действие, то-есть имитировать скролл... и потом он(хук) своё же действие(эмуляцию), принимает за действие пользователя и продолжает эмулировать.
Так там как раз и смысл был в том, что флаг показывает - внешнее это действие или эмулированное. Надо просто найти как сделать, чтобы значение флага сохранялось между вызовами хука. Поэтому я и предполагал что, возможно, вместо переменной стоит использовать mutex (наверное он тут лучше подходит, чем event).
я полный дилетант...)
не мог бы ты чутка разжевать ?))
...
Рейтинг: 0 / 0
Посоветуйте, что можно сделать (scroll)
    #39732848
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Код: pascal
1.
2.
3.
4.
5.
6.
7.
if not Emulated then 
try
  Emulated := True;
  { тут эмулируем прокрутку сколько надо раз }
finally
  Emulated := False;
end;
...
Рейтинг: 0 / 0
Посоветуйте, что можно сделать (scroll)
    #39732863
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9neя полный дилетант...)
не мог бы ты чутка разжевать ?))

Могу только посоветовать почитать документацию на функции CreateMutex(), OpenMutex() и ReleaseMutex(). Писать приложение с хуками только для примера мне лень, вот честно.
...
Рейтинг: 0 / 0
Посоветуйте, что можно сделать (scroll)
    #39732894
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpTech N9neя полный дилетант...)
не мог бы ты чутка разжевать ?))

Могу только посоветовать почитать документацию на функции CreateMutex(), OpenMutex() и ReleaseMutex(). Писать приложение с хуками только для примера мне лень, вот честно.
Ну для начала хватит)
отпишусь если будут сложности, спасибо.
...
Рейтинг: 0 / 0
Посоветуйте, что можно сделать (scroll)
    #39752477
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mouse_Event(MOUSEEVENTF_WHEEL, 0, 0, 120, 0);
Хм... 1 тик скролла, это 120, верно?
когда руками крутишь скролл, получается 120
я хуком отлавливаю 120, и дополнительно эмитирую 12 1
таким образом дополнительная прокрутка срабатывает, как в винде, так и в игре.

Мне нужно добиться максимально точной паузы, между дополнительными прокрутками.
Пример
крутанули скролл на 1 тик
пауза (мс)
эмуляция скролла
пауза (мс)
эмуляция скролла
пауза (мс)



для паузы я использую Slpeep();
но в игре тормозит, если ставить больше 15 мсек

собсно вопрос, как сделать, что бы паузы работали не тормозили игру?
подозреваю, что это из-за хука. Но паузу нужно реализовать..
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Посоветуйте, что можно сделать (scroll)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]