|
|
|
函数简介: 绑定指定的窗口,并指定这个窗口的屏幕颜色获取方式,鼠标仿真模式,键盘仿真模式,以及模式设定,高级用户可以参考BindWindowEx更加灵活强大.
; E0 L, y6 D$ Z1 x8 B$ ]9 K! C函数原型:
2 U2 _9 ^% h/ z+ Y2 B$ _+ {# [/ j; {+ M+ b/ L& l. w* z
long BindWindow(hwnd,display,mouse,keypad,mode)1 Z) H8 k8 ^" G3 z% i9 |. ^
参数定义:
8 m0 Z: @) i& |5 H% w
* f# E3 L7 S' \9 [2 a, s$ A( bhwnd 整形数: 指定的窗口句柄( X% f2 o+ o7 z, A# J C
* i/ b) _8 R7 L9 f& ?9 q9 mdisplay 字符串: 屏幕颜色获取方式 取值有以下几种+ A3 Q. F- g0 z# r$ n
# k' p8 L$ d) _4 u/ d7 n
"normal" : 正常模式,平常我们用的前台截屏模式
! i7 o! Y: { e/ P4 h+ n+ k2 t, u. }: F3 F$ I) u5 l
"gdi" : gdi模式,用于窗口采用GDI方式刷新时. 此模式占用CPU较大. 参考SetAero win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。
1 `$ Y8 ^" } [8 r; \4 R& l, u"gdi2" : gdi2模式,此模式兼容性较强,但是速度比gdi模式要慢许多,如果gdi模式发现后台不刷新时,可以考虑用gdi2模式.
# p# h+ Y$ l L( C! {- H9 ^
5 g6 h: n5 A, O/ w"dx2" : dx2模式,用于窗口采用dx模式刷新,如果dx方式会出现窗口所在进程崩溃的状况,可以考虑采用这种.采用这种方式要保证窗口有一部分在屏幕外.win7 win8或者vista不需要移动也可后台.此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。
{4 b \! M- ]"dx3" : dx3模式,同dx2模式,但是如果发现有些窗口后台不刷新时,可以考虑用dx3模式,此模式比dx2模式慢许多. 此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。7 X" B/ @/ C6 g L+ J$ }
"dx" : dx模式,等同于BindWindowEx中,display设置的"dx.graphic.2d|dx.graphic.3d",具体参考BindWindowEx) {9 r6 q/ D6 H. h
1 H6 V& S: n; Q5 M2 M; D- j1 ]
" U9 T$ v6 F" f$ Lmouse 字符串: 鼠标仿真模式 取值有以下几种
, C, e" s8 `9 p, u* R6 K: e# n. T [0 q& O
"normal" : 正常模式,平常我们用的前台鼠标模式3 J% |$ \8 I' \0 b% h
' h2 u- s8 w. S+ i8 g" P: m
"windows": Windows模式,采取模拟windows消息方式 同按键自带后台插件.
# E" X) q4 @: i; i"windows2": Windows2 模式,采取模拟windows消息方式(锁定鼠标位置) 此模式等同于BindWindowEx中的mouse为以下组合
6 N( S/ e c8 i; b, F5 Q"dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.message"
8 B* f# A" @9 M0 s" s! i8 r2 l3 W2 v7 }. U# G9 w
- g/ Z6 ?3 d' u1 {
"windows3": Windows3模式,采取模拟windows消息方式,可以支持有多个子窗口的窗口后台.) W! a( H. _, W& f' E9 T: f: d3 d
~9 i3 B( @$ X; \8 j, m/ z B
"dx": dx模式,采用模拟dx后台鼠标模式,这种方式会锁定鼠标输入.有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后鼠标无效的情况.此模式等同于BindWindowEx中的mouse为以下组合2 L8 X. r( r4 v# V5 T- F9 [" b: A
"dx.public.active.api|dx.public.active.message|dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.api|dx.mouse.state.message|dx.mouse.api|dx.mouse.focus.input.api|dx.mouse.focus.input.message|dx.mouse.clip.lock.api|dx.mouse.input.lock.api|dx.mouse.cursor"' t2 X$ ?+ o0 x2 I& U$ U
1 b: @+ |' ]# B4 b+ S( i1 H3 v
2 ^$ j5 M5 t" |0 b0 G"dx2":dx2模式,这种方式类似于dx模式,但是不会锁定外部鼠标输入.1 L7 k* {8 W$ X) F+ z# q
有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后手动激活),否则可能会出现绑定后鼠标无效的情况. 此模式等同于BindWindowEx中的mouse为以下组合
; q5 U- ?7 S6 f K8 g"dx.public.active.api|dx.public.active.message|dx.mouse.position.lock.api|dx.mouse.state.api|dx.mouse.api|dx.mouse.focus.input.api|dx.mouse.focus.input.message|dx.mouse.clip.lock.api|dx.mouse.input.lock.api| dx.mouse.cursor" H9 x5 b" p3 E' A0 { |
- d l8 v& B* |/ a0 d
; W7 I/ B0 T! T1 a |
keypad 字符串: 键盘仿真模式 取值有以下几种
2 Z4 S" [" L0 J$ \% d4 L2 ]# n) D0 v$ i5 l; ^0 {; r
"normal" : 正常模式,平常我们用的前台键盘模式6 S) V/ X: j# G# C
& k! E1 e& V: z9 X+ }"windows": Windows模式,采取模拟windows消息方式 同按键的后台插件.# s4 T' k) K2 B
& F0 S5 v. U( L! ?"dx": dx模式,采用模拟dx后台键盘模式。有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后键盘无效的情况. 此模式等同于BindWindowEx中的keypad为以下组合
9 J1 _8 M3 w' R$ ^& I"dx.public.active.api|dx.public.active.message| dx.keypad.state.api|dx.keypad.api|dx.keypad.input.lock.api"
8 Y' K: v8 Q+ k: O1 M! i6 a+ j5 ?
% q1 E# w# D7 l
: C2 K1 H( w" Y# R# g' [mode 整形数: 模式。 取值有以下几种 0 : 推荐模式此模式比较通用,而且后台效果是最好的.; [% f7 h2 x! [( g+ g' W9 x
2 : 同模式0,如果模式0有崩溃问题,可以尝试此模式. 注意0和2模式,当主绑定(第一个绑定同个窗口的对象)绑定成功后,那么调用主绑定的线程必须一致维持,否则线程一旦推出,对应的绑定也会消失.: G5 b4 p+ h0 k! ~; P
101 : 超级绑定模式. 可隐藏目标进程中的dm.dll.避免被恶意检测.效果要比dx.public.hide.dll好. 推荐使用.
6 c4 h/ X( ?! @. O 103 : 同模式101,如果模式101有崩溃问题,可以尝试此模式.
3 H' B1 Q/ s5 O* d/ G- ? s
& a8 k: d0 s+ W; S& r) {& _* P 11 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统
/ I7 g: H+ U- n" k6 ~! Q/ H$ Q% N9 }1 a
13 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统9 _+ E8 b: \7 R! R7 X0 D
需要注意的是: 模式101 103在大部分窗口下绑定都没问题。但也有少数特殊的窗口,比如有很多子窗口的窗口,对于这种窗口,在绑定时,一定要把& r9 U/ u# ^# p% W) Y+ S+ |/ p
鼠标指向一个可以输入文字的窗口,比如一个文本框,最好能激活这个文本框,这样可以保证绑定的成功.8 [8 b7 b& B1 E R9 d( H
返回值:
# H R$ ^1 Y4 F整形数:1 H( J: i! w) B& O
0: 失败
: B) K! n. m" i5 M X: n, H3 L1: 成功
1 T6 z4 s) B) e( H0 U% m$ |9 i: L1 J7 ^1 I4 m$ Z, z0 I8 R
如果返回0,可以调用GetLastError来查看具体失败错误码,帮助分析问题.( J% @$ s m. r& U1 H
J! p6 \1 o0 m9 V. E' O" s, u; s0 ]4 ]
使用例子:$ p- Q$ b: [+ @1 ]& D/ n) h
b0 K+ J; ~# j绑定失败的原因( U- K: T& h5 `2 M" v. F* ^4 c/ _2 f" L
! r- w) C0 r7 x; Y! C2 ^0 ^7 n$ E* B- Z. [* E
V" N. @' |; x' D3 q3 H4 A$ e" K6 z+ V6 n# B7 @+ a; h- c8 o1 k
|
|