Lua 中 获取各种系统环境信息用法 for Win32Exts
Win32Exts 是一个支持多种脚本语言(VBS, JS, Lua, Python, Java)的 Win32 扩展库, 通过它,你能够像C/C++ 一般
调用任意系统或者第三方API,实现强大的功能需求。
40.2020.2.24 之后版本新增了若干直接方便的获取系统信息的接口,包括枚举 进程、线程、服务、注册表、Dll模块、用户、窗口、工作站、导入表、导出表、目录、内存堆、窗口属性、菜单 等等系统环境信息。
库地址: https://github.com/tankaishuai/win32exts_for_Lua
1、枚举目录:
ret_table = win32exts.list_directory( dir_path, [filter] )
ret_table = win32exts.list_directory_v2( dir_path, [filter, is_use_filter_to_dir, max_depth ] )
2、枚举目录:
以上是根据传统磁盘文件系统进行查询。也可以使用操作系统Shell的目录树结构进行查询。例如:
ret_table, owner_pidl = win32exts.list_shell_folder( [dir_path, filter] )
3、枚举进程模块:
ret_table = win32exts.list_module( [process_id, filter] )
ret_table = win32exts.list_module_v2( [process_id, filter] )
ret_table = win32exts.list_module_v3( [process_id, filter] )
4、枚举进程列表:
ret_table = win32exts.list_process( [filter] )
ret_table = win32exts.list_process_v2( [filter] )
ret_table = win32exts.list_process_thread( [process_id, filter, ...] )
5、枚举线程列表:
ret_table = win32exts.list_thread( [process_id] )
ret_table = win32exts.list_process_thread( [process_id, filter, ...] )
6、枚举(子)窗口列表:
ret_table = win32exts.list_window( [parent_hwnd, filter] )
ret_table = win32exts.list_window_v2( [parent_hwnd, filter, is_filter_used_parent, list_depth, list_visible_only] )
7、枚举线程窗口列表:
ret_table = win32exts.list_thread_window( [thread_id] )
ret_table = win32exts.list_thread_window_v2( [thread_id, filter, is_filter_used_parent, list_depth, list_visible_only] )
8、枚举 窗口站 -> 桌面 -> 窗口列表 3级结构:
ret_table = win32exts.list_winsta()
9、枚举进程内 模块资源 - 类型 - Id - 语言 3级列表:
ret_table = win32exts.list_resource( [hModule] )
10、枚举服务列表:
ret_table = win32exts.list_service( [filter] )
ret_table = win32exts.list_service_v2( [filter] )
11、枚举窗口属性列表:
ret_table = win32exts.list_window_prop( hWnd )
12、枚举注册表子键:
ret_table = win32exts.list_registry_key( "HKEY_***", sub_key_path )
13、枚举注册表子键下数据:
ret_table = win32exts.list_registry_value( "HKEY_***", sub_key_path )
14、枚举当前系统账户列表:
ret_table = win32exts.list_user( [filter] )
15、枚举模块导出函数列表:
ret_table = win32exts.list_export_function( [hModule] )
16、枚举模块导入函数、依赖模块列表:
ret_api_table, ret_dll_table = win32exts.list_import_function( filePath )
17、枚举进程堆信息 列表:
ret_table = win32exts.list_heap()
ret_table = win32exts.list_heap_v2( [process_id] )
18、枚举菜单信息 列表:
ret_table = win32exts.list_menu( hPopupMenu )
ret_table = win32exts.list_menu_v2( hTitleBarMenu )
19、枚举进程已打开的文件列表信息:
ret_table = win32exts.list_process_filehandle( [filter, max_count, use_multi_thread] )
20、枚举文件被哪些进程占用的进程列表信息:
ret_table = win32exts.list_filehandle_process( [filter, max_count, use_multi_thread] )
比如 自己打开一个文件 top.png, 查询该文件被哪些进程占用着:
21、枚举磁盘驱动器列表信息:
ret_table = win32exts.list_drive()
22、枚举系统卷信息,以及挂载点信息:
ret_tab = win32exts.list_volume()
ret_tab = win32exts.list_volume_mount_point(root_dir_path)
23、枚举文件名称链接信息:
ret_tab = win32exts.list_link_name(file_path)
可见该文件存在一个链接符号。
24、枚举文件交换数据流(ADS)信息:
ret_tab = win32exts.list_stream(file_path)
ret_tab = win32exts.list_stream_v2(file_path)
可见该文件存在3个额外的数据流。
25、枚举浏览器缓存信息:
ret_tab = win32exts.list_cache_entry(mask, [max_count])
26、使用 WMI 接口查询各种系统信息:
以上提供的接口基本上覆盖了所有常见的查询需求。另外 Win32Exts for Lua v43.2020.3.2 以后版本还支持
直接查询 WMI。例如以下使用 WMI 查询进程列表信息:
ret_table = win32exts.exec_wql( sql, [limit_count, is_notify_query] )
以上是同步方式查询,也可以进行异步方式查询,如下:
ret_table = win32exts.capture_win_changes( [ wait_event, async_exec_command] )
第一次传入异步执行 sql 查询语句,因为是异步操作,通常不能返回有用的结果(除非设置了 wait_event 参数)。
待需要时,第二次查询可以获取到返回结果信息。