梦想吧技术论坛's Archiver

似水年华 发表于 2007-4-22 07:06 PM

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]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.