|
|
发表于 2026-1-19 18:50:20
|
显示全部楼层
广东省广州市
.版本 2
.支持库 spec
.DLL命令 EnumWindows, 逻辑型, "user32.dll", "EnumWindows", , 枚举系统所有顶层窗口,回调遍历
.参数 lpEnumFunc, 子程序指针, , 回调子程序的地址
.参数 lParam, 整数型, , 自定义传参,这里传0即可
.DLL命令 GetWindowTextA, 整数型, "user32.dll", "GetWindowTextA", , 获取指定窗口的标题文本
.参数 hwnd, 整数型, , 待获取标题的窗口句柄
.参数 lpString, 文本型, , 接收标题的缓冲区
.参数 cch, 整数型, , 缓冲区最大长度
.DLL命令 GetWindowThreadProcessId, 整数型, "user32.dll", "GetWindowThreadProcessId", , 通过窗口句柄,获取对应进程的PID
.参数 hwnd, 整数型, , 窗口句柄
.参数 lpdwProcessId, 整数型, 传址, , 传出:窗口所属进程的PID
.DLL命令 OpenProcess, 整数型, "kernel32.dll", "OpenProcess", , 打开指定PID的进程,获取进程句柄
.参数 dwDesiredAccess, 整数型, , 申请的权限
.参数 bInheritHandle, 逻辑型, , 是否继承句柄,填假
.参数 dwProcessId, 整数型, , 要打开的进程PID
.DLL命令 TerminateProcess, 逻辑型, "kernel32.dll", "TerminateProcess", , 结束指定进程(核心结束命令)
.参数 hProcess, 整数型, , 进程句柄(由OpenProcess获取)
.参数 uExitCode, 整数型, , 进程退出码,填0即可
.DLL命令 CloseHandle, 逻辑型, "kernel32.dll", "CloseHandle", , 释放打开的进程句柄,防止内存泄漏
.参数 hObject, 整数型, , 要释放的句柄
.子程序 _启动窗口_创建完毕, , , 程序运行后自动执行【结束目标进程】的逻辑,你可以把这段放到任意需要执行的位置
自身进程PID = 取进程ID () ' 关键!获取自己的PID,绝对不杀自己
调试输出 (“自身程序PID:”, 自身进程PID)
EnumWindows (&窗口枚举回调子程序, 0) ' 开始枚举所有窗口,执行筛选+结束逻辑
信息框 (“已完成清理:所有标题为【你好】的1.exe进程已全部结束!”, 0, )
.全局变量 自身进程PID, 整数型, , 存储自己的进程PID,用于防误杀
.子程序 窗口枚举回调子程序, 逻辑型, , EnumWindows的回调子程序,核心筛选逻辑
.参数 窗口句柄, 整数型, , 当前遍历到的窗口句柄
.参数 自定义参数, 整数型, , 无用传参,填0即可
.局部变量 窗口标题, 文本型
.局部变量 目标进程PID, 整数型
.局部变量 进程句柄, 整数型
' 1. 初始化标题缓冲区,获取当前窗口的标题
窗口标题 = 取空白文本 (256)
GetWindowTextA (窗口句柄, 窗口标题, 256)
窗口标题 = 删首尾空 (窗口标题) ' 去除标题前后空格,精准匹配【你好】
' 2. 核心筛选条件:窗口标题 精确等于 【你好】
.如果真 (窗口标题 = “你好”)
' 3. 通过窗口句柄,获取这个窗口所属进程的PID
GetWindowThreadProcessId (窗口句柄, 目标进程PID)
' 4. 防误杀核心判断:如果这个PID是自己的PID,直接跳过,绝对不处理
.如果真 (目标进程PID = 自身进程PID)
返回 (真) ' 继续枚举下一个窗口
.如果真结束
' 5. 打开目标进程,申请【结束进程】的权限
进程句柄 = OpenProcess (1& 或 16&, 假, 目标进程PID)
.如果真 (进程句柄 ≠ 0)
' 6. 执行结束进程操作
TerminateProcess (进程句柄, 0)
' 7. 释放进程句柄,必须加,防止内存泄漏
CloseHandle (进程句柄)
调试输出 (“成功结束:标题为【你好】的进程,PID=”, 目标进程PID)
.如果真结束
.如果真结束
返回 (真) ' 返回真,继续枚举下一个窗口,直到枚举完所有窗口 |
|