Что нового

[Автоматизация] Автомазиция нажатия клавиши в определённом процессе

NightlyBlooD

Новичок
Сообщения
4
Репутация
0
Версия AutoIt: 3.3.6.1

Описание: Люди добрые, кто может сделать скрипт, чтоб он в определённом процессе нажимал кнопку {Home} постоянно до отключения скрипта, но при этом можно было свернуть этот процесс (приложение)... чтоб не мешал остальным окнам... (можно было в игры играть, по интернету лазить и т.д.)

я в этом новичок, но попытался изменить скрипт который мне давали на WoW
Код:
$Key_PvPindow = "{Home}"
$Key_joinQueue = "{Home}" ; /script JoinBattlefield(0);
$Key_Confirm = "{Home}" ; /script AcceptBattlefieldPort(1,1);
$Key_Idle = "{Home}"

SetPrivilege("SeDebugPrivilege", 1)

$Process = WinGetProcess("WoWEmuHacker v5.0.5.4 Final   By Devalina")
$hWnd = WinGetHandle("[CLASS:GxWindowClassD3d]")

$WoWProcess = mem_open($Process)

While True
	$status = mem_read(0x00B6DFD8, $WoWProcess, "int")

	switch $status
	Case 0
		joinQueue()
	Case 1
		idle()
	Case 2
		confirm()
	Case 3
		idle()
	EndSwitch
WEnd

Func joinQueue()
	Sleep(500)
	ControlSend($hWnd, "", "", $Key_PvPWindow)
	Sleep(500)
	ControlSend($hWnd, "", "", $Key_joinQueue)
	Sleep(500)
	ControlSend($hWnd, "", "", $Key_Confirm)
	Sleep(500)
	ControlSend($hWnd, "", "", "{N}")
EndFunc

Func confirm()
	sleep(50)
	ControlSend($hWnd, "", "", $Key_Confirm)
	Sleep(500)
EndFunc


Func idle()
	Sleep(10000)
	ControlSend($hWnd, "", "", $Key_Idle)
EndFunc



Func mem_open($iv_Pid)
	Local $ah_Handle[2] = [DllOpen('kernel32.dll')]
	Local $av_OpenProcess = DllCall($ah_Handle[0], 'int', 'OpenProcess', 'int', 0x1F0FFF, 'int', 1, 'int', $iv_Pid)
	$ah_Handle[1] = $av_OpenProcess[0]
	Return $ah_Handle
EndFunc

Func mem_read($iv_Address, $ah_Handle, $sv_Type = 'dword')
	Local $v_Buffer = DllStructCreate($sv_Type)
	DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
	Local $v_Value = DllStructGetData($v_Buffer, 1)
	Return $v_Value
EndFunc

Func mem_close($ah_Handle)
	DllCall($ah_Handle[0], 'int', 'CloseHandle', 'int', $ah_Handle[1])
	DllClose($ah_Handle[0])
	Return 1
EndFunc

Func SetPrivilege($privilege, $bEnable)
    Const $MY_TOKEN_ADJUST_PRIVILEGES = 0x0020
    Const $MY_TOKEN_QUERY = 0x0008
    Const $MY_SE_PRIVILEGE_ENABLED = 0x0002
    Local $hToken, $SP_auxret, $SP_ret, $hCurrProcess, $nTokens, $nTokenIndex, $priv
    $nTokens = 1
    $LUID = DLLStructCreate("dword;int")
    If IsArray($privilege) Then    $nTokens = UBound($privilege)
    $TOKEN_PRIVILEGES = DLLStructCreate("dword;dword[" & (3 * $nTokens) & "]")
    $NEWTOKEN_PRIVILEGES = DLLStructCreate("dword;dword[" & (3 * $nTokens) & "]")
    $hCurrProcess = DLLCall("kernel32.dll","hwnd","GetCurrentProcess")
    $SP_auxret = DLLCall("advapi32.dll","int","OpenProcessToken","hwnd",$hCurrProcess[0],   _
            "int",BitOR($MY_TOKEN_ADJUST_PRIVILEGES,$MY_TOKEN_QUERY),"int*",0)
    If $SP_auxret[0] Then
        $hToken = $SP_auxret[3]
        DLLStructSetData($TOKEN_PRIVILEGES,1,1)
        $nTokenIndex = 1
        While $nTokenIndex <= $nTokens
            If IsArray($privilege) Then
                $priv = $privilege[$nTokenIndex-1]
            Else
                $priv = $privilege
            EndIf
            $ret = DLLCall("advapi32.dll","int","LookupPrivilegeValue","str","","str",$priv,   _
                    "ptr",DLLStructGetPtr($LUID))
            If $ret[0] Then
                If $bEnable Then
                    DLLStructSetData($TOKEN_PRIVILEGES,2,$MY_SE_PRIVILEGE_ENABLED,(3 * $nTokenIndex))
                Else
                    DLLStructSetData($TOKEN_PRIVILEGES,2,0,(3 * $nTokenIndex))
                EndIf
                DLLStructSetData($TOKEN_PRIVILEGES,2,DllStructGetData($LUID,1),(3 * ($nTokenIndex-1)) + 1)
                DLLStructSetData($TOKEN_PRIVILEGES,2,DllStructGetData($LUID,2),(3 * ($nTokenIndex-1)) + 2)
                DLLStructSetData($LUID,1,0)
                DLLStructSetData($LUID,2,0)
            EndIf
            $nTokenIndex += 1
        WEnd
        $ret = DLLCall("advapi32.dll","int","AdjustTokenPrivileges","hwnd",$hToken,"int",0,   _
                "ptr",DllStructGetPtr($TOKEN_PRIVILEGES),"int",DllStructGetSize($NEWTOKEN_PRIVILEGES),   _
                "ptr",DllStructGetPtr($NEWTOKEN_PRIVILEGES),"int*",0)
        $f = DLLCall("kernel32.dll","int","GetLastError")
    EndIf
    $NEWTOKEN_PRIVILEGES=0
    $TOKEN_PRIVILEGES=0
    $LUID=0
    If $SP_auxret[0] = 0 Then Return 0
    $SP_auxret = DLLCall("kernel32.dll","int","CloseHandle","hwnd",$hToken)
    If Not $ret[0] And Not $SP_auxret[0] Then Return 0
    return $ret[0]
EndFunc

Но он почему-то всё ровно нажимает кнопки в процессе "World of Warcraft"
 
Автор
N

NightlyBlooD

Новичок
Сообщения
4
Репутация
0
Надо чтоб в приложение "WoWEmuHacker v5.0.5.4 Final By Devalina" нажималась одна и та-же хот конка=)) "Home" примерно со скоростью (800), но при этом чтоб можно было свернуть этот WoWEmuHacker (WEH) и играть в игры или смотреть фильм и тд... чтоб этот WEH не мешал другим окнам, но в нём продолжала нажиматься кнопка {Home}

Как то так=))
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
NightlyBlooD
Код:
$i = 0
HotKeySet('{Esc}', '_Exit')

Run('notepad.exe')
$hWin = WinWait('[CLASS:Notepad]', '', 3)
If Not $hWin Then Exit

While 1
	$i += 1
	ControlSend($hWin, '', 'Edit1', $i & '{ENTER}')
	If Not Mod($i, 5) Then
		WinSetState($hWin, '', @SW_RESTORE)
	Else
		WinSetState($hWin, '', @SW_MINIMIZE)
	EndIf
	Sleep(1000)
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
N

NightlyBlooD

Новичок
Сообщения
4
Репутация
0
madmasles сказал(а):
NightlyBlooD
Код:
$i = 0
HotKeySet('{Esc}', '_Exit')

Run('notepad.exe')
$hWin = WinWait('[CLASS:Notepad]', '', 3)
If Not $hWin Then Exit

While 1
	$i += 1
	ControlSend($hWin, '', 'Edit1', $i & '{ENTER}')
	If Not Mod($i, 5) Then
		WinSetState($hWin, '', @SW_RESTORE)
	Else
		WinSetState($hWin, '', @SW_MINIMIZE)
	EndIf
	Sleep(1000)
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit
К сожалению это не то... надо чтоб окно вообще не вылезало из свёрнутого состояния.... а действия делались...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
NightlyBlooD

{OverQuoteWarn}
 
Автор
N

NightlyBlooD

Новичок
Сообщения
4
Репутация
0
qsort сказал(а):
Можешь сказать, что именно заменяет нажатие на кнопке HOME в этой твоей проге? Какие действия с интерфейсом производятся?
там ставишь галочку, затем заходишь в настройки "Хот Кнопки"
и в поле P2P GOTO Loc3 назначаешь "Хот Кей"
потом при нажатие этого "хот кея" тебя телепортирует в заранее сохранённый координат.
Вообщем суть такова: в одном окне ты заходишь игроком альянса, в другом игроком орды, и убиваешь постоянно другого игрока (фармишь хонор), но чтоб тем игроком которого ты убиваешь не приходилось постоянно бежать к первому игроку, нажимаешь кнопку Home и тебя телепортитует на нужное тебе место. надо сделать так, чтоб постоянно нажималась эта кнопка, но при этом не вылезала эта прога
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Если выносить окно за переделы экрана, то уж лучше это окно просто скрыть.
Мирно слать в него разные клавиши. А при необходимости отобразить.
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
qsort
Если не ошибаюсь автору необходимо просто нажимать кнопку. Это можно выполнить и с помощью ControlClick, в том числе и в скрытом окне. Пример:
Код:
Run('calc.exe')
$hCalcWin = WinWait('[CLASS:CalcFrame]')

MsgBox(64, '', 'Скрытие окна и ввод цифр')
WinSetState($hCalcWin, '', @SW_HIDE)

ControlClick($hCalcWin, '', 'Button3')
ControlClick($hCalcWin, '', 'Button4')
ControlClick($hCalcWin, '', 'Button5')

MsgBox(64, '', 'Отображение окна')
WinSetState($hCalcWin, '', @SW_SHOW)
WinActivate($hCalcWin)
 
Верх