|
|
|
函数简介: 绑定指定的窗口,并指定这个窗口的屏幕颜色获取方式,鼠标仿真模式,键盘仿真模式,以及模式设定,高级用户可以参考BindWindowEx更加灵活强大.: i9 A. f' c; e8 N7 {
函数原型:
# p9 n$ k- C2 `/ I: ^ a. C- V; w- b0 Z% q
long BindWindow(hwnd,display,mouse,keypad,mode)$ W8 k0 G0 [% x. H: c
参数定义:
6 n l3 q8 J# l5 o
' ^1 Q/ Z/ S$ N9 h7 T$ Uhwnd 整形数: 指定的窗口句柄# i. V/ n7 x& j4 k4 p# i( w
$ p, i0 s0 l" i' q) I+ kdisplay 字符串: 屏幕颜色获取方式 取值有以下几种
! Z, _, m8 ?: S3 `) ?9 C4 {8 `8 ?3 d8 h
"normal" : 正常模式,平常我们用的前台截屏模式
9 Q* _! B' v* V- q! i
6 g8 m% w# B. ?, ?! D7 M"gdi" : gdi模式,用于窗口采用GDI方式刷新时. 此模式占用CPU较大. 参考SetAero win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。: Q/ A0 Y6 c6 _8 j$ J
"gdi2" : gdi2模式,此模式兼容性较强,但是速度比gdi模式要慢许多,如果gdi模式发现后台不刷新时,可以考虑用gdi2模式.
/ u3 P3 b! W$ S4 y$ \
, Y7 C$ v! @5 R& `"dx2" : dx2模式,用于窗口采用dx模式刷新,如果dx方式会出现窗口所在进程崩溃的状况,可以考虑采用这种.采用这种方式要保证窗口有一部分在屏幕外.win7 win8或者vista不需要移动也可后台.此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。8 `, @2 Q' D7 d% j) k2 N
"dx3" : dx3模式,同dx2模式,但是如果发现有些窗口后台不刷新时,可以考虑用dx3模式,此模式比dx2模式慢许多. 此模式占用CPU较大. 参考SetAero. win10以上系统使用此模式,如果截图失败,尝试把目标程序重新开启再试试。
; c% W' _ u5 e: ]"dx" : dx模式,等同于BindWindowEx中,display设置的"dx.graphic.2d|dx.graphic.3d",具体参考BindWindowEx
) U& i( a# w7 P; Y) W
$ ]. @$ g F1 v. K
4 x0 H0 F# J3 G' kmouse 字符串: 鼠标仿真模式 取值有以下几种- }) J- D0 k* {) ~. p
1 `; b, N0 d% S8 j: @7 I
"normal" : 正常模式,平常我们用的前台鼠标模式
3 W. F- b: i- H; ^: ?. g
0 e6 P, P. C M: U5 H% o( ^' o. A"windows": Windows模式,采取模拟windows消息方式 同按键自带后台插件.- ~0 g$ _( |4 o5 C5 |& v) P" _$ ~
"windows2": Windows2 模式,采取模拟windows消息方式(锁定鼠标位置) 此模式等同于BindWindowEx中的mouse为以下组合
$ {6 o+ K6 F& T, {0 ?8 U6 M8 P"dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.message"
. U) Q' Y/ ~- E/ ^
" h; s; x* M4 k/ H( C& |" W, b* u- o# m" Q
"windows3": Windows3模式,采取模拟windows消息方式,可以支持有多个子窗口的窗口后台." F9 f6 f0 b2 P; j4 ^; Z$ A
9 s! d' e1 ?, Z; b
"dx": dx模式,采用模拟dx后台鼠标模式,这种方式会锁定鼠标输入.有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后鼠标无效的情况.此模式等同于BindWindowEx中的mouse为以下组合
4 r9 a# j- h/ p7 @8 j5 x9 d"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"
( R- N# a" L" I( R8 [+ }) Y" u' o
# E8 L0 T: `- i4 U
& O, t' q3 m3 {- b"dx2":dx2模式,这种方式类似于dx模式,但是不会锁定外部鼠标输入.
) q# V; y9 o% c0 n有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后手动激活),否则可能会出现绑定后鼠标无效的情况. 此模式等同于BindWindowEx中的mouse为以下组合& G- U' Q* s" o @4 v
"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"
1 e: T# T/ w6 p) D8 y% K7 {+ j6 _
& `4 s) v9 @ y9 [" l5 q" s! F' A' C0 R3 ~5 S% {
keypad 字符串: 键盘仿真模式 取值有以下几种9 q6 ^9 f& U" g/ ~) K
8 \/ |! V+ g2 ~
"normal" : 正常模式,平常我们用的前台键盘模式
5 M6 I4 U$ p, x c5 \/ u; M1 Q9 U: O H: ^4 _
"windows": Windows模式,采取模拟windows消息方式 同按键的后台插件.+ |+ {/ g& ^ _ }
% D- C9 l2 M, Z' J' Z7 [/ F
"dx": dx模式,采用模拟dx后台键盘模式。有些窗口在此模式下绑定时,需要先激活窗口再绑定(或者绑定以后激活),否则可能会出现绑定后键盘无效的情况. 此模式等同于BindWindowEx中的keypad为以下组合
9 m9 ~; r( H5 u) ^- C"dx.public.active.api|dx.public.active.message| dx.keypad.state.api|dx.keypad.api|dx.keypad.input.lock.api"
( G @3 V8 X4 D
2 _% d. ~5 _- I0 [* d3 w1 d$ l" A9 f# o* y
7 G- |- c6 A9 @, m/ @) m! @mode 整形数: 模式。 取值有以下几种 0 : 推荐模式此模式比较通用,而且后台效果是最好的.
8 |; n( h$ B* c( q, u" | 2 : 同模式0,如果模式0有崩溃问题,可以尝试此模式. 注意0和2模式,当主绑定(第一个绑定同个窗口的对象)绑定成功后,那么调用主绑定的线程必须一致维持,否则线程一旦推出,对应的绑定也会消失.6 r2 u& A0 H* b3 e
101 : 超级绑定模式. 可隐藏目标进程中的dm.dll.避免被恶意检测.效果要比dx.public.hide.dll好. 推荐使用.! J# y9 s+ C0 i* Z
103 : 同模式101,如果模式101有崩溃问题,可以尝试此模式. 3 u, n, r# Z' x% m' J4 N
% z9 i- `3 F+ z2 Z1 A4 Z
11 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统: M. I, x( z" G2 R/ w( {6 h0 z
9 W" z$ ^( b; Y
13 : 需要加载驱动,适合一些特殊的窗口,如果前面的无法绑定,可以尝试此模式. 此模式不支持32位系统
x- M7 b- e( U2 W需要注意的是: 模式101 103在大部分窗口下绑定都没问题。但也有少数特殊的窗口,比如有很多子窗口的窗口,对于这种窗口,在绑定时,一定要把8 C$ `$ Y, q, I3 u
鼠标指向一个可以输入文字的窗口,比如一个文本框,最好能激活这个文本框,这样可以保证绑定的成功.
. D1 ^# _5 F* j/ V返回值:6 a& ]0 l+ m1 Y9 a
整形数:+ L1 ~9 K. o6 w
0: 失败
, a% V! M% T9 I- I6 c! a1: 成功
" I( ^4 ^6 F6 L" K
3 {5 G3 f5 `% b7 N5 P如果返回0,可以调用GetLastError来查看具体失败错误码,帮助分析问题.. u2 M: T8 f, J/ g
* x) R6 V4 [ m6 w* u: ?5 ^
8 ?, B; I' `: N+ t; {3 w使用例子:
, Y: ]! V# q! ~: r
$ q0 |0 b' e9 F( }
绑定失败的原因
* [% U0 `! l1 W
r. j! [/ R: m9 {# g) U5 ^7 h" }# X& F9 S: z; w0 o$ U6 [
& m0 B% i# x4 _6 V" p% k
) ^8 C+ w( E1 i6 S |
|