Author Topic: Как сделать чтоб курсор не двигался во время скрипта.  (Read 5210 times)

0 Members and 1 Guest are viewing this topic.

EvilNoob

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Народ пожалуйста подскажите как сделать так чтобы, когда я нажимаю на горячую клавишу (например е), чтоб виртуальная мышка двигалась(скрипт), а физическая(мышка который я двигаю) нет, это не столь важно но иногда сильно мешает в игровом процессе когда я сам же случайно сбиваю свой скрипт из-за лишних движений мышкой. Мне нужно что бы когда мой скрипт начинается я не мог не как взаимодействовать с ним и что бы он следовал указанием, а когда заканчивается мои полномочия вернулись и я снова смог двигать мышкой.(Надеюсь это возможно сделать)
« Last Edit: April 07, 2019, 02:35:35 PM by EvilNoob »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile

dramster

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

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

Код длл делфи:
Code: (clickermann) [Select]
library cmann_plugin;

uses SysUtils, Winapi.Windows;

procedure BlockInput(fBlockIt : boolean); stdcall; external 'USER32.DLL';
//------------------------------------------------------------------------------
// Основное тело функции, идет на экспорт, вызывается из кликера
function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;
type
  pIntArr = array[0..0] of Integer;
var
  block : Integer;

begin

 block := pIntArr(_mas^)[0];

 if block = 0 then BlockInput(False) else BlockInput(True);

 result := block;

end;
//------------------------------------------------------------------------------

// список экспорта
exports execute;

begin
  // тело пусто
end.

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

Пример вызова кликерманом:
Code: (clickermann) [Select]
call("block.dll", 1) //блокируем мышь и клаву


//действуем
wait(1)
move(223,231)
waitms(300)
move(329,159)
waitms(300) 
move(617,153)
waitms(300)   
move(994,375)
waitms(300)   
move(856,518)
waitms(300) 
move(555,559)
waitms(300) 
move(301,409)
waitms(300) 
move(210,285)   
wait(1)

call("block.dll", 0) //разблокируем

halt

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

m0rv1n

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Сам столкнулся с такой задачей, выход нашел таким способом
Может пригодится кому
Code: (clickermann) [Select]
SUB(hold, $tim, $_xpos, $_ypos)
   $timer = $_ms + $tim // таймер
   // LOGWRITE ("таймер",$tim)
   MOVE($_xpos, $_ypos)
   WAITMS(10)
   WHILE($timer > $_ms)
      IF( ($_xmouse == $_xpos) & ($_ymouse == $_ypos) )
         WAITMS(10)
      ELSE
      $sx= $sx + ($_xmouse - $_xpos) // запоминает сдвиг который делаете мышью
$sy= $sy + ($_ymouse - $_ypos)
         MOVE($_xpos, $_ypos)
         WAITMS(10)
      END_IF
   END_CYC
END_SUB

$sx = $_xmouse // запоминаем положение курсора
$sy = $_ymouse
hold(1000, 20, 30) //вызов саба на удержание. например 1000мс в координате х20 у30
MOVE($sx,$sy) // вернуть курсор с учетом сдвига мыши во время блока
« Last Edit: June 09, 2020, 11:37:37 PM by m0rv1n »