fayuOmg 发表于 2022-5-13 20:43:35

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

本帖最后由 fayuOmg 于 2022-5-13 20:50 编辑

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

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

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

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

本程序实现简单的开机自启动,并且在6月初自动退出运行。

fayuOmg 发表于 2022-5-13 20:44:09

#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")

skysmile 发表于 2022-5-13 22:15:13

这个只能在已有进程中查到,如果FeiQ没运行这个没用
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{0525C8BE-6CCA-4AF7-B72A-1D81756978F0}\LocalServer32
这个键位看看

fayuOmg 发表于 2022-5-15 23:05:44

skysmile 发表于 2022-5-13 22:15
这个只能在已有进程中查到,如果FeiQ没运行这个没用
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{0525C8BE-6CCA ...

谢谢补充,顺带把没运行的也该删了。
页: [1]
查看完整版本: 代码分享:根据文件属性找出进程名称与路径,该关的关,该删的删