WinXP服务优化【可自定义,可备份,源码+成品】转载自网络。1. 用sc.exe读取本机的所有服务并获取服务名称,存入txt文件
2. 依次读取txt文件中的服务名称,找到注册表中对应的服务,备份服务的详细信息(服务名称,启动状态等)到ini文件
3. 恢复服务,读取备份ini文件中服务信息,写入注册表,以便恢复服务
4. 读取服务优化文件(ini),写入注册表,以便优化服务
成品:
源码如下:- #Region ;**** 参数创建于 ACNWrapper_GUI ****
- #PRE_icon=..\..\..\Windows\syswow64\SHELL32.dll|-81
- #PRE_Outfile=WinXP服务优化.exe
- #PRE_UseUpx=n
- #PRE_UseX64=n
- #PRE_Res_Comment=用于WindowsXP服务备份,还原,优化等.
- #PRE_Res_Description=WinXP服务优化
- #PRE_Res_Fileversion=2.0.4.1
- #PRE_Res_LegalCopyright=网络
- #PRE_Res_requestedExecutionLevel=None
- #EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
- #include <GUIConstantsEx.au3>
- #include <ListViewConstants.au3>
- #include <WindowsConstants.au3>
- #include <ServiceControl.au3>
- #include <Date.au3>
- ;Opt("TrayIconHide", 1) ;隐藏托盘图标
- Opt("GUICloseOnESC", 0) ;按下WSC键时,不停止程序运行
- Opt("OnExitFunc", "Quit") ;设置在Autoit退出时,运行Quite函数
- $Form1 = GUICreate("WindowsXP服务优化", 560, 390, -1, -1)
- $ListView1 = GUICtrlCreateListView("ID| 名 称 | 描 述 | 状 态 |类 型", 25, 50, 510, 250)
- ;$listitem1 = GUICtrlCreateListViewItem("01|Dhcp|dhcp动态获取IP地址|启用|自动", $ListView1)
- $Group1 = GUICtrlCreateGroup("", 25, 310, 510, 58)
- $Butt_bak = GUICtrlCreateButton("备份服务(&B)", 60, 330, 89, 25, 0)
- $butt_restore = GUICtrlCreateButton("恢复服务(&R)", 180, 330, 89, 25)
- $Butt_ok = GUICtrlCreateButton("优化服务(&O)", 300, 330, 89, 25, 0)
- $Butt_exit = GUICtrlCreateButton("退 出(&X)", 420, 330, 89, 25, 0)
- GUICtrlCreateGroup("", -99, -99, 1, 1)
- GUISetState(@SW_SHOW)
- Get_srv_name()
- display_srv()
- While 1
- $nMsg = GUIGetMsg()
- Switch $nMsg
- Case $GUI_EVENT_CLOSE
- Exit
- Case $Butt_exit
- Exit
- Case $Butt_bak
- back_srv()
- Case $butt_restore
- restore_srv()
- Case $Butt_ok
- op_srv()
- EndSwitch
- WEnd
- ;获取系统服务名称
- Func Get_srv_name()
- If Not (FileExists(@SystemDir & "sc.exe")) Then ;如果系统目录(C:\windows\system32下没有sc.exe文件的话
- FileCopy(@ScriptDir & "\sc.exe", @SystemDir, 1) ;拷贝sc.exe到是系统目录下
- EndIf
- If Not (FileExists(@TempDir & "\srv_name.bat")) Then ;如果当前目录下没有srv_name.bat文件
- $srv_bat = FileOpen(@TempDir & "\srv_name.bat", 10) ;创建srv_name.bat文件
- FileWriteLine($srv_bat, "echo off")
- FileWriteLine($srv_bat, "cls")
- FileWriteLine($srv_bat, "title 获取本机系统服务的名称")
- FileWriteLine($srv_bat, "rem get all service name")
- FileWriteLine($srv_bat, "sc query type= service state= all| findstr /r /C:" & '"' & "SERVICE_NAME:" & '"' & " >srv_name.txt")
- FileWriteLine($srv_bat, "rem pause")
- FileClose($srv_bat)
- EndIf ;==>srv_name.bat文件创建完毕
- RunWait(@TempDir & "\srv_name.bat", @TempDir, @SW_HIDE) ;运行srv_name.bat,得到srv_name.txt文件
- EndFunc ;==>Get_srv_name
- ;显示服务详情
- Func display_srv()
- $srv_name_file = @TempDir & "\srv_name.txt"
- If Not (FileExists($srv_name_file)) Then
- MsgBox(16, "错误", $srv_name_file & " 文件不存在!")
- Exit
- EndIf
- $file = FileOpen($srv_name_file, 0)
- If $file = -1 Then
- MsgBox(0, "错误", "不能打开文件.")
- Exit
- EndIf
- $i = 1
- While 1
- $line = FileReadLine($file)
- ;=======================================
- ;说明:
- ;StringTrimLeft
- ;删除字符串中从左开始指定数量的字符.
- ;StringTrimLeft ( "字符串", 数量 )
- ;=======================================
- If @error = -1 Then ExitLoop
- $srv_name = StringTrimLeft($line, 14)
- ToolTip("正在获取 " & $srv_name & " 服务状态...", @DesktopWidth / 2, @DesktopHeight / 2, "请稍候", 0, 2)
- $display_name = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $srv_name, "DisplayName")
- If $display_name = "" Then $display_name = $srv_name
- $Description = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $srv_name, "Description")
- $state = _ServGetState($srv_name)
- If $state = "running" Then
- $srv_state = "已启动"
- ElseIf $state = "stopped" Then
- $srv_state = "已停止"
- EndIf
- $start = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $srv_name, "Start")
- If $start = 2 Then
- $srv_start = "自动"
- ElseIf $start = 3 Then
- $srv_start = "手动"
- ElseIf $start = 4 Then
- $srv_start = "禁用"
- EndIf
- GUICtrlCreateListViewItem($i & "|" & $display_name & "|" & $Description & "|" & $srv_state & "|" & $srv_start, $ListView1)
- $i = $i + 1
- WEnd
- ToolTip("")
- FileClose($file)
- EndFunc ;==>display_srv
- ;备份服务
- Func back_srv()
- $srv_name_file = FileSaveDialog("备份系统服务--请输入备份文件的名称", @MyDocumentsDir & "", "(*.ini)", 2 + 16, "Servuces_bak.ini")
- If @error Then
- MsgBox(64, "信息", "取消备份 ")
- Else
- Get_srv_name()
- $srv_bak = FileOpen($srv_name_file, 10)
- FileWriteLine($srv_bak, ";系统服务,备份于 " & _Now())
- FileWriteLine($srv_bak, "")
- FileWriteLine($srv_bak, "[services]")
- FileClose($srv_bak)
- $file = FileOpen(@TempDir & "\srv_name.txt", 0)
- If $file = -1 Then
- MsgBox(0, "错误", "不能打开文件.")
- Exit
- EndIf
- While 1
- $line = FileReadLine($file)
- ;=======================================
- ;说明:
- ;StringTrimLeft
- ;删除字符串中从左开始指定数量的字符.
- ;StringTrimLeft ( "字符串", 数量 )
- ;=======================================
- If @error = -1 Then ExitLoop
- $srv_name = StringTrimLeft($line, 14)
- $srv_type = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $srv_name, "Start")
- TrayTip("正在备份服务...", $srv_name, 0, 1)
- IniWrite($srv_name_file, "services", $srv_name, $srv_type)
- ;Sleep(20)
- WEnd
- TrayTip("清除任何托盘提示", "", 0)
- MsgBox(64, "成功", "服务备份成功" & @CRLF & @CRLF & "备份文件为: " & $srv_name_file)
- FileClose($srv_bak)
- FileClose($file)
- EndIf
- EndFunc ;==>back_srv
- ;恢复服务
- Func restore_srv()
- $file_bak = FileOpenDialog("请选择备份文件", @MyDocumentsDir & "", "配置文件 (*.ini)", 1 + 2)
- If @error Then
- MsgBox(64, "信息", "取消恢复 ")
- Else
- #Region --- CodeWizard generated code Start ---
- ;MsgBox features: Title=Yes, Text=Yes, Buttons=Yes and No, Icon=Question
- If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
- $iMsgBoxAnswer = MsgBox(36, "询问", "是否使用该备份文件恢复系统服务?")
- Select
- Case $iMsgBoxAnswer = 6 ;Yes
- $var = IniReadSection($file_bak, "services")
- If @error Then
- MsgBox(16, "错误", "备份文件出错")
- Else
- For $i = 1 To $var[0][0]
- ;MsgBox(4096, "", "Key: " & $var[$i][0] & @CRLF & "Value: " & $var[$i][1])
- ;MsgBox(4096,"test","HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $var[$i][0] & @CRLF & @CRLF & "start=" & $var[$i][1])
- If $var[$i][1] = 2 Then
- $srv_start = "自动"
- ElseIf $var[$i][1] = 3 Then
- $srv_start = "手动"
- ElseIf $var[$i][1] = 4 Then
- $srv_start = "禁用"
- EndIf
- TrayTip("正在恢复...", $var[$i][0] & " 服务 ==> " & $srv_start, 0, 1)
- ;Sleep(50)
- RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $var[$i][0], "Start", "REG_DWORD", $var[$i][1])
- Next
- TrayTip("清除任何托盘提示", "", 0)
- MsgBox(64, "恢复完毕", "服务成功恢复,请重启计算机!!!")
- EndIf
- Case $iMsgBoxAnswer = 7 ;No
- MsgBox(64, "信息", "已取消系统服务的恢复")
- EndSelect
- #EndRegion --- CodeWizard generated code Start ---
- EndIf
- EndFunc ;==>restore_srv
- ;优化服务
- Func op_srv()
- $file_op = @ScriptDir & "\Srv_OP.ini"
- If Not (FileExists($file_op)) Then
- MsgBox(16, "错误", "配置文件: " & $file_op & " 不存在!")
- Exit
- EndIf
- ;设置自动服务
- $var = IniReadSection($file_op, "Auto")
- If @error Then
- MsgBox(16, "错误", "配置文件出错")
- Else
- For $i = 1 To $var[0][0]
- TrayTip("正在优化...", $var[$i][0] & " 服务 ==> 自动", 0, 1)
- ;Sleep(50)
- RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $var[$i][0], "Start", "REG_DWORD", $var[$i][1])
- Next
- TrayTip("清除任何托盘提示", "", 0)
- EndIf
- ;设置手动服务
- $var = IniReadSection($file_op, "Demand")
- If @error Then
- MsgBox(16, "错误", "配置文件出错")
- Else
- For $i = 1 To $var[0][0]
- TrayTip("正在优化...", $var[$i][0] & " 服务 ==> 手动", 0, 1)
- Sleep(50)
- RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $var[$i][0], "Start", "REG_DWORD", $var[$i][1])
- Next
- TrayTip("清除任何托盘提示", "", 0)
- EndIf
- ;禁用服务
- $var = IniReadSection($file_op, "Disable")
- If @error Then
- MsgBox(16, "错误", "配置文件出错")
- Else
- For $i = 1 To $var[0][0]
- TrayTip("正在优化...", $var[$i][0] & " 服务 ==> 禁用", 0, 1)
- Sleep(50)
- RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $var[$i][0], "Start", "REG_DWORD", $var[$i][1])
- Next
- TrayTip("清除任何托盘提示", "", 0)
- EndIf
- ;Get_srv_name()
- ;display_srv()
- MsgBox(64, "优化完毕", "服务优化,请重新启计算机!!!")
- EndFunc ;==>op_srv
- ;退出清理文件
- Func Quit()
- GUISetState(@SW_HIDE)
- DllCall($Dll, "int:cdecl", "DeInitDecoration")
- DllClose($Dll)
- FileDelete(@TempDir & "\srv_name.bat")
- FileDelete(@TempDir & "\srv_name.txt")
- Exit
- EndFunc ;==>Quit
复制代码
|