AU3-客户机延时启动加载程序
#cs ----------------------------------------------------------------------------客户机延时启动加载程序1.1.3.2_ 不带密码加密功能
1. 带冰点保护检测功能(须将相应的DFC.EXE放在system32目录或本程序所在目录下)
2. 维护检修状态自动退出本程序
3. 全盘DF保护模式下的自动更新状态设置
星际魂 Copyright (C) 2006 QQ:172160497
您可以自由复制或修改本源码为自用,并请保留此段信息,请勿用于商业用途!
如果你能更好的改进本代码,请将改进后的代码发一份给我,将不胜感激!!!
#ce ----------------------------------------------------------------------------
Opt("RunErrorsFatal", 0)
Opt("TrayIconHide", 1)
Opt("WinTitleMatchMode", 4)
Dim $CFG,$ServerCFG,$ServerDF_Log,$ServerUP_Log,$DF_Cmd_Pass,$DF_Work_Pass,$EP_Pass
Dim $Sys_AutoUser,$Sys_AutoPass,$DF_Status,$Chk_Status_JX = 1,$Chk_Status_GX = 1
Dim $Chk_PC_Name_OK,$Chk_PC_UP,$Chk_Status_JXGX,$PC_NameReadALL,$PC_NameRead
$CFG = @ScriptDir&"\SleepBootCfg.ini"
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run","SleepBoot","REG_SZ",@ScriptFullPath)
If FileExists($CFG) Then FileSetAttrib($CFG,"+RSH")
$ServerCFG = IniRead($CFG,"QQ172160497","服务器配置文件路径","")
$ServerDF_Log = IniRead($CFG,"QQ172160497","冰点检测日志路径","")
$ServerUP_Log = IniRead($CFG,"QQ172160497","维护状态配置路径","")
$Sys_AutoUserPass = IniRead($CFG,"QQ172160497","客户机自动登陆帐户密码","")
$DF = IniRead($CFG,"QQ172160497","启用冰点保护","0")
$DF_Work_Pass = IniRead($CFG,"QQ172160497","DF_Workstation_Pass","")
$DF_Cmd_Pass = IniRead($CFG,"QQ172160497","DF_CommandLine_Pass","")
$EP_Pass = IniRead($CFG,"QQ172160497","PubwinEP_Pass","")
;--------检查"客户机自动登陆帐户密码"格式----
$ChkUserPass = StringInStr($Sys_AutoUserPass,"/")
If $ChkUserPass <> 0 Then
$Sys_AutoUserPass = StringSplit($Sys_AutoUserPass,"/")
$Sys_AutoUser = $Sys_AutoUserPass[1]
$Sys_AutoPass = $Sys_AutoUserPass[2]
Else
$Sys_AutoUser = $Sys_AutoUserPass
$Sys_AutoPass = ""
EndIf
If $DF = 1 Then ;----检测冰点状态----
$DF_Status = RunWait(@ComSpec & " /c " & "DFC.EXE get /ISFROZEN", "", @SW_HIDE)
EndIf
Client_StatusSET()
;-------从服务器读取配置文件----
For $i = 1 To 30000
If FileExists($ServerCFG) Then FileCopy($ServerCFG,@ScriptDir&"\SleepBoot.ini",1)
Sleep(1000)
If FileExists(@ScriptDir&"\SleepBoot.ini") = 0 And $i = 30000 Then Exit
If FileExists(@ScriptDir&"\SleepBoot.ini") Then $i = 30000
Next
;-------加载预设程序------
$Start_Sleep = IniRead(@ScriptDir&"\SleepBoot.ini","QQ172160497","初始延时","0")
$SysPatchReg = IniRead(@ScriptDir&"\SleepBoot.ini","QQ172160497","修补注册表","")
$SysPatchExe = IniRead(@ScriptDir&"\SleepBoot.ini","QQ172160497","修补程序","")
If $SysPatchReg <> "" Then FileCopy($SysPatchReg,@TempDir&"\SysPatchReg.reg"
RunWait(@ComSpec & " /c " & "regedit.exe /s "&@TempDir&"\SysPatchReg.reg", "", @SW_HIDE)
FileDelete(@TempDir&"\SysPatchReg.reg")
If $SysPatchExe <> "" Then Run($SysPatchExe,"",@SW_HIDE)
Sleep($Start_Sleep * 1000)
$Sleep_Prog = IniReadSection(@ScriptDir&"\SleepBoot.ini","延时加载")
If UBound($Sleep_Prog) > 0 Then
For $i = 1 To $Sleep_Prog[0][0]
Sleep($Sleep_Prog[$i][0] * 1000)
Run($Sleep_Prog[$i][1],"",@SW_HIDE)
If @error Then Run(@ComSpec & " /c " & $Sleep_Prog[$i][1], "", @SW_HIDE)
Next
EndIf
Beep(4000,100) ;系统状态正常提示一声
AutoLogonREG()
FileDelete(@ScriptDir&"\SleepBoot.ini")
Exit
Func Client_StatusSET()
$Chk_PC_JXGX1 = IniRead($ServerCFG,"QQ172160497","维护机号","")
$Chk_PC_UP = IniRead($ServerUP_Log,"维护状态",@ComputerName,"0")
If $Chk_PC_JXGX1 <> "" Then
$PC_NameReadALL = StringInStr($Chk_PC_JXGX1,"ALL") ;是否含有ALL
$Chk_PC_Name = StringInStr($Chk_PC_JXGX1,"-") ;是否含有"-"
If $Chk_PC_Name <> 0 Then ;含有"-"
$Chk_PC_Name = StringInStr($Chk_PC_JXGX1,",") ;是否含有","
If $Chk_PC_Name <> 0 Then ;含","时
$Chk_PC_Name = StringSplit($Chk_PC_JXGX1,",") ;分离含有","的值
For $i = 1 To $Chk_PC_Name[0]
$PC_Nums2 = StringInStr($Chk_PC_Name[$i],"-") ;是否含有"-"
If $PC_Nums2 = 0 Then ;不含"-"时
$Chk_PC_Name_OK = StringInStr($Chk_PC_Name[$i],@ComputerName) ;是否含有本机名
Set_Status()
Else ;含"-"时
$Name = IniRead($ServerUP_Log,"初始化","计算机名前缀","")
$Nums = IniRead($ServerUP_Log,"初始化","后缀编号位数","")
$PC_Nums3 = StringSplit($Chk_PC_Name[$i],"-") ;分离含有"-"的值
$PC_NameReadSet_Start = StringRight($PC_Nums3[1],$Nums)
$PC_NameReadSet_End = StringRight($PC_Nums3[2],$Nums)
For $ii = $PC_NameReadSet_Start To $PC_NameReadSet_End
$iii = StringLen($ii)
If $Nums = 3 Then
If $iii = 3 Then $PC_NameReadSet = $ii
If $iii = 2 Then $PC_NameReadSet = "0"&$ii
If $iii = 1 Then $PC_NameReadSet = "00"&$ii
ElseIf $Nums = 2 Then
If $iii = 2 Then $PC_NameReadSet = $ii
If $iii = 1 Then $PC_NameReadSet = "0"&$ii
EndIf
$Chk_PC_Name_OK = StringInStr($Name&$PC_NameReadSet,@ComputerName) ;是否含有本机名
Set_Status()
Next
EndIf
Next
EndIf
Else ;不含"-"时
$Chk_PC_Name_OK = StringInStr($Chk_PC_JXGX1,@ComputerName) ;是否含有本机名
Set_Status()
EndIf
Else
$Chk_Status_JXGX = 0
EndIf
If $Chk_Status_JXGX = 0 And $DF_Status <> 1 Then DF_StatusSET1()
EndFunc
Func Set_Status()
If $Chk_PC_Name_OK <> 0 Or $PC_NameReadALL <> 0 Then ;含本机名
If $Chk_PC_UP = "2" Then
sndbeep2()
If $EP_Pass <> "" Then UnLock_EP()
AutoLogonREG()
MsgBox(64,"维护检测信息","当前本机为[维护检修]状态...",3)
AutoLogonREG()
Exit
ElseIf $Chk_PC_UP = "1" Then
If $DF_Status <> 1 Then
sndbeep2()
If $EP_Pass <> "" Then UnLock_EP()
MsgBox(64,"维护检测信息","当前本机为[维护更新]状态,稍后自动开始更新序列...",1)
Client_Data_Up()
Else
sndbeep2()
If $EP_Pass <> "" Then UnLock_EP()
MsgBox(64,"维护检测信息","检测到当前本机需要进行[维护更新],即将自动重启为更新状态...",1)
DF_StatusSET0()
EndIf
EndIf
Else
AutoLogonREG()
$Chk_Status_JXGX = 0
EndIf
EndFunc
Func Client_Data_Up() ;执行第三方后台同步程序
WinMinimizeAll()
AdlibEnable("Lock_KM")
RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","LogonType","REG_DWORD",1)
AutoLogonREG()
If FileExists(@ScriptDir&"\DataUP_Lock.jpg") Then
SplashImageOn("","DataUP_Lock.jpg",-1,-1,-1,-1,1)
Else
SplashTextOn("",@CRLF&"请 注 意"&@CRLF&@CRLF&@CRLF&@CRLF&@CRLF&@CRLF&@CRLF&"本机已被锁定,正在执行游戏更新自动维护工作......"&@CRLF&@CRLF&"请顾客勿使用本机,否则一经发现后果自负!!!",-1,-1,-1,-1,1,-1,14)
EndIf
$Data_Up_Program = IniRead($ServerCFG,"QQ172160497","加载同步更新程序","")
$Data_Up_Process = IniRead($ServerCFG,"QQ172160497","更新程序主进程名","")
If $Data_Up_Program <> "" And $Data_Up_Process <> "" Then
Sleep(3000)
Run($Data_Up_Program)
If @error Then Run(@ComSpec & " /c " & $Data_Up_Program)
Sleep(5000)
While 1
If ProcessExists($Data_Up_Process) = 0 Then ExitLoop
Sleep(1000)
WEnd
SplashTextOn("",@CRLF&"请 注 意"&@CRLF&@CRLF&@CRLF&@CRLF&@CRLF&@CRLF&@CRLF&"本机已被锁定,游戏更新工作已成功完成......"&@CRLF&@CRLF&"即将重启或关机,系统将将恢复到正常状态......",-1,-1,-1,-1,1,-1,14)
DF_StatusSET2() ;数据同步更新完成后设置冰点为保护状态后关机
EndIf
DF_StatusSET2()
EndFunc
Func DF_StatusSET2() ;自动更新完成操作
If $DF = 1 Then
AutoLogonREG()
WriteUP_OKLog()
If $DF_Cmd_Pass <> "" Then
RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","LogonType","REG_DWORD",0)
RunWait(@ComSpec & " /c " & "DFC.EXE "& $DF_Cmd_Pass &" /BOOTFROZEN", "", @SW_HIDE)
EndIf
Sleep(1000)
Send("^!+{F6}")
WinWaitActive("classname=TFormLogon")
ControlSetText("classname=TFormLogon","","TEdit1",$DF_Work_Pass)
ControlClick("classname=TFormLogon","&OK","TButton2")
WinWaitActive("classname=TFormEntry")
ControlClick("classname=TFormEntry","Boot Frozen","TRadioButton3") ;设置冰点为保护状态
ControlClick("classname=TFormEntry","&OK","TButton12")
WinWaitActive("classname=TFormMsg")
ControlClick("classname=TFormMsg","OK","TButton1")
Sleep(500)
EndIf
AutoLogonREG()
WriteUP_OKLog()
RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","LogonType","REG_DWORD",0)
SplashOff()
Shutdown(9)
EndFunc
Func DF_StatusSET1() ;设置冰点为保护状态
If $DF = 1 Then
WinMinimizeAll()
AdlibEnable("Lock_KM")
RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","LogonType","REG_DWORD",1)
sndbeep3()
If FileExists(@ScriptDir&"\DF_Lock.jpg") Then
SplashImageOn("","DF_Lock.jpg",-1,-1,-1,-1,1)
Else
SplashTextOn("",@CRLF&"请 注 意"&@CRLF&@CRLF&@CRLF&@CRLF&@CRLF&@CRLF&@CRLF&"发现本机保护系统异常,本机已被锁定!!!"&@CRLF&@CRLF&"如果不是你人为造成,请稍候本机自动重启!"&@CRLF&@CRLF&"否则一经发现后果自负!!!",-1,-1,-1,-1,1,-1,14)
EndIf
$OpenLogFile = FileOpen($ServerDF_Log,1)
If $OpenLogFile <> -1 Then
$WriteOK = FileWriteLine($OpenLogFile,@MON&"月"&@MDAY&"号"&@HOUR&"时"&@MIN&"分 ===> "&@ComputerName&" 号机冰点还原为非保护状态!!!")
EndIf
FileClose($OpenLogFile)
AutoLogonREG()
If $DF_Cmd_Pass <> "" Then
RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","LogonType","REG_DWORD",0)
RunWait(@ComSpec & " /c " & "DFC.EXE "& $DF_Cmd_Pass &" /BOOTFROZEN", "", @SW_HIDE)
EndIf
Sleep(1000)
Send("^!+{F6}")
WinWaitActive("classname=TFormLogon")
ControlSetText("classname=TFormLogon","","TEdit1",$DF_Work_Pass)
ControlClick("classname=TFormLogon","&OK","TButton2")
WinWaitActive("classname=TFormEntry")
ControlClick("classname=TFormEntry","Boot Frozen","TRadioButton3") ;设置冰点为保护状态
ControlClick("classname=TFormEntry","&OK","TButton12")
WinWaitActive("classname=TFormMsg")
ControlClick("classname=TFormMsg","OK","TButton1")
RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","LogonType","REG_DWORD",0)
AutoLogonREG()
Sleep(500)
SplashOff()
Shutdown(6)
EndIf
EndFunc
Func DF_StatusSET0() ;设置冰点为解冻状态
If $DF = 1 Then
WinMinimizeAll()
AdlibEnable("Lock_KM")
RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","LogonType","REG_DWORD",1)
If FileExists(@ScriptDir&"\DataUP_Lock.jpg") Then
SplashImageOn("","DataUP_Lock.jpg",-1,-1,-1,-1,1)
Else
SplashTextOn("",@CRLF&"请 注 意"&@CRLF&@CRLF&@CRLF&@CRLF&@CRLF&@CRLF&@CRLF&"本机已被锁定,正在执行游戏更新自动维护工作......"&@CRLF&@CRLF&"请顾客勿使用本机,否则一经发现后果自负!!!",-1,-1,-1,-1,1,-1,14)
EndIf
If $DF_Cmd_Pass <> "" Then
AutoLogonREG()
RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","LogonType","REG_DWORD",0)
RunWait(@ComSpec & " /c " & "DFC.EXE "& $DF_Cmd_Pass &" /BOOTTHAWED", "", @SW_HIDE)
EndIf
Sleep(1000)
Send("^!+{F6}")
WinWaitActive("classname=TFormLogon")
ControlSetText("classname=TFormLogon","","TEdit1",$DF_Work_Pass)
ControlClick("classname=TFormLogon","&OK","TButton2")
WinWaitActive("classname=TFormEntry")
ControlClick("classname=TFormEntry","Boot Thawed","TRadioButton1") ;设置冰点为解冻状态
ControlClick("classname=TFormEntry","&OK","TButton12")
WinWaitActive("classname=TFormMsg")
ControlClick("classname=TFormMsg","OK","TButton1")
RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","LogonType","REG_DWORD",0)
AutoLogonREG()
Sleep(500)
SplashOff()
Shutdown(6)
EndIf
EndFunc
Func WriteUP_OKLog() ;记录更新完成日志
$OpenLogFile = FileOpen($ServerDF_Log,1)
If $OpenLogFile <> -1 Then
$WriteOK = FileWriteLine($OpenLogFile,@MON&"月"&@MDAY&"号"&@HOUR&"时"&@MIN&"分 ===> "&@ComputerName&" 号机在非保护状态下的数据更新已自动完成!")
EndIf
FileClose($OpenLogFile)
$OpenLogFile = FileOpen($ServerDF_Log,1)
If $OpenLogFile <> -1 Then
$WriteOK = FileWriteLine($OpenLogFile,@MON&"月"&@MDAY&"号"&@HOUR&"时"&@MIN&"分 ===> "&@ComputerName&" 号机在非保护状态下的数据更新已自动完成!")
EndIf
FileClose($OpenLogFile)
While 1
$i = IniWrite($ServerUP_Log,"维护状态",@ComputerName,"0")
If $i = 1 Then ExitLoop
Sleep(500)
WEnd
Sleep(3000)
EndFunc
Func UnLock_EP() ;自动登陆EP
BlockInput(1)
For $iii = 1 To 30
if WinExists("UserOP") Then
Beep(2000,100)
Sleep(2000)
Send("admin")
Send("{TAB}")
Send($EP_Pass)
Send("{ENTER}")
Sleep(1000)
If Not WinActive("UserOP") Then $iii = 30
EndIf
Sleep(1000)
Next
BlockInput(0)
EndFunc
Func AutoLogonREG() ;重设系统为自动登陆状态(防止EP修改自动登陆帐户及密码)
RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","AutoAdminLogon","REG_SZ",1)
RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","DefaultUserName","REG_SZ",$Sys_AutoUser)
RegWrite("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","DefaultPassword","REG_SZ",$Sys_AutoPass)
EndFunc
Func Lock_KM() ;屏蔽键盘鼠标
BlockInput(1)
EndFunc
Func sndbeep2() ;维护状态提示二声
Beep(4000,100)
Sleep(100)
Beep(4000,100)
EndFunc
Func sndbeep3() ;冰点非保护状态报警三声
For $i = 1 to 3 Step 1
Beep(4000,100)
Sleep(100)
Next
EndFunc
页:
[1]