Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Увеличение производительности скрипта (http://forum.oszone.net/showthread.php?t=174569)

notbanned 01-05-2010 10:21 1404486

Увеличение производительности скрипта
 
Проблема такая - имеется скрипт, который сам нажимает кнопки, если ХП или мана меньше указанных значений, но скрипт делает это раза в 2-3 медленней чем хотелось бы (за секунду он нажимает раза 2-3) =(
Помогите решить проблему?
Код:

#include <kernel.au3>
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>

GuiCreate("Автожор", 180, 140)
$l1 = GUICtrlCreateLabel("Процесс: ", 10, 10, 100, 30)
$refresh = GUICtrlCreateButton("Обновить",110,10)
$l2 = GUICtrlCreateLabel("HP: ", 10, 40, 100, 25)
$input = GuiCtrlCreateInput("5000",10,60,60,25)
$Combo = GUICtrlCreateCombo("{F9}", 10, 85, 60, 30)

$input2 = GuiCtrlCreateInput("300",110,60,60,25)
$Combo2 = GUICtrlCreateCombo("{F8}", 110, 85, 60, 30)

$onoff = GUICtrlCreateCheckbox("Вкл",10,110);
GUICtrlCreateLabel("ver. 0.3 by ph1047", 85, 120, 100, 30)

Global $multptr = 0x82C99A
Global $mult = 0x0
Global $hpptr = 0x0
Global $hp = 0x0
Global $on = 0
Global $buf = 0
Global $pid = wingetprocess("FleeRO")
Global $hCombo = 0

If Not IsHWnd($Combo) Then $hCombo = GUICtrlGetHandle($Combo)
_SendMessage($hCombo, 0x000B)
_SendMessage($hCombo, 0x143, 0, "{F1}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F2}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F3}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F4}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F5}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F6}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F7}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F8}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F9}", 0, "wparam", "str")
_SendMessage($hCombo, 0x000B, 1)

If Not IsHWnd($Combo2) Then $hCombo = GUICtrlGetHandle($Combo2)
_SendMessage($hCombo, 0x000B)
_SendMessage($hCombo, 0x143, 0, "{F1}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F2}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F3}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F4}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F5}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F6}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F7}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F8}", 0, "wparam", "str")
_SendMessage($hCombo, 0x143, 0, "{F9}", 0, "wparam", "str")
_SendMessage($hCombo, 0x000B, 1)

If $pid == -1 Then
    GUICtrlSetData($l1,"Процесс: не найден")
Else
    GUICtrlSetData($l1,"Процесс: " & $pid)
EndIf

Global $h = _memopen($pid)

If ($h == 0x00000000) And ($pid > 0) Then
    GUICtrlSetData($l1,"Процесс: " & $pid & "; Не удается OpenProcess()")
ElseIf ($pid > 0) Then
    GUICtrlSetData($l1,"Процесс: " & $pid & "; Успешно открыт.")
    $on = 1
EndIf

; GUI MESSAGE LOOP
GuiSetState()

While 1
    $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE
                ExitLoop
            Case $msg = $refresh
                $pid = wingetprocess("FleeRO")
                If $pid == -1 Then
                    GUICtrlSetData($l1,"Процесс: не найден")
                    $on = 0
                Else
                    GUICtrlSetData($l1,"Процесс: " & $pid)
                EndIf
                $h = _memopen($pid)
                If ($h == 0x00000000) And ($pid > 0) Then
                    GUICtrlSetData($l1,"Процесс: " & $pid & "; Не удается OpenProcess()")
                    $on = 0
                ElseIf ($pid > 0) Then
                    GUICtrlSetData($l1,"Процесс: " & $pid & "; Успешно открыт.")
                    $on = 1
                EndIf
        EndSelect
     
        If $on == 1 Then
            $mult = _MemReadDw($h, $multptr, "dword")
            $hpptr = $mult*4 + 0x7BDD3E;
            $hp = _MemReadDw($h, $hpptr, "int")
            If $hp <> $buf Then
                GUICtrlSetData($l2,"HP: " & $hp)
            EndIf
            $buf = $hp
        EndIf
     
        If WinActive("FleeRO") And ($on == 1) And (GUICtrlRead($onoff) == 1) Then
            If $hp < Int(GUICtrlRead($input)) And $hp > Int(GUICtrlRead($input2)) Then
                Send(GUICtrlRead($Combo))
            EndIf
            If $hp < Int(GUICtrlRead($input2)) Then
                Send(GUICtrlRead($Combo2))
            EndIf
        EndIf
    ;Sleep(1)
             
WEnd


Creat0R 01-05-2010 16:04 1404660

Цитата:

Помогите решить проблему?
Проблему решить сложно без рабочего скрипта.

И ещё, а для чего нужен «_SendMessage($hCombo,....»? почему нельзя задать значения обычным способом:

Код:

$Combo = GUICtrlCreateCombo("", 10, 85, 60, 30)

....


$Combo2 = GUICtrlCreateCombo("", 110, 85, 60, 30)

....


GUICtrlSetData($Combo, "{F1}|{F2}|{F3}|{F4}|{F5}|{F6}|{F7}|{F8}|{F9}", "{F9}")
GUICtrlSetData($Combo2, "{F1}|{F2}|{F3}|{F4}|{F5}|{F6}|{F7}|{F8}|{F9}", "{F8}")


notbanned 04-05-2010 17:41 1406564

Долго не появлялся, небыло времени :-( клавиши сделал так, как сказали. спасибо :-)

проблема со скоростью работы решилась - она была на стороне сервера.

осталось только это:
Изначально был баг - когда персонаж умирал, прога не знала об этом и продолжала тыкать на нужные кнопки все бы ничего, но каким-то образом зажимался Alt и это очень мешало. Баг исправили отключив программу если жизни <= 0. но оказалось что это половина проблемы :-( этот же баг проявляется иногда даже если персонаж живой. Во время пвп очень мешает, хоть и легко отключается (достаточно нажать пару раз кнопку Alt)

Так же интересует вопрос, возможно ли вклиниться в процесс и отправить пакет на сервер от имени процесса?
не сильно в этом разбираюсь :-)


Время: 08:24.

Время: 08:24.
© OSzone.net 2001-