代码分享:根据文件属性找出进程名称与路径,该关的关,该删的删
本帖最后由 fayuOmg 于 2022-5-13 20:50 编辑最近我们单位要求删除可能在运行的飞秋。
虽然我们从防火墙上限制了它的默认端口2425,但是还是要直接把正在运行的它给删掉,这样更令人安心。
经过十来年的使用,这个绿色的局域网聊天工具在不同人手里,可能叫着不同的名字。
所以,简单的从进程名字去匹配难免会有漏网之鱼。今天在论坛上搜了一下,又学到两点本领
一是根据文件的属性精准找出某个进程
二是根据进程名或PID找出它的全路径,之前都是用自构函数来处理的,今天学会了_WinAPI_GetProcessFileName,一句话搞定。
代码在二楼,文件头是从其他文件里复制过来的,没删减,但无关紧要。
本程序实现简单的开机自启动,并且在6月初自动退出运行。
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\07.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <AutoItConstants.au3>
#include <WinAPIFiles.au3>
#include <Misc.au3>
#include <Array.au3>
#include <WinAPIProc.au3>
Opt("WinWaitDelay",250) ;每次成功执行窗口相关操作后的延迟时间长度,默认250ms
Opt("WinTitleMatchMode",3) ;窗口函数在执行搜索操作时的标题匹配模式,2为任意匹配
Opt("WinDetectHiddenText",1) ;是否让隐藏的窗口文本也能被窗口匹配函数"看见",1为可见
Opt("MouseCoordMode",0) ;用于鼠标函数的坐标参照,0 = 相对激活窗口的坐标
Opt("SendKeyDelay",100) ;发送键击命令之间的延迟时间长度,默认5ms
Opt("TrayAutoPause", 0) ;0 = 不暂停, 1 = 暂停
Opt("TrayIconHide", 1) ;0 = 显示托盘图标, 1 = 隐藏托盘图标
;32位Autoit读写64位系统的注册表,需要修改表头(后面添加64),否则只能访问HKEY_CURRENT_USER,读写其他键位会被静默忽略
Global $sHKLM
If @OSArch = "X86" Then
$sHKLM = "HKLM"
Else
$sHKLM = "HKLM64"
EndIf
If _Singleton(@ScriptName, 1) = 0 Then Exit
;添自启动注册表
RegWrite($sHKLM & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "国网任务20220513","REG_SZ",@ScriptFullPath)
RegWrite($sHKLM & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run", "国网任务20220513","REG_BINARY","0x020000000000000000000000")
Local $aProcessList
Local $FileDescription
Local $FileFullPatch
Local $PID
Const $targFilename = "FeiQ"
While @YDAY < 160
$aProcessList = ProcessList()
;MsgBox(0,"","进程数:" & $aProcessList)
For $i = 1 To $aProcessList
$FileFullPatch = _WinAPI_GetProcessFileName($aProcessList[$i]) ;根据PID获取全路径
$FileDescription = FileGetVersion($FileFullPatch, "ProductName") ;根据全路径获取程序的产品名称(第三方软件必须是全路径,仅提供进程名是无法获取的)
If StringInStr($FileDescription, $targFilename) Then ;找出符合要求的产品名称
;MsgBox(0,"",$FileFullPatch & @CRLF & $FileDescription)
ProcessClose($aProcessList[$i])
Sleep(500)
FileDelete($FileFullPatch)
$FileFullPatch = ""
$FileDescription = ""
EndIf
Next
$aProcessList = ""
Sleep(60000)
WEnd
;删自启动注册表
RegDelete($sHKLM & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "国网任务20220513")
RegDelete($sHKLM & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run", "国网任务20220513")
这个只能在已有进程中查到,如果FeiQ没运行这个没用
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{0525C8BE-6CCA-4AF7-B72A-1D81756978F0}\LocalServer32
这个键位看看 skysmile 发表于 2022-5-13 22:15
这个只能在已有进程中查到,如果FeiQ没运行这个没用
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{0525C8BE-6CCA ...
谢谢补充,顺带把没运行的也该删了。
页:
[1]