AM电脑吧 - Win10精简版系统_Win11精简版_Win7旗舰版

Yes
查看: 6534|回复: 4
收起左侧

[其它] WinXP服务优化【可自定义,可备份,源码+成品=转载】

[复制链接]
ampc84

签到天数: 15 天

[LV.4]四枚内存条

id ②號 发表于 2013-03-01 13:38:02
WinXP服务优化【可自定义,可备份,源码+成品】转载自网络。1. 用sc.exe读取本机的所有服务并获取服务名称,存入txt文件
2. 依次读取txt文件中的服务名称,找到注册表中对应的服务,备份服务的详细信息(服务名称,启动状态等)到ini文件
3. 恢复服务,读取备份ini文件中服务信息,写入注册表,以便恢复服务
4. 读取服务优化文件(ini),写入注册表,以便优化服务



成品:  

源码如下:
  1. #Region ;**** 参数创建于 ACNWrapper_GUI ****
  2. #PRE_icon=..\..\..\Windows\syswow64\SHELL32.dll|-81
  3. #PRE_Outfile=WinXP服务优化.exe
  4. #PRE_UseUpx=n
  5. #PRE_UseX64=n
  6. #PRE_Res_Comment=用于WindowsXP服务备份,还原,优化等.
  7. #PRE_Res_Description=WinXP服务优化
  8. #PRE_Res_Fileversion=2.0.4.1
  9. #PRE_Res_LegalCopyright=网络
  10. #PRE_Res_requestedExecutionLevel=None
  11. #EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
  12. #include <GUIConstantsEx.au3>
  13. #include <ListViewConstants.au3>
  14. #include <WindowsConstants.au3>
  15. #include <ServiceControl.au3>
  16. #include <Date.au3>

  17. ;Opt("TrayIconHide", 1) ;隐藏托盘图标
  18. Opt("GUICloseOnESC", 0) ;按下WSC键时,不停止程序运行
  19. Opt("OnExitFunc", "Quit") ;设置在Autoit退出时,运行Quite函数

  20. $Form1 = GUICreate("WindowsXP服务优化", 560, 390, -1, -1)
  21. $ListView1 = GUICtrlCreateListView("ID|   名 称   |     描   述     | 状 态 |类 型", 25, 50, 510, 250)
  22. ;$listitem1 = GUICtrlCreateListViewItem("01|Dhcp|dhcp动态获取IP地址|启用|自动", $ListView1)

  23. $Group1 = GUICtrlCreateGroup("", 25, 310, 510, 58)
  24. $Butt_bak = GUICtrlCreateButton("备份服务(&B)", 60, 330, 89, 25, 0)
  25. $butt_restore = GUICtrlCreateButton("恢复服务(&R)", 180, 330, 89, 25)
  26. $Butt_ok = GUICtrlCreateButton("优化服务(&O)", 300, 330, 89, 25, 0)
  27. $Butt_exit = GUICtrlCreateButton("退 出(&X)", 420, 330, 89, 25, 0)
  28. GUICtrlCreateGroup("", -99, -99, 1, 1)

  29. GUISetState(@SW_SHOW)

  30. Get_srv_name()
  31. display_srv()

  32. While 1
  33. $nMsg = GUIGetMsg()
  34. Switch $nMsg
  35.    Case $GUI_EVENT_CLOSE
  36.     Exit
  37.    Case $Butt_exit
  38.     Exit
  39.    Case $Butt_bak
  40.     back_srv()
  41.    Case $butt_restore
  42.     restore_srv()
  43.    Case $Butt_ok
  44.     op_srv()
  45. EndSwitch
  46. WEnd

  47. ;获取系统服务名称
  48. Func Get_srv_name()
  49. If Not (FileExists(@SystemDir & "sc.exe")) Then ;如果系统目录(C:\windows\system32下没有sc.exe文件的话
  50.    FileCopy(@ScriptDir & "\sc.exe", @SystemDir, 1) ;拷贝sc.exe到是系统目录下
  51. EndIf
  52. If Not (FileExists(@TempDir & "\srv_name.bat")) Then ;如果当前目录下没有srv_name.bat文件
  53.    $srv_bat = FileOpen(@TempDir & "\srv_name.bat", 10) ;创建srv_name.bat文件
  54.    FileWriteLine($srv_bat, "echo off")
  55.    FileWriteLine($srv_bat, "cls")
  56.    FileWriteLine($srv_bat, "title 获取本机系统服务的名称")
  57.    FileWriteLine($srv_bat, "rem get all service name")
  58.    FileWriteLine($srv_bat, "sc query type= service state= all| findstr /r /C:" & '"' & "SERVICE_NAME:" & '"' & " >srv_name.txt")
  59.    FileWriteLine($srv_bat, "rem pause")
  60.    FileClose($srv_bat)
  61. EndIf ;==>srv_name.bat文件创建完毕
  62. RunWait(@TempDir & "\srv_name.bat", @TempDir, @SW_HIDE) ;运行srv_name.bat,得到srv_name.txt文件
  63. EndFunc   ;==>Get_srv_name

  64. ;显示服务详情
  65. Func display_srv()
  66. $srv_name_file = @TempDir & "\srv_name.txt"
  67. If Not (FileExists($srv_name_file)) Then
  68.    MsgBox(16, "错误", $srv_name_file & " 文件不存在!")
  69.    Exit
  70. EndIf

  71. $file = FileOpen($srv_name_file, 0)
  72. If $file = -1 Then
  73.    MsgBox(0, "错误", "不能打开文件.")
  74.    Exit
  75. EndIf
  76. $i = 1
  77. While 1
  78.    $line = FileReadLine($file)
  79.    ;=======================================
  80.    ;说明:
  81.    ;StringTrimLeft
  82.    ;删除字符串中从左开始指定数量的字符.
  83.    ;StringTrimLeft ( "字符串", 数量 )
  84.    ;=======================================
  85.    If @error = -1 Then ExitLoop
  86.    $srv_name = StringTrimLeft($line, 14)
  87.    ToolTip("正在获取 " & $srv_name & " 服务状态...", @DesktopWidth / 2, @DesktopHeight / 2, "请稍候", 0, 2)
  88.    $display_name = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $srv_name, "DisplayName")
  89.    If $display_name = "" Then $display_name = $srv_name
  90.    $Description = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $srv_name, "Description")
  91.    $state = _ServGetState($srv_name)
  92.    If $state = "running" Then
  93.     $srv_state = "已启动"
  94.    ElseIf $state = "stopped" Then
  95.     $srv_state = "已停止"
  96.    EndIf
  97.    $start = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $srv_name, "Start")
  98.    If $start = 2 Then
  99.     $srv_start = "自动"
  100.    ElseIf $start = 3 Then
  101.     $srv_start = "手动"
  102.    ElseIf $start = 4 Then
  103.     $srv_start = "禁用"
  104.    EndIf

  105.    GUICtrlCreateListViewItem($i & "|" & $display_name & "|" & $Description & "|" & $srv_state & "|" & $srv_start, $ListView1)
  106.    $i = $i + 1
  107. WEnd
  108. ToolTip("")
  109. FileClose($file)
  110. EndFunc   ;==>display_srv

  111. ;备份服务
  112. Func back_srv()
  113. $srv_name_file = FileSaveDialog("备份系统服务--请输入备份文件的名称", @MyDocumentsDir & "", "(*.ini)", 2 + 16, "Servuces_bak.ini")
  114. If @error Then
  115.    MsgBox(64, "信息", "取消备份        ")
  116. Else
  117.    Get_srv_name()
  118.    $srv_bak = FileOpen($srv_name_file, 10)
  119.    FileWriteLine($srv_bak, ";系统服务,备份于 " & _Now())
  120.    FileWriteLine($srv_bak, "")
  121.    FileWriteLine($srv_bak, "[services]")
  122.    FileClose($srv_bak)

  123.    $file = FileOpen(@TempDir & "\srv_name.txt", 0)
  124.    If $file = -1 Then
  125.     MsgBox(0, "错误", "不能打开文件.")
  126.     Exit
  127.    EndIf

  128.    While 1
  129.     $line = FileReadLine($file)
  130.     ;=======================================
  131.     ;说明:
  132.     ;StringTrimLeft
  133.     ;删除字符串中从左开始指定数量的字符.
  134.     ;StringTrimLeft ( "字符串", 数量 )
  135.     ;=======================================
  136.     If @error = -1 Then ExitLoop
  137.     $srv_name = StringTrimLeft($line, 14)
  138.     $srv_type = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $srv_name, "Start")
  139.     TrayTip("正在备份服务...", $srv_name, 0, 1)
  140.     IniWrite($srv_name_file, "services", $srv_name, $srv_type)
  141.     ;Sleep(20)
  142.    WEnd
  143.    TrayTip("清除任何托盘提示", "", 0)
  144.    MsgBox(64, "成功", "服务备份成功" & @CRLF & @CRLF & "备份文件为: " & $srv_name_file)
  145.    FileClose($srv_bak)
  146.    FileClose($file)
  147. EndIf
  148. EndFunc   ;==>back_srv

  149. ;恢复服务
  150. Func restore_srv()
  151. $file_bak = FileOpenDialog("请选择备份文件", @MyDocumentsDir & "", "配置文件 (*.ini)", 1 + 2)
  152. If @error Then
  153.    MsgBox(64, "信息", "取消恢复        ")
  154. Else
  155.    #Region --- CodeWizard generated code Start ---
  156.    ;MsgBox features: Title=Yes, Text=Yes, Buttons=Yes and No, Icon=Question
  157.    If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
  158.    $iMsgBoxAnswer = MsgBox(36, "询问", "是否使用该备份文件恢复系统服务?")
  159.    Select
  160.     Case $iMsgBoxAnswer = 6 ;Yes
  161.      $var = IniReadSection($file_bak, "services")
  162.      If @error Then
  163.       MsgBox(16, "错误", "备份文件出错")
  164.      Else
  165.       For $i = 1 To $var[0][0]
  166.        ;MsgBox(4096, "", "Key: " & $var[$i][0] & @CRLF & "Value: " & $var[$i][1])
  167.        ;MsgBox(4096,"test","HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $var[$i][0] & @CRLF & @CRLF & "start=" & $var[$i][1])
  168.        If $var[$i][1] = 2 Then
  169.         $srv_start = "自动"
  170.        ElseIf $var[$i][1] = 3 Then
  171.         $srv_start = "手动"
  172.        ElseIf $var[$i][1] = 4 Then
  173.         $srv_start = "禁用"
  174.        EndIf
  175.        TrayTip("正在恢复...", $var[$i][0] & " 服务 ==> " & $srv_start, 0, 1)
  176.        ;Sleep(50)
  177.        RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $var[$i][0], "Start", "REG_DWORD", $var[$i][1])
  178.       Next
  179.       TrayTip("清除任何托盘提示", "", 0)
  180.       MsgBox(64, "恢复完毕", "服务成功恢复,请重启计算机!!!")
  181.      EndIf

  182.     Case $iMsgBoxAnswer = 7 ;No

  183.      MsgBox(64, "信息", "已取消系统服务的恢复")


  184.    EndSelect
  185.    #EndRegion --- CodeWizard generated code Start ---
  186. EndIf
  187. EndFunc   ;==>restore_srv

  188. ;优化服务
  189. Func op_srv()
  190. $file_op = @ScriptDir & "\Srv_OP.ini"
  191. If Not (FileExists($file_op)) Then
  192.    MsgBox(16, "错误", "配置文件: " & $file_op & " 不存在!")
  193.    Exit
  194. EndIf
  195. ;设置自动服务
  196. $var = IniReadSection($file_op, "Auto")
  197. If @error Then
  198.    MsgBox(16, "错误", "配置文件出错")
  199. Else
  200.    For $i = 1 To $var[0][0]
  201.     TrayTip("正在优化...", $var[$i][0] & " 服务 ==> 自动", 0, 1)
  202.     ;Sleep(50)
  203.     RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $var[$i][0], "Start", "REG_DWORD", $var[$i][1])
  204.    Next
  205.    TrayTip("清除任何托盘提示", "", 0)
  206. EndIf

  207. ;设置手动服务
  208. $var = IniReadSection($file_op, "Demand")
  209. If @error Then
  210.    MsgBox(16, "错误", "配置文件出错")
  211. Else
  212.    For $i = 1 To $var[0][0]
  213.     TrayTip("正在优化...", $var[$i][0] & " 服务 ==> 手动", 0, 1)
  214.     Sleep(50)
  215.     RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $var[$i][0], "Start", "REG_DWORD", $var[$i][1])
  216.    Next
  217.    TrayTip("清除任何托盘提示", "", 0)
  218. EndIf

  219. ;禁用服务
  220. $var = IniReadSection($file_op, "Disable")
  221. If @error Then
  222.    MsgBox(16, "错误", "配置文件出错")
  223. Else
  224.    For $i = 1 To $var[0][0]
  225.     TrayTip("正在优化...", $var[$i][0] & " 服务 ==> 禁用", 0, 1)
  226.     Sleep(50)
  227.     RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $var[$i][0], "Start", "REG_DWORD", $var[$i][1])
  228.    Next
  229.    TrayTip("清除任何托盘提示", "", 0)
  230. EndIf
  231. ;Get_srv_name()
  232. ;display_srv()
  233. MsgBox(64, "优化完毕", "服务优化,请重新启计算机!!!")

  234. EndFunc   ;==>op_srv


  235. ;退出清理文件
  236. Func Quit()
  237. GUISetState(@SW_HIDE)
  238. DllCall($Dll, "int:cdecl", "DeInitDecoration")
  239. DllClose($Dll)
  240. FileDelete(@TempDir & "\srv_name.bat")
  241. FileDelete(@TempDir & "\srv_name.txt")

  242. Exit
  243. EndFunc   ;==>Quit
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?验证注册

x

本文地址: https://www.ampc8.com/thread-11175-1-1.html
上一篇:Windows 8如何采用OA 3.0防止传统JiHuo修改?
下一篇:打开关闭无线网络服务[转]
回复

举报

ampc829463

签到天数: 68 天

[LV.6]六个主机箱

id 渴望光明88 发表于 2016-11-06 09:21:54
谢谢 正需要呢
回复

举报

ampc839210

签到天数: 271 天

[LV.8]八秒开机

id trhy1234567 发表于 2016-10-28 20:01:05
收藏了,谢谢分享
回复

举报

ampc830892

签到天数: 239 天

[LV.7]七个CPU

id sqc123 发表于 2015-11-15 09:20:17
太好了正需要,不知道在8.1 10下可不可以用
回复

举报

ampc824422

签到天数: 5 天

[LV.2]二兆带宽

id sglcszp 发表于 2015-02-17 03:11:00
收藏了, 不错
回复

举报

您需要登录后才可以回帖 登录 | 验证注册

Powered by AMpc8.Com (晋ICP备13003365号ghs 晋公网安备 14090202000112号 |GMT+8, 2025/5/1 17:42 | A
快速回复 返回顶部 返回列表