Автор Тема: Как сделать чтоб курсор не двигался во время скрипта.  (Прочитано 1796 раз)

0 Пользователей и 1 Гость просматривают эту тему.

EvilNoob

  • Зашел в гости
  • *
  • Сообщений: 9
    • Просмотр профиля
Народ пожалуйста подскажите как сделать так чтобы, когда я нажимаю на горячую клавишу (например е), чтоб виртуальная мышка двигалась(скрипт), а физическая(мышка который я двигаю) нет, это не столь важно но иногда сильно мешает в игровом процессе когда я сам же случайно сбиваю свой скрипт из-за лишних движений мышкой. Мне нужно что бы когда мой скрипт начинается я не мог не как взаимодействовать с ним и что бы он следовал указанием, а когда заканчивается мои полномочия вернулись и я снова смог двигать мышкой.(Надеюсь это возможно сделать)
« Последнее редактирование: Апрель 07, 2019, 02:35:35 pm от EvilNoob »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3685
  • Котэ
    • Просмотр профиля
Никак.

dramster

  • Герой форума
  • *****
  • Сообщений: 1093
    • Просмотр профиля
В библиотеке 'USER32.DLL' есть функция 'BlockInput'. Она блокирует мышь и клавиатуру. При этом, программно все работает. Блокировку можно отключить вручную сочетанием ctrl + alt + del.

Вызвать напрямую из кликермана не получится. Для использования пишем длл, где и вызываем нужную функцию.

Код длл делфи:
Код: Clickermann
  1. library cmann_plugin;
  2.  
  3. uses SysUtils, Winapi.Windows;
  4.  
  5. procedure BlockInput(fBlockIt : boolean); stdcall; external 'USER32.DLL';
  6. //------------------------------------------------------------------------------
  7. // Основное тело функции, идет на экспорт, вызывается из кликера
  8. function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;
  9. type
  10.  pIntArr = array[0..0] of Integer;
  11. var
  12.  block : Integer;
  13.  
  14. begin
  15.  
  16. block := pIntArr(_mas^)[0];
  17.  
  18. if block = 0 then BlockInput(False) else BlockInput(True);
  19.  
  20. result := block;
  21.  
  22. end;
  23. //------------------------------------------------------------------------------
  24.  
  25. // список экспорта
  26. exports execute;
  27.  
  28. begin
  29.  // тело пусто
  30. end.

Скомпилированную dll кинул во вложение. Вложение не работает  :-\ , странно. Ссылка на ядиск - https://yadi.sk/d/czxLPs_mEP32Ug

Пример вызова кликерманом:
Код: Clickermann
  1. call("block.dll", 1) //блокируем мышь и клаву
  2.  
  3.  
  4. //действуем
  5. wait(1)
  6. move(223,231)
  7. waitms(300)
  8. move(329,159)
  9. waitms(300)  
  10. move(617,153)
  11. waitms(300)  
  12. move(994,375)
  13. waitms(300)  
  14. move(856,518)
  15. waitms(300)  
  16. move(555,559)
  17. waitms(300)  
  18. move(301,409)
  19. waitms(300)  
  20. move(210,285)  
  21. wait(1)
  22.  
  23. call("block.dll", 0) //разблокируем
  24.  
  25. halt

Файл "block.dll" должен быть в одной папке с сохраненным скриптом. Dll скомпилирована для 32-битной версии кликермана.
Кликер запускать от имени администратора, иначе может не работать (у меня не работает  >:( )
« Последнее редактирование: Апрель 07, 2019, 08:09:05 pm от dramster »

m0rv1n

  • Зашел в гости
  • *
  • Сообщений: 12
    • Просмотр профиля
Сам столкнулся с такой задачей, выход нашел таким способом
Может пригодится кому
Код: Clickermann
  1. SUB(hold, $tim, $_xpos, $_ypos)
  2.   $timer = $_ms + $tim // таймер
  3.   // LOGWRITE ("таймер",$tim)
  4.   MOVE($_xpos, $_ypos)
  5.   WAITMS(10)
  6.   WHILE($timer > $_ms)
  7.      IF( ($_xmouse == $_xpos) & ($_ymouse == $_ypos) )
  8.         WAITMS(10)
  9.      ELSE
  10.      $sx= $sx + ($_xmouse - $_xpos) // запоминает сдвиг который делаете мышью
  11. $sy= $sy + ($_ymouse - $_ypos)
  12.         MOVE($_xpos, $_ypos)
  13.         WAITMS(10)
  14.      END_IF
  15.   END_CYC
  16. END_SUB
  17.  
  18. $sx = $_xmouse // запоминаем положение курсора
  19. $sy = $_ymouse
  20. hold(1000, 20, 30) //вызов саба на удержание. например 1000мс в координате х20 у30
  21. MOVE($sx,$sy) // вернуть курсор с учетом сдвига мыши во время блока
  22.  
« Последнее редактирование: Июнь 09, 2020, 11:37:37 pm от m0rv1n »