|
|
|
函数简介: 绑定指定的窗口,并指定这个窗口的屏幕颜色获取方式,鼠标仿真模式,键盘仿真模式,以及模式设定,高级用户可以参考BindWindowEx更加灵活强大.3 a; `# L; i/ Y0 T
函数原型:9 R! p. D: ]; Q: u( Q, j" y' A
, w# L" a6 E6 Q. t0 a7 E ^. O
long BindWindow(hwnd,display,mouse,keypad,mode)8 E- l/ R1 [+ x! d6 R+ N; n
参数定义:
9 x7 @4 r% y+ Q& P6 }$ y
8 m" f0 g. B$ w0 n& T/ w! @hwnd 整形数: 指定的窗口句柄
' _! J5 h- l1 ]. i" B' }: ^- _3 g( J4 z0 d6 b6 `
display 字符串: 屏幕颜色获取方式 取值有以下几种
; Q8 ^: Q: q5 z2 i8 K1 |* p! X' A& W3 O" W# _
"normal" : 正常模式,平常我们用的前台截屏模式
6 t- G& T% c! i) g3 J+ b2 r6 t7 c3 w5 G% e
"gdi" : gdi模式,用于窗口采用GDI方式刷新时. 此模式占用CPU较大. 参考SetAero win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。7 y9 z# l& f+ z
"gdi2" : gdi2模式,此模式兼容性较强,但是速度比gdi模式要慢许多,如果gdi模式发现后台不刷新时,可以考虑用gdi2模式.
& u; H! z- o& y/ O8 j. a2 ]; A: p" v4 \" Q1 V
"dx2" : dx2模式,用于窗口采用dx模式刷新,如果dx方式会出现窗口所在进程崩溃的状况,可以考虑采用这种.采用这种方式要保证窗口有一部分在屏幕外.win7 win8或者vista不需要移动也可后台.此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。
. q( K) C5 s# ["dx3" : dx3模式,同dx2模式,但是如果发现有些窗口后台不刷新时,可以考虑用dx3模式,此模式比dx2模式慢许多. 此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。, v% y/ h6 [; t
"dx" : dx模式,等同于BindWindowEx中,display设置的"dx.graphic.2d|dx.graphic.3d",具体参考BindWindowEx
% \( i* y4 l& z, K9 u* d) _7 K5 V {( o" j: x% U
8 N. A& o7 E" W# Z& Q6 z( [: I
mouse 字符串: 鼠标仿真模式 取值有以下几种1 }; G/ U( S# p4 z
" P8 K& ]* ~' N! p3 N' I
"normal" : 正常模式,平常我们用的前台鼠标模式. I& u; H1 k% @( l8 U
$ O+ j* U5 T( Z3 ~, \6 b"windows": Windows模式,采取模拟windows消息方式 同按键自带后台插件.
: B/ S6 ]6 ^7 w7 H$ _6 Q"windows2": Windows2 模式,采取模拟windows消息方式(锁定鼠标位置) 此模式等同于BindWindowEx中的mouse为以下组合( i! `; ~8 l4 ]2 G& ^
"dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.message"
; Y' q* \1 T" T0 ~0 i& t. N+ R. Q- ^
3 }) i: y( |+ z$ x# |% ^
"windows3": Windows3模式,采取模拟windows消息方式,可以支持有多个子窗口的窗口后台.
! c! U* C# _$ `2 w' r5 ~4 }/ E- {% |# P$ h% Z/ V- F( r' {
"dx": dx模式,采用模拟dx后台鼠标模式,这种方式会锁定鼠标输入.有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后鼠标无效的情况.此模式等同于BindWindowEx中的mouse为以下组合3 Z6 r3 V" v; M4 E
"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"+ e$ ~$ B" O7 A$ Q: b0 N w
! J6 W* d1 O. |+ r* j( H h
8 W$ @" u* _% n7 V w"dx2":dx2模式,这种方式类似于dx模式,但是不会锁定外部鼠标输入.
y( \- ?9 X" |. ~有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后手动激活),否则可能会出现绑定后鼠标无效的情况. 此模式等同于BindWindowEx中的mouse为以下组合
) x% F P! z, M/ o6 K1 \"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"
+ O! t& B& ]( |$ g
0 B) W( q! J; H0 U3 m+ V& `# u3 x: c( b( ]
keypad 字符串: 键盘仿真模式 取值有以下几种
7 j% S7 i/ Y2 N# }! G/ a* j1 K7 O R+ S+ d& M
"normal" : 正常模式,平常我们用的前台键盘模式& c7 O2 ^/ N: @" P& z
( M& n& p# [$ t
"windows": Windows模式,采取模拟windows消息方式 同按键的后台插件.
Q8 h* T. B4 ^0 p G
- _. ^, M6 a7 u7 L7 {"dx": dx模式,采用模拟dx后台键盘模式。有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后键盘无效的情况. 此模式等同于BindWindowEx中的keypad为以下组合5 Q. \5 N+ U( | r
"dx.public.active.api|dx.public.active.message| dx.keypad.state.api|dx.keypad.api|dx.keypad.input.lock.api", E7 d. @2 f/ e( H, a$ T
/ |5 R) f! ]' |( U4 h" h# [7 {8 _4 s/ d4 e" @: f
% C# Z/ d# `' E) ?" A n, g" Z
mode 整形数: 模式。 取值有以下几种 0 : 推荐模式此模式比较通用,而且后台效果是最好的.# Z. C# A/ \2 N4 _
2 : 同模式0,如果模式0有崩溃问题,可以尝试此模式. 注意0和2模式,当主绑定(第一个绑定同个窗口的对象)绑定成功后,那么调用主绑定的线程必须一致维持,否则线程一旦推出,对应的绑定也会消失.7 U7 \2 c% k) E- s. ?
101 : 超级绑定模式. 可隐藏目标进程中的dm.dll.避免被恶意检测.效果要比dx.public.hide.dll好. 推荐使用.
( y% K% |4 d& @1 B' b 103 : 同模式101,如果模式101有崩溃问题,可以尝试此模式.
b9 {# M$ u+ E
' H- d1 B) o3 v- g4 V2 \# f7 c 11 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统/ W, L1 f$ {- Z- [+ d5 O9 ?, w
8 b' ^. O ?$ v. N$ L0 r: b, ^ 13 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统
# X) ]- V4 ?' s% ?- ~8 v& @需要注意的是: 模式101 103在大部分窗口下绑定都没问题。但也有少数特殊的窗口,比如有很多子窗口的窗口,对于这种窗口,在绑定时,一定要把4 s3 O @' u/ J6 x0 A
鼠标指向一个可以输入文字的窗口,比如一个文本框,最好能激活这个文本框,这样可以保证绑定的成功.
' j0 M2 L& @( P! t7 N返回值:( e2 y$ u# X- F6 u8 R
整形数:
1 V) l& g# F+ ^- H# |) x3 l" V; X0: 失败( \) P+ _4 @8 L
1: 成功
7 n' ^2 I5 a& y) t3 k8 l2 A4 V0 T# {1 k+ w; [
如果返回0,可以调用GetLastError来查看具体失败错误码,帮助分析问题.# ^0 x7 e. ]# B3 A/ n
' H s8 l1 J) A# q
; o: \' S, p- h
使用例子:
3 K& V9 ?. Z7 x5 |- i) \, i
6 J/ f, ?- ~- e8 R; b0 H; C3 J绑定失败的原因
& `4 S$ [( K/ J. }
9 M* n# a3 Q. i' k
9 [6 d3 T2 q* s& E3 h7 d0 E" W$ N0 o# m6 H! e2 u
/ F( o; ^/ y+ T( K
|
|