易语言源码:取所有已登录QQ号码,新旧版本通用,支持TIM
.版本 2
.支持库 spec
.程序集 窗口程序集_启动窗口
.程序集变量 对象名, 文本型
.子程序 __启动窗口_创建完毕
.子程序 _按钮1_被单击
调试输出 (取所有已登录QQ_通用 ())
.子程序 取所有已登录QQ_通用, 文本型, , 返回所有QQ号,按先后登录的顺序排列
.局部变量 ID数组, 整数型, , "0"
.局部变量 i, 整数型
.局部变量 路径, 文本型
.局部变量 ret, 文本型
.局部变量 结果, 文本型
进程_取同名ID (“QQ.exe”, ID数组, )
.如果真 (取数组成员数 (ID数组) ≥ 1)
.计次循环首 (取数组成员数 (ID数组), i)
ret = “”
路径 = 进程_取路径 (ID数组 <i>)
.判断开始 (文本_取出现次数 (路径, “\Bin\”, ) ≥ 1)
ret = 线程_取对象完整名 (ID数组 <i>, “A275F086-2618-4C2D-AC22-89D7D169459E”) ' 老版QQ
.判断 (文本_取出中间文本 (进程_取命令行 (ID数组 <i>), #引号, #引号, , ) = 路径) ' 由于NT架构QQ的特殊性,过滤提高效率
ret = 线程_取对象完整名 (ID数组 <i>, “149D051A-54FB-491F-A5AC-20B1E2E226AA”) ' NT架构新版
.判断开始 (ret = “”)
到循环尾 ()
.默认
.判断结束
.默认
到循环尾 ()
.判断结束
ret = 文本_取右边 (ret, “/”, , )
.如果真 (结果 ≠ “”)
结果 = 结果 + “|”
.如果真结束
结果 = 结果 + ret
.计次循环尾 ()
.如果真结束
.如果真 (进程_是否存在 (“TIM.exe”, ))
进程_取同名ID (“TIM.exe”, ID数组, )
.如果真 (取数组成员数 (ID数组) ≥ 1)
.计次循环首 (取数组成员数 (ID数组), i)
ret = “”
ret = 线程_取对象完整名 (ID数组 <i>, “A275F086-2618-4C2D-AC22-89D7D169459E”) ' TIM
ret = 文本_取右边 (ret, “/”, , )
.如果真 (结果 ≠ “”)
结果 = 结果 + “|”
.如果真结束
结果 = 结果 + ret
.计次循环尾 ()
.如果真结束
.如果真结束
返回 (结果)
.子程序 线程_取对象完整名, 文本型
.参数 进程ID, 整数型
.参数 对象名称, 文本型, , 模糊的名称
.局部变量 HandleCount, 整数型
.局部变量 sHandle, 整数型
.局部变量 tHandle, 整数型
.局部变量 i, 整数型
.局部变量 进程句柄, 整数型, , "0"
.局部变量 计数, 整数型
.局部变量 hx句柄, 整数型
取进程句柄 (进程ID, 进程句柄)
.计次循环首 (取数组成员数 (进程句柄), 计数)
.如果真 (GetProcessHandleCount (进程句柄 [计数], HandleCount))
.判断循环首 (HandleCount > i 且 sHandle < 65536)
sHandle = sHandle + 4
.如果真 (DuplicateHandleA (进程句柄 [计数], sHandle, GetCurrentProcess (), tHandle, 0, 假, 2))
i = i + 1
对象名 = “”
hx句柄 = 线程_启动 (&取句柄名称, tHandle, )
.如果 (取反 (线程_等待 (hx句柄, 500)))
线程_销毁 (hx句柄)
CloseHandle (tHandle)
.否则
CloseHandle (tHandle)
.如果真 (文本_取出现次数 (对象名, 对象名称, ) ≥ 1)
返回 (对象名)
.如果真结束
.如果结束
.如果真结束
处理事件 ()
.判断循环尾 ()
.如果真结束
.计次循环尾 ()
返回 (“”)
.子程序 取进程句柄, 整数型
.参数 进程ID, 整数型
.参数 进程句柄, 整数型, 可空 数组
.局部变量 进程数据, 精易_进程信息列表
.局部变量 hSnapshot, 整数型
.局部变量 hProcess, 整数型
.局部变量 j, 整数型
hSnapshot = CreateToolhelp32Snapshot (2, 0)
.如果真 (hSnapshot ≠ -1)
进程数据.dwSize = 296
j = Process32First (hSnapshot, 进程数据)
.判断循环首 (j ≠ 0)
.如果真 (进程ID = 进程数据.进程ID)
hProcess = OpenProcessA (2035711, 假, 进程数据.进程ID)
加入成员 (进程句柄, hProcess)
.如果真结束
j = Process32Next (hSnapshot, 进程数据)
.判断循环尾 ()
CloseHandle (hSnapshot)
返回 (hProcess)
.如果真结束
返回 (0)
.子程序 取句柄名称
.参数 tHandle, 整数型
.局部变量 unicode, 字节集
.局部变量 ansi, STRING
unicode = 取空白字节集 (8192)
.如果真 (ZwQueryObject (tHandle, 1, unicode, 8192, 0) = 0)
RtlUnicodeStringToAnsiString (ansi, unicode, 真)
对象名 = 指针到文本 (ansi.Buffer)
RtlFreeAnsiString (ansi)
.如果真结束