Всем доброго времени суток!
Много времени потратил на то чтобы правильно описать проблему, но даже так сомневаюсь что описал правильно, поэтому извините!
Вообщем решил я написать лаунчер для игры на AutoIt, поначалу все шло хорошо, но потом возникла проблема. К лаунчеру подключена dll и у нее имеется callback функция, я ее установил в скрипте, после ее исполнения скрипт начинает исполнять код с самого начала, то есть с #include и т.д. Причину ищу уже 2 дня, если кто знает подскажите пожалуйста, буду бесконечно благодарен.
Вот сам код:
Щелкните сюда http://rghost.ru/56617992 чтобы скачать DLL необходимую для работы скрипта. Запускать скрипт лучше с SciTe чтобы видеть исполняемый код в консоли. Чтобы получить эту проблему, после входа скрипта в бесконечный цикл подождите секунд 20-25. Если же ничего не произойдет, перезапустите его
Много времени потратил на то чтобы правильно описать проблему, но даже так сомневаюсь что описал правильно, поэтому извините!
Вообщем решил я написать лаунчер для игры на AutoIt, поначалу все шло хорошо, но потом возникла проблема. К лаунчеру подключена dll и у нее имеется callback функция, я ее установил в скрипте, после ее исполнения скрипт начинает исполнять код с самого начала, то есть с #include и т.д. Причину ищу уже 2 дня, если кто знает подскажите пожалуйста, буду бесконечно благодарен.
Вот сам код:
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_requestedExecutionLevel=highestAvailable
#AutoIt3Wrapper_Run_Debug_Mode=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;~ #include <Debug.au3>
;~ _DebugSetup("BF3 Лаунчер - Отладка", True, 1, Default, True)
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$BF3Launcher = GUICreate("Battlefield 3 Launcher", 615, 438, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "BF3LauncherClose")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "BF3LauncherMinimize")
GUISetOnEvent($GUI_EVENT_MAXIMIZE, "BF3LauncherMaximize")
GUISetOnEvent($GUI_EVENT_RESTORE, "BF3LauncherRestore")
$MemoLog = GUICtrlCreateEdit("", 24, 72, 153, 337)
GUICtrlSetOnEvent($MemoLog, "MemoLogChange")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Func MemoWrite($sData, $fCRLF = True)
GUICtrlSetData($MemoLog, $sData, 2131321321321)
If $fCRLF Then GUICtrlSetData($MemoLog, @CRLF, 1)
Return
EndFunc ;==>MemoWrite
;~ _DebugReport("Открытие ZloDll")
$hDLL = DllOpen("Launcher.dll")
;~ _DebugReport("Результат:" & $hDLL)
;~ _DebugReport("")
Sleep(2000)
;~ _DebugReport("Инициализация ZloDll")
DllCall($hDLL, "none:cdecl", "ZLO_Init")
;~ _DebugReport("")
Sleep(2000)
;~ _DebugReport("Создание Callback")
$hEventListener = DllCallbackRegister("EventListener", "none:cdecl", "int")
;~ $hClientListener = DllCallbackRegister("ClientListener", "none:cdecl", "str,str")
;~ _DebugReport("")
;~ _DebugReport("Установка Callback в ZloDll")
DllCall($hDLL, "none:cdecl", "ZLO_SetEventListener", "ptr", DllCallbackGetPtr($hEventListener))
Sleep(2000)
;~ DllCall($hDLL, "none:cdecl", "ZLO_SetClientListener", "ptr", DllCallbackGetPtr($hClientListener))
;~ _DebugReport("")
Sleep(2000)
;~ _DebugReport("Проверка доступности порта")
$aListenGOS = DllCall($hDLL, "bool:cdecl", "ZLO_ListenGOS")
;~ _DebugReportVar("Результат", $aListenGOS[0])
;~ _DebugReport("")
Sleep(2000)
;~ _DebugReport("Подключение к серверу эмулятора")
$aConnect = DllCall($hDLL, "bool:cdecl", "ZLO_ConnectMClient", "str", "zlofenix.org")
;~ _DebugReportVar("Результат", $aConnect[0])
;~ _DebugReport("")
Sleep(2000)
If $aConnect[0] Then
;~ _DebugReport("Авторизация пользователя")
;~ DllCall($hDLL, "none:cdecl", "ZLO_AuthClient", "str", "*****@**.**", "str", "*****")
;~ _DebugReport("")
Sleep(0200)
;~ _DebugReport("Выбор сервера")
;~ DllCall($hDLL, "none:cdecl", "ZLO_SelectServer", "int", "1454")
;~ _DebugReport("")
Else
EndIf
;~ $aRun = DllCall($hDLL, "bool:cdecl", "ZLO_RunClient")
While 1
Sleep(10000)
WEnd
Func EventListener($iEvent)
#cs
0 - Auth success
1 - Auth error
2 - Old LaucherDLL
3 - Server select ok
4 - server select not found - error 1
5 - server select full - error 2
6 - server select not ready - error 3
23 - server list begin
24 - server list end
27 - launcher(client) disconnected from master
28 - mclient timeouted and disconnected
#ce
Switch $iEvent
Case 0
MemoWrite("Auth success")
DllCall($hDLL, "none:cdecl", "ZLO_GetServerList")
Case 1
MemoWrite("Auth error")
Case 2
MemoWrite("Old Launcher.dll")
Case 3
MemoWrite("Server select ok")
Case 4
MemoWrite("server select not found")
Case 5
;
Case 6
;
Case 23
;
Case 24
;
Case 27
MemoWrite("Disconnected from master")
Case 28
MemoWrite("Master timeout and disconnected")
Case 666
;
Case Else
;
EndSwitch
Return
;~ MemoWrite($iEvent)
EndFunc ;==>EventListener
Func ClientListener($sType, $sValue)
MemoWrite("[" & $sType & "]" & $sValue)
EndFunc
Func BF3LauncherClose()
GUIDelete($BF3Launcher)
DllCall($hDLL, "none:cdecl", "ZLO_Close")
DllCallbackFree($hEventListener)
DllClose($hDLL)
Exit
EndFunc ;==>BF3LauncherClose
Func BF3LauncherMaximize()
EndFunc ;==>BF3LauncherMaximize
Func BF3LauncherMinimize()
EndFunc ;==>BF3LauncherMinimize
Func BF3LauncherRestore()
EndFunc ;==>BF3LauncherRestore
Func MemoLogChange()
EndFunc ;==>MemoLogChange