|
发表于 2025-2-7 13:06:19
|
显示全部楼层
云南省楚雄彝族自治州
以下是易语言中获取运行程序的解决方案:
e
复制
.版本 2
.支持库 spec
.DLL命令 EnumWindows, 整数型, "user32", "EnumWindows", , 枚举所有窗口
.参数 lpEnumFunc, 子程序指针
.参数 lParam, 整数型
.DLL命令 GetWindowTextA, 整数型, "user32", "GetWindowTextA", , 获取窗口标题
.参数 hWnd, 整数型
.参数 lpString, 文本型
.参数 nMaxCount, 整数型
.DLL命令 IsWindowVisible, 逻辑型, "user32", "IsWindowVisible", , 判断窗口是否可见
.参数 hWnd, 整数型
.DLL命令 GetWindowLongA, 整数型, "user32", "GetWindowLongA", , 获取窗口样式
.参数 hWnd, 整数型
.参数 nIndex, 整数型
.常量 GWL_EXSTYLE, "-20"
.常量 WS_EX_APPWINDOW, "262144"
.常量 WS_EX_TOOLWINDOW, "128"
.程序集 窗口程序集_启动窗口
.程序集变量 全部程序, 文本型, , "0"
.程序集变量 任务栏程序, 文本型, , "0"
.子程序 __启动窗口_创建完毕
.局部变量 空参数, 整数型
EnumWindows(&枚举窗口回调, 空参数)
调试输出 ("全部运行程序:", 全部程序)
调试输出 ("任务栏显示程序:", 任务栏程序)
.子程序 枚举窗口回调, 逻辑型
.参数 hWnd, 整数型
.参数 lParam, 整数型
.局部变量 窗口标题, 文本型
.局部变量 扩展样式, 整数型
.局部变量 可见状态, 逻辑型
窗口标题 = 取空白文本 (255)
GetWindowTextA (hWnd, 窗口标题, 255)
窗口标题 = 删首尾空 (窗口标题)
可见状态 = IsWindowVisible (hWnd)
' 过滤无效窗口
.如果真 (窗口标题 ≠ "" 且 可见状态)
加入成员 (全部程序, 窗口标题)
' 判断是否显示在任务栏
扩展样式 = GetWindowLongA (hWnd, GWL_EXSTYLE)
.如果真 (位与 (扩展样式, WS_EX_APPWINDOW) ≠ 0 且 位与 (扩展样式, WS_EX_TOOLWINDOW) = 0)
加入成员 (任务栏程序, 窗口标题)
.如果真结束
.如果真结束
返回 (真)
代码说明:
使用EnumWindowsAPI枚举所有顶层窗口
通过GetWindowTextA获取窗口标题
通过IsWindowVisible过滤不可见窗口
通过GetWindowLongA获取窗口扩展样式:
包含WS_EX_APPWINDOW样式的窗口会显示在任务栏
包含WS_EX_TOOLWINDOW样式的窗口是工具窗口,不显示在任务栏
结果分为:
全部程序:所有可见窗口
任务栏程序:符合任务栏显示条件的窗口
注意:某些后台进程可能会有隐藏窗口,实际应用中可能需要根据需求添加额外过滤条件。此代码可保存为.e文件直接运行测试。 |
|