|
|
|
函数简介: 绑定指定的窗口,并指定这个窗口的屏幕颜色获取方式,鼠标仿真模式,键盘仿真模式,以及模式设定,高级用户可以参考BindWindowEx更加灵活强大.; _# a8 Q' V+ X. B5 m8 l, W2 F
函数原型:
9 |/ A/ v0 x* b- t& m$ Z) h7 s; Z' n% h" ~
long BindWindow(hwnd,display,mouse,keypad,mode)
. G. y* {+ h; ~参数定义:, h3 Z# r& l- g ?! H6 G9 q
7 k* x( v6 j* i$ m& m
hwnd 整形数: 指定的窗口句柄
' ]& D! S6 m! J! ?' Z. J
2 [9 S. E5 T7 B) tdisplay 字符串: 屏幕颜色获取方式 取值有以下几种7 _; K& P. m1 ]: `
* J$ T, s& ~6 q1 k% [
"normal" : 正常模式,平常我们用的前台截屏模式
- I& b% e% X4 ~' f( v/ d" z' v* n) J% w) r* ]* ~) B
"gdi" : gdi模式,用于窗口采用GDI方式刷新时. 此模式占用CPU较大. 参考SetAero win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。8 ]$ g8 b6 N5 n
"gdi2" : gdi2模式,此模式兼容性较强,但是速度比gdi模式要慢许多,如果gdi模式发现后台不刷新时,可以考虑用gdi2模式.3 Z; T5 n# c" Q$ j# v8 C1 ]* V
7 T' q; g0 U, D/ r"dx2" : dx2模式,用于窗口采用dx模式刷新,如果dx方式会出现窗口所在进程崩溃的状况,可以考虑采用这种.采用这种方式要保证窗口有一部分在屏幕外.win7 win8或者vista不需要移动也可后台.此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。
4 c- `8 W) G/ v- h4 c% [5 {: ]4 K"dx3" : dx3模式,同dx2模式,但是如果发现有些窗口后台不刷新时,可以考虑用dx3模式,此模式比dx2模式慢许多. 此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。
+ ~9 m9 H9 Z0 Z. ` ~4 @"dx" : dx模式,等同于BindWindowEx中,display设置的"dx.graphic.2d|dx.graphic.3d",具体参考BindWindowEx
, \ g1 \* B. Z. V; u# O9 O, D
- r. N( _, i. N3 f3 {: K: ]" c" ]. g
% x% M; ~0 k, F# ~mouse 字符串: 鼠标仿真模式 取值有以下几种
! X7 Q# Y6 p& O8 |; s3 t) h( X2 T
% k8 B8 y2 e, |9 l7 I& g8 l8 b"normal" : 正常模式,平常我们用的前台鼠标模式
+ r. a6 m$ D. v
0 `; t( L) B$ l4 x, g"windows": Windows模式,采取模拟windows消息方式 同按键自带后台插件.1 A- {( R) s$ c$ \
"windows2": Windows2 模式,采取模拟windows消息方式(锁定鼠标位置) 此模式等同于BindWindowEx中的mouse为以下组合
[ f0 H c2 r"dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.message"$ a4 a; _: G* }0 U7 m1 [8 @" [. i
& \6 D& l" H! D- v% G; w/ t3 @8 d9 T
8 ~) S+ \. P4 Y) G1 r2 @( G% o
"windows3": Windows3模式,采取模拟windows消息方式,可以支持有多个子窗口的窗口后台.
, {" x7 r& r3 o
3 ]0 s2 K$ i- j9 u3 ]"dx": dx模式,采用模拟dx后台鼠标模式,这种方式会锁定鼠标输入.有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后鼠标无效的情况.此模式等同于BindWindowEx中的mouse为以下组合! b9 ~5 a% v; M
"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"/ b. {1 f# U( E% ~ N
7 x& Z* Y1 X5 U0 x
+ ?' W7 D- F+ H! z2 d"dx2":dx2模式,这种方式类似于dx模式,但是不会锁定外部鼠标输入.! G6 g/ j5 W$ q- k8 _
有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后手动激活),否则可能会出现绑定后鼠标无效的情况. 此模式等同于BindWindowEx中的mouse为以下组合3 C6 Q, y$ Z) ]$ t9 \
"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"
6 W! J1 Y4 H' u- }6 e
; B1 Q9 O0 \) T# ^7 A' f+ G# C7 h
keypad 字符串: 键盘仿真模式 取值有以下几种
) @2 l. t2 T8 v
" h8 ^: q/ g2 m" |0 ^"normal" : 正常模式,平常我们用的前台键盘模式
8 z& M5 S: F/ O, h. O
0 O5 o& u* s2 _8 B3 Y6 n _"windows": Windows模式,采取模拟windows消息方式 同按键的后台插件.
. x7 C, N b2 E
. j2 O5 L4 Z% o' L1 i B"dx": dx模式,采用模拟dx后台键盘模式。有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后键盘无效的情况. 此模式等同于BindWindowEx中的keypad为以下组合
5 k4 b3 D/ ~ c& T* \"dx.public.active.api|dx.public.active.message| dx.keypad.state.api|dx.keypad.api|dx.keypad.input.lock.api"
6 z2 }. ~* z u( H$ x- ~1 K, B3 L/ O5 ?
# z, [- x2 A* ]; m, U& Y
7 H. P/ n! J* m- u amode 整形数: 模式。 取值有以下几种 0 : 推荐模式此模式比较通用,而且后台效果是最好的.7 f. {3 U5 c/ T! I1 X' u! I# j
2 : 同模式0,如果模式0有崩溃问题,可以尝试此模式. 注意0和2模式,当主绑定(第一个绑定同个窗口的对象)绑定成功后,那么调用主绑定的线程必须一致维持,否则线程一旦推出,对应的绑定也会消失.
! @, T5 j0 }$ H. _6 ?- a# ~- s& L 101 : 超级绑定模式. 可隐藏目标进程中的dm.dll.避免被恶意检测.效果要比dx.public.hide.dll好. 推荐使用., a) b; d% W1 v% S7 ?
103 : 同模式101,如果模式101有崩溃问题,可以尝试此模式. . w( T+ H6 U! q# O* p0 k5 W( l
; ]3 V* f+ K) a9 W+ i) A
11 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统
) X$ N2 C) Y" ]8 W4 p
3 V9 X! K8 C- k/ |% `) f 13 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统3 ~! V( ~8 {# y! y9 S
需要注意的是: 模式101 103在大部分窗口下绑定都没问题。但也有少数特殊的窗口,比如有很多子窗口的窗口,对于这种窗口,在绑定时,一定要把
8 E& M* P2 Z7 G& x) b: ^鼠标指向一个可以输入文字的窗口,比如一个文本框,最好能激活这个文本框,这样可以保证绑定的成功.+ Q. j7 H6 V! W4 {; K( D1 D# J
返回值: l% z, o3 c2 d5 z" q6 c
整形数:2 ^) i( ?0 _* S! A/ D, ], S# k
0: 失败* x# }2 x$ h0 n: E; {1 V
1: 成功
- p6 u$ x9 Y( a, w
* _: x s) I0 z如果返回0,可以调用GetLastError来查看具体失败错误码,帮助分析问题.
: K0 t( ^$ `* ]% E, L( u7 r. A; w# U- \6 k
# d/ l' L; O) p& |7 G$ Q$ I使用例子:
8 p8 Q9 _1 B7 E S2 R1 G
1 }' Y+ [4 D1 J9 Z) S; i- c; K
绑定失败的原因
y1 m7 e1 V4 r v# J* T
% }- K/ b1 ?% a+ z& c# u( Y4 f
' I" c/ |% L: }' }1 W2 ?) }, n* y2 v! i2 y2 p0 o8 L! r
# g. w( p' p- Y |
|