|
|
|
函数简介: 绑定指定的窗口,并指定这个窗口的屏幕颜色获取方式,鼠标仿真模式,键盘仿真模式,以及模式设定,高级用户可以参考BindWindowEx更加灵活强大./ p; J9 N; j2 C+ _: K- m
函数原型:
3 ]9 w$ i7 {2 h7 h* j6 ]$ i8 s0 _9 E! j$ W
long BindWindow(hwnd,display,mouse,keypad,mode)/ Z! \( Z6 i- U* d9 J, L
参数定义:
' K5 N. G, @( w6 M
0 }! A/ }3 h3 D: {0 lhwnd 整形数: 指定的窗口句柄$ w n6 }. s; V& Y5 ~$ l
( L+ W" z% c# a8 cdisplay 字符串: 屏幕颜色获取方式 取值有以下几种
! U* A4 i/ _: p& i/ Y4 D, U8 }0 w4 Q) C- H+ `! _: H2 Y, Z
"normal" : 正常模式,平常我们用的前台截屏模式. D9 j3 b1 }2 n$ _. g9 R$ F
5 w/ u0 ~( `% N* `1 G$ K: C"gdi" : gdi模式,用于窗口采用GDI方式刷新时. 此模式占用CPU较大. 参考SetAero win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。
. |% \; p5 O' x% ~9 S"gdi2" : gdi2模式,此模式兼容性较强,但是速度比gdi模式要慢许多,如果gdi模式发现后台不刷新时,可以考虑用gdi2模式.
$ a+ s2 B+ v8 R4 C- \: v! |) Z
' j; `; S% p- o; Q& ]2 q# C6 {"dx2" : dx2模式,用于窗口采用dx模式刷新,如果dx方式会出现窗口所在进程崩溃的状况,可以考虑采用这种.采用这种方式要保证窗口有一部分在屏幕外.win7 win8或者vista不需要移动也可后台.此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。
$ E* H$ L$ V6 s E6 f/ @"dx3" : dx3模式,同dx2模式,但是如果发现有些窗口后台不刷新时,可以考虑用dx3模式,此模式比dx2模式慢许多. 此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。8 g3 S4 z% P0 ` i
"dx" : dx模式,等同于BindWindowEx中,display设置的"dx.graphic.2d|dx.graphic.3d",具体参考BindWindowEx
5 W Q0 j9 p/ V0 J4 ?& o5 H! G+ |% j
' j" ^3 o( C* w( `6 e6 g$ Z- t5 Z6 R
mouse 字符串: 鼠标仿真模式 取值有以下几种3 _! l9 e* b5 `% `8 Q& t" s! ~. c* e
; R7 I* P! k& d' A' o/ T7 Z"normal" : 正常模式,平常我们用的前台鼠标模式4 p$ b* \! c8 N3 R8 X; }" n
) {5 H( k0 N& V
"windows": Windows模式,采取模拟windows消息方式 同按键自带后台插件.
' f/ M0 H' G( ~/ Y/ f5 F7 X"windows2": Windows2 模式,采取模拟windows消息方式(锁定鼠标位置) 此模式等同于BindWindowEx中的mouse为以下组合. D2 G* S7 t- D( y+ l0 R! ?8 ` s
"dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.message"9 F( A) x, ]$ |5 Y+ V* g
7 o. }/ ? w& v( s, H& t
, ?& H$ H. U" c8 {& A5 T0 L; ~3 q: L"windows3": Windows3模式,采取模拟windows消息方式,可以支持有多个子窗口的窗口后台.# E0 k8 j2 a, n
6 y- i$ O: |; N* N4 F, T
"dx": dx模式,采用模拟dx后台鼠标模式,这种方式会锁定鼠标输入.有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后鼠标无效的情况.此模式等同于BindWindowEx中的mouse为以下组合* [2 B) H3 L% U" P- C: X
"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"
$ a) b; M4 s7 B( F5 L7 @$ ~/ h1 s9 [: V' M3 R1 o3 O, d
/ S6 n8 M, O, F" E1 a
"dx2":dx2模式,这种方式类似于dx模式,但是不会锁定外部鼠标输入.
& s. O9 J' Y! B* X9 c有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后手动激活),否则可能会出现绑定后鼠标无效的情况. 此模式等同于BindWindowEx中的mouse为以下组合# v u% |! {( @8 E
"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"
9 P" B$ q. t6 J9 S' ^" J0 W9 m& O9 O* n
7 b A0 S: y/ d' U V: {keypad 字符串: 键盘仿真模式 取值有以下几种
( Z7 A" A9 V* B( Z2 P$ y
" n- I, R0 h* G( ]"normal" : 正常模式,平常我们用的前台键盘模式4 Z; R* U$ {$ r9 ]6 }6 x; _
8 v$ _7 W2 U) X) ]"windows": Windows模式,采取模拟windows消息方式 同按键的后台插件.# G. ]! ?/ L2 x( w' \! a
5 W5 D' h. ~5 p/ r4 U3 C* h
"dx": dx模式,采用模拟dx后台键盘模式。有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后键盘无效的情况. 此模式等同于BindWindowEx中的keypad为以下组合9 |0 N7 P/ B. {5 ^
"dx.public.active.api|dx.public.active.message| dx.keypad.state.api|dx.keypad.api|dx.keypad.input.lock.api": c$ g( T9 h, r( F
0 Q6 {0 r2 b7 ^" Y% t
% r$ {& g# o1 T4 S4 \
' Y5 E& l& e3 S4 |3 ~mode 整形数: 模式。 取值有以下几种 0 : 推荐模式此模式比较通用,而且后台效果是最好的.! k9 P( r# b2 H: i1 F; N6 I
2 : 同模式0,如果模式0有崩溃问题,可以尝试此模式. 注意0和2模式,当主绑定(第一个绑定同个窗口的对象)绑定成功后,那么调用主绑定的线程必须一致维持,否则线程一旦推出,对应的绑定也会消失.
: z3 Z ?0 f( d1 X 101 : 超级绑定模式. 可隐藏目标进程中的dm.dll.避免被恶意检测.效果要比dx.public.hide.dll好. 推荐使用., v, Y3 e/ U( v+ }1 X/ r4 F; w
103 : 同模式101,如果模式101有崩溃问题,可以尝试此模式.
8 g1 @' `/ z1 j) Z* K3 F6 \0 y/ Q4 K$ d. @. x6 p
11 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统
5 Y/ J! d) N4 a2 o1 o3 d5 J: d3 c, ^! M5 A. t
13 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统
3 i: S; s8 g# b! i/ o n1 c* P1 i需要注意的是: 模式101 103在大部分窗口下绑定都没问题。但也有少数特殊的窗口,比如有很多子窗口的窗口,对于这种窗口,在绑定时,一定要把 D% m4 S# b) x! K. k6 t9 V
鼠标指向一个可以输入文字的窗口,比如一个文本框,最好能激活这个文本框,这样可以保证绑定的成功.
) h6 _: f! V5 L0 d) u返回值:! z) _* Z$ N( r5 y) P8 N/ h! g5 e
整形数:
2 \% { q. Q! A& b0 h5 D* e e0: 失败1 G u" C/ P5 D [! L& d
1: 成功- G4 Y: U- K* T" w4 t9 ]) }% P
8 b2 q: m: X: N# W2 ^9 f) q如果返回0,可以调用GetLastError来查看具体失败错误码,帮助分析问题.
" w6 H |) Y- ]- r
; z v/ L8 i! {) v4 {$ m
2 a' N! m& }$ f5 N6 ^2 u) R$ q使用例子:0 q* u+ ^ f$ [1 X, ?" ]5 x
2 ?4 i1 N* \9 r绑定失败的原因
8 K( G5 g: L$ J
5 v/ v* }- [* q+ c3 N3 i9 ~0 `- ~0 O Q, G) I1 B- E# {7 d
% C6 I0 h) F* h
2 B6 m0 |0 O3 c* J7 {' w: f5 S
|
|