|
函数简介: 绑定指定的窗口,并指定这个窗口的屏幕颜色获取方式,鼠标仿真模式,键盘仿真模式,以及模式设定,高级用户可以参考BindWindowEx更加灵活强大.! y$ b$ J' G0 H5 C
函数原型:
( J' h) V6 z; M7 x8 ]3 U& f' H6 d3 }! k4 ^; |! ?& k
long BindWindow(hwnd,display,mouse,keypad,mode)! `( Y" Y g! J& X& t4 \1 o
参数定义:. z( `# l, Y& j! ^4 P( a0 q
7 p2 S. G# j5 x$ s. X" M+ L
hwnd 整形数: 指定的窗口句柄
9 |. V8 x! }5 o2 i
" Y p( I* l* mdisplay 字符串: 屏幕颜色获取方式 取值有以下几种$ O# N; R/ S$ H, ^
. j. ?4 C5 `; V! H/ Z1 n. }& _
"normal" : 正常模式,平常我们用的前台截屏模式8 v d2 G, b& u# N0 q; ?
$ {0 o8 W3 ?+ x, S. [( L: v" i
"gdi" : gdi模式,用于窗口采用GDI方式刷新时. 此模式占用CPU较大. 参考SetAero win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。! X3 C2 O, q# B& Z
"gdi2" : gdi2模式,此模式兼容性较强,但是速度比gdi模式要慢许多,如果gdi模式发现后台不刷新时,可以考虑用gdi2模式.1 R$ Z- ~5 p4 t: d9 e/ Z" u
- z C+ z, u1 H# o! G7 G
"dx2" : dx2模式,用于窗口采用dx模式刷新,如果dx方式会出现窗口所在进程崩溃的状况,可以考虑采用这种.采用这种方式要保证窗口有一部分在屏幕外.win7 win8或者vista不需要移动也可后台.此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。
3 h( t% D4 ~: d) O3 g1 r"dx3" : dx3模式,同dx2模式,但是如果发现有些窗口后台不刷新时,可以考虑用dx3模式,此模式比dx2模式慢许多. 此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。5 ?. u3 U: M r
"dx" : dx模式,等同于BindWindowEx中,display设置的"dx.graphic.2d|dx.graphic.3d",具体参考BindWindowEx! N4 m4 l0 C K" h/ c/ \9 F3 l
4 G8 d5 J4 b, Q4 N# s& h; P1 I9 {; a; @
mouse 字符串: 鼠标仿真模式 取值有以下几种 i4 q8 X: t) j2 s4 M7 z" Q2 ]: c
: l3 V4 R- M/ N
"normal" : 正常模式,平常我们用的前台鼠标模式
4 U5 `) r' U# I" |, g0 ?
: F9 |6 h' X; Z$ L& l" s"windows": Windows模式,采取模拟windows消息方式 同按键自带后台插件.% K6 l! } W N* H6 r$ G
"windows2": Windows2 模式,采取模拟windows消息方式(锁定鼠标位置) 此模式等同于BindWindowEx中的mouse为以下组合
/ P4 R% [( v% p"dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.message"
$ `6 Z( k) g6 [ i K. e( e' d0 C& T, g( m6 O7 q( C2 Q1 U
6 X" k# k+ k& R. i/ n9 L/ _
"windows3": Windows3模式,采取模拟windows消息方式,可以支持有多个子窗口的窗口后台.
; ~ z# t" r1 w E7 {* u* T% e+ R8 R4 b9 x
"dx": dx模式,采用模拟dx后台鼠标模式,这种方式会锁定鼠标输入.有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后鼠标无效的情况.此模式等同于BindWindowEx中的mouse为以下组合3 Q! X% L9 q8 e* G' q
"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"
! B8 O& s& Z8 |9 g( I* ?$ r- u# H1 F: [/ o4 R N4 v
/ ^# O! [+ }% U: o) g5 G
"dx2":dx2模式,这种方式类似于dx模式,但是不会锁定外部鼠标输入.4 N7 x4 Z! w- H( N" i7 W5 F# y; G
有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后手动激活),否则可能会出现绑定后鼠标无效的情况. 此模式等同于BindWindowEx中的mouse为以下组合
; C) d' l3 z) x) y7 F$ b"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"
7 {& B6 f6 A' ^0 O0 U7 ~ y) v+ F" Z- J$ D1 s* h
2 a0 v8 S k, o Y6 bkeypad 字符串: 键盘仿真模式 取值有以下几种
5 C0 }5 o* @( O, b5 M* C1 z% |) {6 S" S+ I5 E: E
"normal" : 正常模式,平常我们用的前台键盘模式5 e- g+ L6 P, |
0 d" g* t) Z' E) J8 H3 |
"windows": Windows模式,采取模拟windows消息方式 同按键的后台插件.
7 q! y5 C; e; c7 W9 f8 K% W
- K; _; T: }& G! P: t"dx": dx模式,采用模拟dx后台键盘模式。有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后键盘无效的情况. 此模式等同于BindWindowEx中的keypad为以下组合
8 s, d3 G6 X: n6 U& o B' D8 I"dx.public.active.api|dx.public.active.message| dx.keypad.state.api|dx.keypad.api|dx.keypad.input.lock.api" y3 m h* U. G, O9 F5 a
: Q" j Z) s% [1 O0 l
; S9 X- j! w7 ~3 p. T + ]) m* ~- M4 X% u4 Y. c6 b; z
mode 整形数: 模式。 取值有以下几种 0 : 推荐模式此模式比较通用,而且后台效果是最好的.! m. r' v e: b& L9 x
2 : 同模式0,如果模式0有崩溃问题,可以尝试此模式. 注意0和2模式,当主绑定(第一个绑定同个窗口的对象)绑定成功后,那么调用主绑定的线程必须一致维持,否则线程一旦推出,对应的绑定也会消失.# h8 R* b! |* o( V; L
101 : 超级绑定模式. 可隐藏目标进程中的dm.dll.避免被恶意检测.效果要比dx.public.hide.dll好. 推荐使用.
. r5 o) J) s7 B$ n 103 : 同模式101,如果模式101有崩溃问题,可以尝试此模式. 0 O' U# b- _: @/ b1 }
/ m2 o- U/ _. H 11 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统
: q3 i% v/ L8 o( y# D& p( P. M6 O+ i2 S) T2 C A
13 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统6 \+ C! f5 R3 J! r8 A( X
需要注意的是: 模式101 103在大部分窗口下绑定都没问题。但也有少数特殊的窗口,比如有很多子窗口的窗口,对于这种窗口,在绑定时,一定要把& U4 J8 \3 x% e: z% H' v
鼠标指向一个可以输入文字的窗口,比如一个文本框,最好能激活这个文本框,这样可以保证绑定的成功.5 N. W5 l5 h: v* N& |
返回值:9 R% N. w6 G3 C* y1 s" f# ^! B
整形数:
. K8 f8 e5 O; J& @. j+ ]0: 失败* i$ H- J1 {- N! }( N
1: 成功, H* A- I& u5 a: j0 f; ^0 {' t$ v
0 e8 f. T! Q( [. i& D9 q9 x如果返回0,可以调用GetLastError来查看具体失败错误码,帮助分析问题.3 z# J9 e& J; v
% }4 b( P0 t4 o+ b" I* u/ i V4 B( A8 k; v
使用例子:
1 |. _! p- V& @5 k0 o
5 C* w" F4 ?' B0 v2 I5 E绑定失败的原因5 b$ s% J# m a
- w u5 E6 ^& b1 E1 }7 o
; \' x' [' d# a; J
+ l4 g( D# G% Y9 v: q G) m7 {
$ j& S0 Z* D( x7 Y3 ~ |
|