找回密码  加入

AUTOIT CN

搜索
查看: 167|回复: 3

[系统综合] 代码分享:根据文件属性找出进程名称与路径,该关的关,该删的删

[复制链接]
发表于 2022-5-13 20:43:35 | 显示全部楼层 |阅读模式
本帖最后由 fayuOmg 于 2022-5-13 20:50 编辑

最近我们单位要求删除可能在运行的飞秋。
虽然我们从防火墙上限制了它的默认端口2425,但是还是要直接把正在运行的它给删掉,这样更令人安心。

经过十来年的使用,这个绿色的局域网聊天工具在不同人手里,可能叫着不同的名字。

所以,简单的从进程名字去匹配难免会有漏网之鱼。今天在论坛上搜了一下,又学到两点本领
一是根据文件的属性精准找出某个进程
二是根据进程名或PID找出它的全路径,之前都是用自构函数来处理的,今天学会了_WinAPI_GetProcessFileName,一句话搞定。

代码在二楼,文件头是从其他文件里复制过来的,没删减,但无关紧要。

本程序实现简单的开机自启动,并且在6月初自动退出运行。
 楼主| 发表于 2022-5-13 20:44:09 | 显示全部楼层
  1. #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
  2. #AutoIt3Wrapper_Icon=..\07.ico
  3. #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
  4. #include <FileConstants.au3>
  5. #include <MsgBoxConstants.au3>
  6. #include <AutoItConstants.au3>
  7. #include <WinAPIFiles.au3>
  8. #include <Misc.au3>
  9. #include <Array.au3>
  10. #include <WinAPIProc.au3>


  11. Opt("WinWaitDelay",250)                        ;每次成功执行窗口相关操作后的延迟时间长度,默认250ms
  12. Opt("WinTitleMatchMode",3)                ;窗口函数在执行搜索操作时的标题匹配模式,2为任意匹配
  13. Opt("WinDetectHiddenText",1)        ;是否让隐藏的窗口文本也能被窗口匹配函数"看见",1为可见
  14. Opt("MouseCoordMode",0)                        ;用于鼠标函数的坐标参照,0 = 相对激活窗口的坐标
  15. Opt("SendKeyDelay",100)                        ;发送键击命令之间的延迟时间长度,默认5ms
  16. Opt("TrayAutoPause", 0)                 ;0 = 不暂停, 1 = 暂停
  17. Opt("TrayIconHide", 1)                         ;0 = 显示托盘图标, 1 = 隐藏托盘图标

  18. ;32位Autoit读写64位系统的注册表,需要修改表头(后面添加64),否则只能访问HKEY_CURRENT_USER,读写其他键位会被静默忽略
  19. Global $sHKLM
  20. If @OSArch = "X86" Then
  21.         $sHKLM = "HKLM"
  22. Else
  23.         $sHKLM = "HKLM64"
  24. EndIf


  25. If _Singleton(@ScriptName, 1) = 0 Then Exit


  26. ;添自启动注册表
  27. RegWrite($sHKLM & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "国网任务20220513","REG_SZ",@ScriptFullPath)
  28. RegWrite($sHKLM & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run", "国网任务20220513","REG_BINARY","0x020000000000000000000000")


  29. Local $aProcessList
  30. Local $FileDescription
  31. Local $FileFullPatch
  32. Local $PID
  33. Const $targFilename = "FeiQ"


  34. While @YDAY < 160

  35.         $aProcessList = ProcessList()
  36.         ;MsgBox(0,"","进程数:" & $aProcessList[0][0])

  37.         For $i = 1 To $aProcessList[0][0]

  38.                         $FileFullPatch = _WinAPI_GetProcessFileName($aProcessList[$i][1])                ;根据PID获取全路径
  39.                         $FileDescription = FileGetVersion($FileFullPatch, "ProductName")                ;根据全路径获取程序的产品名称(第三方软件必须是全路径,仅提供进程名是无法获取的)

  40.                         If StringInStr($FileDescription, $targFilename) Then                ;找出符合要求的产品名称
  41.                                 ;MsgBox(0,"",$FileFullPatch & @CRLF & $FileDescription)
  42.                                 ProcessClose($aProcessList[$i][1])
  43.                                 Sleep(500)
  44.                                 FileDelete($FileFullPatch)
  45.                                 $FileFullPatch = ""
  46.                                 $FileDescription = ""
  47.                         EndIf
  48.         Next

  49.         $aProcessList = ""
  50.         Sleep(60000)

  51. WEnd


  52. ;删自启动注册表
  53. RegDelete($sHKLM & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "国网任务20220513")
  54. RegDelete($sHKLM & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run", "国网任务20220513")
复制代码

发表于 2022-5-13 22:15:13 | 显示全部楼层
这个只能在已有进程中查到,如果FeiQ没运行这个没用
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{0525C8BE-6CCA-4AF7-B72A-1D81756978F0}\LocalServer32
这个键位看看
 楼主| 发表于 2022-5-15 23:05:44 | 显示全部楼层
skysmile 发表于 2022-5-13 22:15
这个只能在已有进程中查到,如果FeiQ没运行这个没用
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{0525C8BE-6CCA ...

谢谢补充,顺带把没运行的也该删了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|小黑屋|手机版|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2022-5-24 08:32 , Processed in 0.171875 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表