Что нового

[Мышь, клавиатура] Возможноли использовать библиотеку Input Simulator через DllCall()

goldfarm007

Новичок
Сообщения
3
Репутация
0
Подскажите возможноли использовать библиотеку вот отсюда http://inputsimulator.codeplex.com/ через DllCall() ?
Если возможно приведите парочку примеров с помощью неё двигать мышку и нажимать кнопки.

P.S.
MouseMove,Send,_WinAPI_Mouse_Event и т.д. не предлагать т.к. там где мне нужно они не работают.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Зачем использовать DLL'ку, если в Autoit'е есть функции MouseMove, Send...и.т.д ?
 
Автор
G

goldfarm007

Новичок
Сообщения
3
Репутация
0
Потому что там где мне нужно MouseMove,Send,_WinAPI_Mouse_Event и т.д. не работает.
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
судя по описанию она использует Win32 SendInput method, тоесть также как и автоит.
Чтобы обойти защиты от ботов нужно искать нечто, что эмулирует железно, должны быть драйвера клавы\мыши типа виртуальные.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Посмотри, вероятно там где тебе нужно стоит гейм гвард :smile:
 

lirikmel

Продвинутый
Сообщения
226
Репутация
84
опять же хочется узнать что за игра .....
Посмотри, вероятно там где тебе нужно стоит гейм гвард
..ну в последнее время что касается нажатий в окно не такая уж проблема.
Как вариант попробуй стороннюю библиотеку с postmessage.
например Ftool extended

Код:
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

$Form1 = GUICreate("Form1", 288, 142, -1, -1)
$Button1 = GUICtrlCreateButton("Click to start", 36, 24, 217, 29)
$Button2 = GUICtrlCreateButton("Exit", 36, 80, 217, 29)
GUISetState(@SW_SHOW)
 $handle = WinGetHandle("чтото тут")

MsgBox(1,"123",$handle)
While 1
$nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
 
			DllCall("Functions.dll", "none", "fnPostMessage", "HWnd", $handle, "Int", $WM_KEYDOWN, "long", 82, "long",1)
			ConsoleWrite('->' & @error & @CRLF)
			sleep(50)
			
			
			DllCall("Functions.dll", "none", "fnPostMessage", "HWnd", $handle, "Int", $WM_KEYUP, "long", 65, "long",1)
			ConsoleWrite('->' & @error & @CRLF)
			Sleep(50)
           
		Case $Button2
            Sleep(500)
            Exit
    EndSwitch
WEnd
 
Автор
G

goldfarm007

Новичок
Сообщения
3
Репутация
0
Эта библиотека не помогает.
Но я вот нашел программу которая успешно шевелит мышку и тыкает кнопки даже при выключенной функции низкоуровневой эмуляции.
Macro Expert
Может кто нибудь попробует разобрать как можно использовать библиотеки от этой программы если это конечно реально.

P.S.
Кряк
 

SergiuS

Новичок
Сообщения
8
Репутация
1
Тоже столкнулся с подобной проблемой.
Есть бот "UO Pilot" в нем можно записать действия мыши и потом воспроизвести (через запись/воспроизведение макроса) начал в нем разбираться, так там сделано через ХУКИ - АПИ функции SetWindowsHookEx(WH_JOURNALPLAYBACK, ...) (начальный исходник можно скачать http://uopilot.ultimasoft.ru/index_rus.php).
Есть ли люди которые помогут с кода Делфи перевести на код AutoIt? Я застрял на функции PlayProc:
Код:
function PlayProc(Code : integer; Undefined : WPARAM; P : LPARAM) : LRESULT; stdcall;
begin
  if Code < 0 then
    Result := CallNextHookEx(TheRecorder.HookHandle, Code, Undefined, P)
  else begin
    case Code of
      HC_SKIP: begin
        if TheRecorder.FStream.Position < TheRecorder.FStream.Size then begin
          TheRecorder.FStream.Read(TheRecorder.EventMsg, SizeOf(TheRecorder.EventMsg));
          TheRecorder.EventMsg.Time := TheRecorder.SpeedFactor*(TheRecorder.EventMsg.Time div 100);
          TheRecorder.EventMsg.Time := TheRecorder.EventMsg.Time + TheRecorder.BaseTime;
        end else begin //stop
          TheRecorder.SetState(rsIdle);


	if TheRecorder.Tag=777 then begin TheRecorder.DoPlay; exit; end;
	TheRecorder.Tag:=TheRecorder.Tag-1;
	if TheRecorder.Tag>0 then  TheRecorder.DoPlay;  
		    end;
      end;

      HC_GETNEXT: begin
        Result := TheRecorder.EventMsg.Time - GetTickCount();
        if Result < 0 then
          Result := 0;
        PEVENTMSG(P)^ := TheRecorder.EventMsg;
      end;
    else
      PEVENTMSG(P)^ := TheRecorder.EventMsg;
      Result := CallNextHookEx(TheRecorder.HookHandle, Code, Undefined, P)
    end {case};
  end {if};

end {PlayProc};
В частности интересует строка
Код:
PEVENTMSG(P)^ := TheRecorder.EventMsg;
тут идет назначение события.
EventMsg - структура, типа:
Код:
typedef struct tagEVENTMSG {
  UINT  message;
  UINT  paramL;
  UINT  paramH;
  DWORD time;
  HWND  hwnd;
} EVENTMSG, *PEVENTMSG, *LPEVENTMSG;
Как правильно написать это присвоение в AutoIt?
Помогите плиз! Может кто то баловался ХУКами именно "WH_JOURNALPLAYBACK" - поделитесь кодом, как отправлять событие для мыши и как для клавы.
 

lirikmel

Продвинутый
Сообщения
226
Репутация
84
Эта библиотека не помогает.
Но я вот нашел программу которая успешно шевелит мышку и тыкает кнопки даже при выключенной функции низкоуровневой эмуляции.
Macro Expert
Может кто нибудь попробует разобрать как можно использовать библиотеки от этой программы если это конечно реально.
Хммм интересно что за игра то все таки стало интересно уже
 
Верх