|

分享源码
界面截图: |
|
是否带模块: |
纯源码 |
备注说明: |
- |
本帖最后由 泆寒 于 2016-5-6 01:58 编辑
初来贵地.手下留情.
版面上看了个精华,感觉处理的方式欠妥。故此分享一下。
IsHungAppWindow
SendMessageTimeout
上面两函数就不多介绍了,字面上就看明白了.
两者都是基于窗口句柄的.要检测是否挂起/暂停.最好的方式是通过窗口所在线程的状态值去判断.而不是通过等待窗口响应去判断这个进程/线程是否被挂起.
代码通过NtQuerySystemInformation的5号功能SystemProcessesAndThreadsInformation获取其线程的状态值. 返回 (检测过程 (进程ID )) 变量名 | 类 型 | 静态 | 数组 | 备 注 | pid | 整数型 | | | tid | 整数型 | | |
tid = GetWindowThreadProcessId (窗口句柄, pid )返回 (检测过程 (pid, tid )) 变量名 | 类 型 | 静态 | 数组 | 备 注 | buf | 字节集 | | | len | 整数型 | | | ret | 整数型 | | | lpbuf | 整数型 | | | offset | 整数型 | | | count | 整数型 | | | i | 整数型 | | | NtQuerySystemInformation (5, buf, 0, len ) buf = 取空白字节集 (len )ret = NtQuerySystemInformation (5, buf, len, 0 ) 如果真 (ret = 0 ) lpbuf = 取指针_字节集型 (buf ) offset = 指针到整数 (lpbuf ) 判断循环首 (offset ≠ 0 )  如果真 (指针到整数 (lpbuf + 68 ) = pid )    count = 指针到整数 (lpbuf + 4 )    lpbuf = lpbuf + 184    计次循环首 (count, i )    如果真 (i = 1 )     如果真 (是否为空 (tid ))      返回 (指针到整数 (lpbuf + 56 ) = 5 )           如果真 (指针到整数 (lpbuf + 36 ) = tid )    返回 (指针到整数 (lpbuf + 56 ) = 5 )   lpbuf = lpbuf + 64
   计次循环尾 ()  跳出循环 () offset = 指针到整数 (lpbuf)
  lpbuf = lpbuf + offset  判断循环尾 ()返回 (假)置入代码 ({ 139, 69, 8, 139, 0, 133, 192, 15, 132, 3, 0, 0, 0, 131, 192, 8, 201, 194, 4, 0 })返回 (0 )置入代码 ({ 139, 69, 8, 139, 0, 201, 194, 4, 0 })返回 (0 )
|
评分
-
参与人数 3 | 好评 +2 |
精币 +16 |
收起
理由
|
冰点
| + 1 |
+ 10 |
精彩文章希望继续努力 |
散落的记忆
| |
+ 2 |
感谢发布原创作品,精易因你更精彩! |
leiyh
| + 1 |
+ 4 |
奉上小小红包希望笑纳 |
查看全部评分
本帖被以下淘专辑推荐:
- · 鱼木|主题: 1589, 订阅: 155
- · 技术知识源码集合|主题: 263, 订阅: 81
- · 精品集|主题: 622, 订阅: 64
- · 奇技淫巧|主题: 207, 订阅: 47
- · 黑科技|主题: 18, 订阅: 2
|