|
|
好的增加 旧针判断,沿用缓存,或者重新构造
|
| WGC_截取图像 | 字节集 | | |
| 参_目标句柄 | 整数型 | | | | 参_左 | 整数型 | | | | 参_顶 | 整数型 | | | | 参_宽 | 整数型 | | | | 参_高 | 整数型 | | | |
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 局_最新帧 | 整数型 | | | | 局_临时帧 | 整数型 | | | | 局_表面对象 | 整数型 | | | | 局_接口访问 | 整数型 | | | | 局_D3D纹理 | 整数型 | | | | 局_函数_获取帧 | 整数型 | | | | 局_函数_通用 | 整数型 | | | | 局_目标行距 | 整数型 | | | | 局_像素指针 | 整数型 | | | | 局_源行距 | 整数型 | | | | 局_需创建中转 | 逻辑型 | | | | 局_最终宽 | 整数型 | | | | 局_最终高 | 整数型 | | | | 局_初始化宽 | 整数型 | | | | 局_初始化高 | 整数型 | | | | 局_描述指针 | 整数型 | | | | 局_映射指针 | 整数型 | | | | i | 整数型 | | |
如果真 (集_WGC_已初始化 = 假) 返回 ({ }) 如果真 (集_状态_正在截图 ) 如果真 (取字节集长度 (集_缓存_截图数据 ) > 0 ) 返回 (集_缓存_截图数据 ) 返回 ({ })集_状态_正在截图 = 真 如果 (参_左 > 0 或 参_顶 > 0 ) 局_初始化宽 = 0  局_初始化高 = 0  局_初始化宽 = 参_宽  局_初始化高 = 参_高  如果真 (集_WGC_会话 = 0 或 集_当前_句柄 ≠ 参_目标句柄 或 集_当前_宽 ≠ 局_初始化宽 或 集_当前_高 ≠ 局_初始化高 ) 如果真 (WGC_重建单例对象 (参_目标句柄, 局_初始化宽, 局_初始化高 ) = 假)  集_状态_正在截图 = 假  返回 ({ })   局_函数_获取帧 = Asm_取虚表函数 (集_WGC_帧池, 7 ) 如果真 (集_最新帧 = 0 ) 局_临时帧 = 0  判断循环首 (局_临时帧 = 0 ) Asm_Call2P (局_函数_获取帧, 集_WGC_帧池, Asm_取整数指针 (局_临时帧 ))  Asm_微秒延时 (500 ) 判断循环尾 () 集_最新帧 = 局_临时帧 Asm_Call2P (局_函数_获取帧, 集_WGC_帧池, Asm_取整数指针 (局_最新帧 )) 如果 (局_最新帧 ≠ 0 ) Asm_COM释放对象 (集_最新帧 ) 集_最新帧 = 局_最新帧   沿用旧针 = 沿用旧针 + 1  如果真 (集_缓存_截图数据 ≠ { })  集_状态_正在截图 = 假  返回 (集_缓存_截图数据 )   局_最新帧 = 集_最新帧  . .
. . . 如果真 (局_最新帧 ≠ 0 ) 局_表面对象 = 0  局_函数_通用 = Asm_取虚表函数 (局_最新帧, 6 ) Asm_Call2P (局_函数_通用, 局_最新帧, Asm_取整数指针 (局_表面对象 ))  如果真 (局_表面对象 ≠ 0 )  局_接口访问 = 0  Asm_调用_QueryInterface (局_表面对象, Asm_取字节集指针 (集_GUID_接口访问 ), Asm_取整数指针 (局_接口访问 ))   如果真 (局_接口访问 ≠ 0 )   局_D3D纹理 = 0   COM_调用 (局_接口访问, 3, Asm_取字节集指针 (集_GUID_D3D11纹理 ), Asm_取整数指针 (局_D3D纹理 ))   Asm_COM释放对象 (局_接口访问 )   如果真 (局_D3D纹理 ≠ 0 )    局_描述指针 = Asm_取字节集指针 (集_缓存_纹理描述 )   COM_调用 (局_D3D纹理, 10, 局_描述指针 )    局_需创建中转 = 集_WGC_中转纹理 = 0     如果真 (局_需创建中转 = 假)     如果真 (Asm_读内存整数 (局_描述指针 ) ≠ 集_WGC_尺寸数组 [1 ] 或 Asm_读内存整数 (局_描述指针 + 4 ) ≠ 集_WGC_尺寸数组 [2 ])     Asm_COM释放对象 (集_WGC_中转纹理 )      局_需创建中转 = 真                如果真 (局_需创建中转 )     集_WGC_尺寸数组 [1 ] = Asm_读内存整数 (局_描述指针 )     集_WGC_尺寸数组 [2 ] = Asm_读内存整数 (局_描述指针 + 4 )    Asm_写内存整数 (局_描述指针 + 28, 3 )    Asm_写内存整数 (局_描述指针 + 32, 0 )    Asm_写内存整数 (局_描述指针 + 36, 131072 )    Asm_写内存整数 (局_描述指针 + 40, 0 )    Asm_写内存整数 (局_描述指针 + 8, 1 )    COM_调用 (集_D3D_设备指针, 5, 局_描述指针, 0, Asm_取整数指针 (集_WGC_中转纹理 ))          如果真 (集_WGC_中转纹理 ≠ 0 )    COM_调用 (集_D3D_上下文指针, 47, 集_WGC_中转纹理, 局_D3D纹理 )     局_映射指针 = Asm_取字节集指针 (集_缓存_映射数据 )     如果真 (COM_调用 (集_D3D_上下文指针, 14, 集_WGC_中转纹理, 0, 1, 0, 局_映射指针 ) = 0 )      局_像素指针 = Asm_读内存整数 (局_映射指针 )      局_源行距 = Asm_读内存整数 (局_映射指针 + 4 )      局_最终宽 = 参_宽       局_最终高 = 参_高       如果真 (局_最终宽 = 0 )       局_最终宽 = 集_WGC_尺寸数组 [1 ] - 参_左       如果真 (局_最终高 = 0 )       局_最终高 = 集_WGC_尺寸数组 [2 ] - 参_顶              如果真 (参_左 > 0 或 参_顶 > 0 )       局_像素指针 = 局_像素指针 + 参_顶 × 局_源行距 + 参_左 × 4              局_目标行距 = 局_最终宽 × 3       如果真 (局_目标行距 % 4 ≠ 0 )       局_目标行距 = 局_目标行距 + 4 - 局_目标行距 % 4              如果真 (取字节集长度 (集_缓存_截图数据 ) ≠ 54 + 局_目标行距 × 局_最终高 )       集_缓存_截图数据 = 取空白字节集 (54 + 局_目标行距 × 局_最终高 )            Asm_写入BMP头_24位 (Asm_取字节集指针 (集_缓存_截图数据 ), 局_最终宽, 局_最终高, 局_目标行距 × 局_最终高 )     Asm_32位转24位_翻转 (局_像素指针, Asm_取字节集指针 (集_缓存_截图数据 ) + 54, 局_最终宽, 局_最终高, 局_源行距, 局_目标行距 )     COM_调用 (集_D3D_上下文指针, 15, 集_WGC_中转纹理, 0 )             Asm_COM释放对象 (局_D3D纹理)   Asm_COM释放对象 (局_表面对象) 如果真 (局_最新帧 ≠ 0 )  集_状态_正在截图 = 假 如果真 (取字节集长度 (集_缓存_截图数据 ) > 0 ) 返回 (集_缓存_截图数据 )返回 ({ })
|
-
沿用缓存数据
-
重新构造
|