Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Увеличение производительности скрипта

Ответить
Настройки темы
Увеличение производительности скрипта

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Проблема такая - имеется скрипт, который сам нажимает кнопки, если ХП или мана меньше указанных значений, но скрипт делает это раза в 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

Отправлено: 10:21, 01-05-2010

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


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

И ещё, а для чего нужен «_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}")

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 16:04, 01-05-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

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

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

Последний раз редактировалось notbanned, 04-05-2010 в 18:20.


Отправлено: 17:41, 04-05-2010 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Увеличение производительности скрипта

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Увеличение производительности ноутбука _stalone Ноутбуки 15 17-06-2009 21:50
Увеличение скорости Kiberg Хочу все знать 3 03-12-2007 02:20
Увеличение производительности компьютера grob40 Microsoft Windows 2000/XP 3 24-12-2006 11:59
тестирование производительности скрипта на ПХП Vlad Drakula Программное обеспечение Linux и FreeBSD 7 08-10-2003 18:45




 
Переход