Всем привет. Начинаю делиться кусками кода для наших юнных копипастеров. Подобного метода нигде нет, за бугром тоже не найдёте (хоть и перехватов мыши в гугле просто дохрена и больше, но никто ещё так не делал в читах), и именно по этому в подавляющем большинстве читов эта опция и не реализована (пиздить-то неоткуда). Данный форум будет первым. Если собираетесь использовать или сливать, просьба указать мой ник как автора. Тащем-то, самая простая реализация будет выглядеть так: unit Hooked; interface uses Windows, Messages; type THook = class(TObject) Responce: HHOOK; public function Init_Hook: Boolean; function Init_UnHook: Boolean; end; var Hook: THook; implementation function SysMsgProc(code: integer; wParam: word; lParam: longint): longint; stdcall; begin if (Code <> HC_ACTION) then Exit; case wParam of WM_LBUTTONDOWN: { CODE OR Result := CallNextHookEx(Responce, Code, wParam, lParam);} WM_LBUTTONUP: { CODE OR Result := CallNextHookEx(Responce, Code, wParam, lParam);} end else Result := CallNextHookEx(Responce, Code, wParam, lParam); end; end; function THook.Init_Hook: Boolean; const WH_MOUSE_LL = 14; begin Hook.Responce := SetWindowsHookEx(WH_MOUSE_LL, @SysMsgProc, HInstance, 0); Result := Hook.Responce <> 0; end; function THook.Init_UnHook: Boolean; begin Result := UnhookWindowsHookEx(Hook.Responce); end; end. Код unit Hooked; interface uses Windows, Messages; type THook = class(TObject) Responce: HHOOK; public function Init_Hook: Boolean; function Init_UnHook: Boolean; end; var Hook: THook; implementation function SysMsgProc(code: integer; wParam: word; lParam: longint): longint; stdcall; begin if (Code <> HC_ACTION) then Exit; case wParam of WM_LBUTTONDOWN: { CODE OR Result := CallNextHookEx(Responce, Code, wParam, lParam);} WM_LBUTTONUP: { CODE OR Result := CallNextHookEx(Responce, Code, wParam, lParam);} end else Result := CallNextHookEx(Responce, Code, wParam, lParam); end; end; function THook.Init_Hook: Boolean; const WH_MOUSE_LL = 14; begin Hook.Responce := SetWindowsHookEx(WH_MOUSE_LL, @SysMsgProc, HInstance, 0); Result := Hook.Responce <> 0; end; function THook.Init_UnHook: Boolean; begin Result := UnhookWindowsHookEx(Hook.Responce); end; end. Как использовать: Поставить хук: Hook.Init_Hook; Код Поставить хук: Hook.Init_Hook; Снять хук: Hook.Init_UnHook; Код Снять хук: Hook.Init_UnHook; В функции SysMsgProc происходит перехват левой и правой кнопки мыши. Там делайте всё на своё усмотрение, например добавляете новую булевскую переменную, и если она равна True выводите Result := -1; При таким расскладе функция перехватит нажатие и проигнорирует его. Прикрутить к аиму проблем не составит. Для тех, кто говорит, что такой метод не будет работать в cs:go:
Нет. Допустил сначала навестись, после нажатия на ЛКМ, а только потом произвести выстрел. Это и есть Delay.