|
|
|
函数简介: 绑定指定的窗口,并指定这个窗口的屏幕颜色获取方式,鼠标仿真模式,键盘仿真模式,以及模式设定,高级用户可以参考BindWindowEx更加灵活强大.
! J, o0 k1 T5 b: ?* A- L$ ]函数原型:% z# G! p, j4 K% V
2 c+ R4 T- @# o, C k* z' W# Dlong BindWindow(hwnd,display,mouse,keypad,mode)3 A8 H9 R# Q% |, h
参数定义:
' A% |7 x" r' p u) C; T: {
, `7 O# c5 v/ @8 q0 |+ V/ r/ bhwnd 整形数: 指定的窗口句柄# v' _9 f+ }1 ~9 e& l1 s/ X+ i8 R4 P
* d/ O8 d: g0 F, q2 P: `9 c6 [: K6 Ydisplay 字符串: 屏幕颜色获取方式 取值有以下几种
1 i! M# I- p( u2 ?. m. d& Y# L$ K( @3 t5 S$ n0 K; `- N
"normal" : 正常模式,平常我们用的前台截屏模式
/ E! C$ ~7 t9 Q' {2 `0 Y) e# ^, ?' |2 l1 ]
"gdi" : gdi模式,用于窗口采用GDI方式刷新时. 此模式占用CPU较大. 参考SetAero win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。% J# D2 T# z% j. z/ }9 V0 d% V5 K* C
"gdi2" : gdi2模式,此模式兼容性较强,但是速度比gdi模式要慢许多,如果gdi模式发现后台不刷新时,可以考虑用gdi2模式.* `. U# u# j2 [+ C1 g( W) {
1 K9 n3 `$ c' ? a"dx2" : dx2模式,用于窗口采用dx模式刷新,如果dx方式会出现窗口所在进程崩溃的状况,可以考虑采用这种.采用这种方式要保证窗口有一部分在屏幕外.win7 win8或者vista不需要移动也可后台.此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。
4 [4 N1 X1 A5 Q5 T0 m"dx3" : dx3模式,同dx2模式,但是如果发现有些窗口后台不刷新时,可以考虑用dx3模式,此模式比dx2模式慢许多. 此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。
/ ~& Z6 e l$ M9 U"dx" : dx模式,等同于BindWindowEx中,display设置的"dx.graphic.2d|dx.graphic.3d",具体参考BindWindowEx
6 D, q# x8 B% P) M
- T/ s+ Q( K' C" O; i
" |, {1 V; ?% }9 V$ H9 a/ Gmouse 字符串: 鼠标仿真模式 取值有以下几种% w$ i8 I5 ?/ [- H# ]$ m$ q
2 z9 r/ A- e6 w
"normal" : 正常模式,平常我们用的前台鼠标模式
9 T9 [: g" ?8 n' V5 X; l+ v9 ?& B( `! b
"windows": Windows模式,采取模拟windows消息方式 同按键自带后台插件.
- ^+ N+ k( n" H, r! m"windows2": Windows2 模式,采取模拟windows消息方式(锁定鼠标位置) 此模式等同于BindWindowEx中的mouse为以下组合: Q9 ?- o; Q$ |
"dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.message"
v* M1 G8 T) n! s: [' ~2 o0 t6 o' K5 u% b) P
. R: @: ]4 m `# m"windows3": Windows3模式,采取模拟windows消息方式,可以支持有多个子窗口的窗口后台.
7 o5 a& L4 }+ z1 d% A8 x- I" j. |4 o8 D' s* A, S
"dx": dx模式,采用模拟dx后台鼠标模式,这种方式会锁定鼠标输入.有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后鼠标无效的情况.此模式等同于BindWindowEx中的mouse为以下组合. U o( Z, J. [6 O
"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"
$ M" D2 c2 k' b- c5 j& |& M
- H p5 G, I5 F0 ~2 a$ J7 O& R! z) m- q
j2 {% ?0 c( E4 f/ U! V"dx2":dx2模式,这种方式类似于dx模式,但是不会锁定外部鼠标输入.7 N/ Y' b4 t( y8 k6 w( a
有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后手动激活),否则可能会出现绑定后鼠标无效的情况. 此模式等同于BindWindowEx中的mouse为以下组合: Z8 C, ]9 i4 r6 A1 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"( E4 {4 J; x# }, D
) |4 o8 C! I6 T8 D% ^
" W2 H" Z# n. x7 E5 r$ h1 g& W+ Tkeypad 字符串: 键盘仿真模式 取值有以下几种
( B; u4 S* j a8 H
% t$ i/ u7 `8 l4 i b. K9 G"normal" : 正常模式,平常我们用的前台键盘模式
0 c7 X0 r- W6 s( r1 a, [9 B+ B9 A+ g0 h1 P
"windows": Windows模式,采取模拟windows消息方式 同按键的后台插件.
3 H. R% A, w+ f C" x, |# e* y, `' O: N
"dx": dx模式,采用模拟dx后台键盘模式。有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后键盘无效的情况. 此模式等同于BindWindowEx中的keypad为以下组合
$ a. `7 O5 C# o+ i- L" F"dx.public.active.api|dx.public.active.message| dx.keypad.state.api|dx.keypad.api|dx.keypad.input.lock.api"5 ~0 D8 B/ ~ |
! ]7 n' H$ i- G* j1 i- ^) ]0 r6 L9 Y9 G5 S
; Z* _. `5 W( R( X, ^mode 整形数: 模式。 取值有以下几种 0 : 推荐模式此模式比较通用,而且后台效果是最好的.
5 }: w3 ]5 n& f1 l& u% l 2 : 同模式0,如果模式0有崩溃问题,可以尝试此模式. 注意0和2模式,当主绑定(第一个绑定同个窗口的对象)绑定成功后,那么调用主绑定的线程必须一致维持,否则线程一旦推出,对应的绑定也会消失.
4 M, R3 B, u0 b1 @ 101 : 超级绑定模式. 可隐藏目标进程中的dm.dll.避免被恶意检测.效果要比dx.public.hide.dll好. 推荐使用.2 Z; U2 W% q- W. x( x$ `
103 : 同模式101,如果模式101有崩溃问题,可以尝试此模式.
* `0 R+ f7 T2 b6 s
9 d3 ]( w" q! f# @/ s8 { 11 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统/ J ]9 |1 W* ?( l0 |
+ A: a- d5 B7 M/ T. `* _
13 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统0 \1 ]# `) ]* M7 U9 u
需要注意的是: 模式101 103在大部分窗口下绑定都没问题。但也有少数特殊的窗口,比如有很多子窗口的窗口,对于这种窗口,在绑定时,一定要把/ G( Q" g t$ v7 m9 P
鼠标指向一个可以输入文字的窗口,比如一个文本框,最好能激活这个文本框,这样可以保证绑定的成功.
$ ]# y( }; |: _5 r" J返回值:' J+ u( k4 w( [0 ^4 A& b6 o
整形数:
6 m9 N. D8 G5 x0: 失败
\' Z5 g! I( d1: 成功
# Y5 A1 v5 l# p' p Z, a5 f& n- r2 Q6 J) n
如果返回0,可以调用GetLastError来查看具体失败错误码,帮助分析问题.' `" a1 N7 u7 B2 ?# f9 i
4 o; z% H% L# i, @2 c; h
/ V; z# N# F1 J+ x9 O使用例子:
2 x& \3 L9 R# R
0 I( ^5 K9 n7 o" e5 Q% I* k9 ~绑定失败的原因
9 t5 ?5 N7 m/ X$ I1 ^. h
4 l w& s- h7 `* S2 B$ _
+ u- a& p+ g) ~
$ v6 q2 o$ U [: T7 S* M) I; t3 T" q) x4 u2 h* P0 ?
|
|