sendkeys 的用法(MSDN):
SendKeys 语句
将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样。
语法
SendKeys string[, wait]
SendKeys 语句的语法具有以下几个命名参数:
| 部分 | 描述 |
|---|---|
| string | 必需的。字符串表达式,指定要发送的按键消息。 |
| Wait | 可选的。指定等待方式的 BooleandefBooleanDataType@veendf98.chm 值。如果为 False(缺省值),则控件在按键发送出去之后立刻返回到过程。如果为 True,则按键消息必须在控件返回到过程之前加以处理。 |
说明
每个按键由一个或多个字符表示。为了指定单一键盘字符,必须按字符本身的键。例如,为了表示字母 A,可以用 "A" 作为 string。为了表示多个字符,就必须在字符后面直接加上另一个字符。例如,要表示 A、B 及 C,可用 "ABC" 作为 string。
对 SendKeys 来说,加号 (+)、插入符 (^)、百分比符号 (%)、上划线 (~) 及圆括号 ( ) 都具有特殊意义。为了指定上述任何一个字符,要将它放在大括号 ({}) 当中。例如,要指定正号,可用 {+} 表示。方括号 ([ ]) 对 SendKeys 来说并不具有特殊意义,但必须将它们放在大括号中。在其它应用程序中,方括号有特殊意义,在出现动态数据交换 (DDE) 的时候,它可能具有重要意义。为了指定大括号字符,请使用 {{} 及 {}}。
为了在按下按键时指定那些不显示的字符,例如 ENTER 或 TAB 以及那些表示动作而非字符的按键,请使用下列代码:
| 按键 | 代码 |
|---|---|
| BACKSPACE | {BACKSPACE}, {BS}, 或 {BKSP} |
| BREAK | {BREAK} |
| CAPS LOCK | {CAPSLOCK} |
| DEL or DELETE | {DELETE} 或 {DEL} |
| DOWN ARROW | {DOWN} |
| END | {END} |
| ENTER | {ENTER}或 ~ |
| ESC | {ESC} |
| HELP | {HELP} |
| HOME | {HOME} |
| INS or INSERT | {INSERT} 或 {INS} |
| LEFT ARROW | {LEFT} |
| NUM LOCK | {NUMLOCK} |
| PAGE DOWN | {PGDN} |
| PAGE UP | {PGUP} |
| PRINT SCREEN | {PRTSC} |
| RIGHT ARROW | {RIGHT} |
| SCROLL LOCK | {SCROLLLOCK} |
| TAB | {TAB} |
| UP ARROW | {UP} |
| F1 | {F1} |
| F2 | {F2} |
| F3 | {F3} |
| F4 | {F4} |
| F5 | {F5} |
| F6 | {F6} |
| F7 | {F7} |
| F8 | {F8} |
| F9 | {F9} |
| F10 | {F10} |
| F11 | {F11} |
| F12 | {F12} |
| F13 | {F13} |
| F14 | {F14} |
| F15 | {F15} |
| F16 | {F16} |
为了指定那些与 SHIFT、CTRL 及 ALT 等按键结合的组合键,可在这些按键码的前面放置一个或多个代码,这些代码列举如下:
| 按键 | 代码 |
|---|---|
| SHIFT | + |
| CTRL | ^ |
| ALT | % |
为了说明在按下其它按键时应同时按下 SHIFT、CTRL、及 ALT 的任意组合键,请把那些按键的码放在括号当中。例如,为了说明按下 E 与 C 的时候同时按下 SHIFT 键,请使用 "+(EC)"。为了说明在按下 E 的时候同时按下 SHIFT 键,但接着按 C 而不按 SHIFT,则使用 "+EC"。
为了指定重复键,使用 {key number} 的形式。必须在 key 与 number 之间放置一个空格。例如,{LEFT 42} 意指 42 次按下 LEFT ARROW 键;{h 10} 则是指 10 次按下 H 键。
注意 不能用 SendKeys 将按键消息发送到这样一个应用程序,这个应用程序并没有被设计成在 Microsoft Windows or Macintosh中运行。Sendkeys 也无法将 PRINT SCREEN 按键 {PRTSC} 发送到任何应用程序。
我们如果想发送键命令,可以用 SENDKEYS ,但要发送 WINDOWS 微标键怎么做?(MSDN中没有给出WINDOWS键 的键码)
下面是可以执行的代码:
Private
Declare
Sub
keybd_event Lib
"
user32
"
(ByVal bVk
As
Byte
, ByVal bScan
As
Byte
, ByVal dwFlags
As
Long
, ByVal dwExtraInfo
As
Long
)
Private
Const
VK_LWIN
=
&
H5B
'
Left Windows key (Microsoft Natural keyboard)
Private
Const
VK_RWIN
=
&
H5C
'
Right Windows key (Natural keyboard)
Private
Sub
Command1_Click()
'
left windows
keybd_event VK_LWIN,
0
,
&
H1,
0
keybd_event VK_LWIN,
0
,
&
H2,
0
End Sub
Private
Sub
Command2_Click()
'
right windows
keybd_event VK_RWIN,
0
,
&
H1,
0
keybd_event VK_RWIN,
0
,
&
H2,
0
End Sub
详细的解释可参看SENDKEYS 类(http://www.vbaccelerator.com/home/VB/Tips/SendKeys_using_the_API/SendKeys_Demonstration_zip_cSendKeys_cls.asp):
vbAccelerator
-
Contents of code file: cSendKeys.clsVERSION
1.0
CLASS
BEGIN
MultiUse
=
-
1
'
True
END
Attribute VB_Name
=
"
cSendKeys
"
Attribute VB_GlobalNameSpace
=
False
Attribute VB_Creatable
=
True
Attribute VB_PredeclaredId
=
False
Attribute VB_Exposed
=
False
Option
Explicit

Public
Enum MoreKeyConstants
VK_LWIN
=
&
H5B
'
Left Windows key (Microsoft Natural keyboard)
VK_RWIN
=
&
H5C
'
Right Windows key (Natural keyboard)
VK_APPS
=
&
H5D
'
Applications key (Natural keyboard)
VK_SLEEP
=
&
H5F
'
Computer Sleep key
VK_RMENU
=
&
HA5
'
Right MENU key
VK_BROWSER_BACK
=
&
HA6
'
Windows 2000/XP: Browser Back key
VK_BROWSER_FORWARD
=
&
HA7
'
Windows 2000/XP: Browser Forward key
VK_BROWSER_REFRESH
=
&
HA8
'
Windows 2000/XP: Browser Refresh key
VK_BROWSER_STOP
=
&
HA9
'
Windows 2000/XP: Browser Stop key
VK_BROWSER_SEARCH
=
&
HAA
'
Windows 2000/XP: Browser Search key
VK_BROWSER_FAVORITES
=
&
HAB
'
Windows 2000/XP: Browser Favorites key
VK_BROWSER_HOME
=
&
HAC
'
Windows 2000/XP: Browser Start and Home key
VK_VOLUME_MUTE
=
&
HAD
'
Windows 2000/XP: Volume Mute key
VK_VOLUME_DOWN
=
&
HAE
'
Windows 2000/XP: Volume Down key
VK_VOLUME_UP
=
&
HAF
'
Windows 2000/XP: Volume Up key
VK_MEDIA_NEXT_TRACK
=
&
HB0
'
Windows 2000/XP: Next Track key
VK_MEDIA_PREV_TRACK
=
&
HB1
'
Windows 2000/XP: Previous Track key
VK_MEDIA_STOP
=
&
HB2
'
Windows 2000/XP: Stop Media key
VK_MEDIA_PLAY_PAUSE
=
&
HB3
'
Windows 2000/XP: Play/Pause Media key
VK_LAUNCH_MAIL
=
&
HB4
'
Windows 2000/XP: Start Mail key
VK_LAUNCH_MEDIA_SELECT
=
&
HB5
'
Windows 2000/XP: Select Media key
VK_LAUNCH_APP1
=
&
HB6
'
Windows 2000/XP: Start Application 1 key
VK_LAUNCH_APP2
=
&
HB7
'
Windows 2000/XP: Start Application 2 key
VK_OEM_1
=
&
HBA
'
Used for miscellaneous characters; it can vary by keyboard.
Windows
2000
/
XP:
For
the US standard keyboard, the
'
;:' key
VK_OEM_PLUS
=
&
HBB
'
Windows 2000/XP: For any country/region, the '+' key
VK_OEM_COMMA
=
&
HBC
'
Windows 2000/XP: For any country/region, the ',' key
VK_OEM_MINUS
=
&
HBD
'
Windows 2000/XP: For any country/region, the '-' key
VK_OEM_PERIOD
=
&
HBE
'
Windows 2000/XP: For any country/region, the '.' key
VK_OEM_2
=
&
HBF
'
Used for miscellaneous characters; it can vary by keyboard.
Windows
2000
/
XP:
For
the US standard keyboard, the
'
/?' key
VK_OEM_3
=
&
HC0
'
Used for miscellaneous characters; it can vary by keyboard.
Windows
2000
/
XP:
For
the US standard keyboard, the
'
`~' key
'
C1D7 Reserved
'
D8DA Unassigned
VK_OEM_4
=
&
HDB
'
Used for miscellaneous characters; it can vary by keyboard.
Windows
2000
/
XP:
For
the US standard keyboard, the
'
[{' key
VK_OEM_5
=
&
HDC
'
Used for miscellaneous characters; it can vary by keyboard.
Windows
2000
/
XP:
For
the US standard keyboard, the
'
|' key
VK_OEM_6
=
&
HDD
'
Used for miscellaneous characters; it can vary by keyboard
Windows
2000
/
XP:
For
the US standard keyboard, the
'
]}' key
VK_OEM_7
=
&
HDE
'
Used for miscellaneous characters; it can vary by
keyboard. Windows
2000
/
XP:
For
the US standard keyboard, the
'
single-quote/double-quote' key
VK_OEM_8
=
&
HDF
'
Used for miscellaneous characters; it can vary by keyboard.
E0 Reserved
'
- E1 OEM specific
VK_OEM_102
=
&
HE2
'
Windows 2000/XP: Either the angle bracket key or the
backslash key
on
the RT
102
-
key keyboard
'
E3E4 OEM specific
VK_PROCESSKEY
=
&
HE5
'
Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME
PROCESS key
'
E6 OEM specific
VK_PACKET
=
&
HE7
'
Windows 2000/XP: Used to pass Unicode characters as if
they were keystrokes. The VK_PACKET key
is
the low word of a
32
-
bit Virtual
Key value used
for
non
-
keyboard input methods.
For
more information, see
Remark in KEYBDINPUT, SendInput, WM_KEYDOWN,
and
WM_KEYUP
'
E8 Unassigned
'
E9F5 OEM specific
VK_ATTN
=
&
HF6
'
Attn key
VK_CRSEL
=
&
HF7
'
CrSel key
VK_EXSEL
=
&
HF8
'
ExSel key
VK_EREOF
=
&
HF9
'
Erase EOF key
VK_PLAY
=
&
HFA
'
Play key
VK_ZOOM
=
&
HFB
'
Zoom key
VK_NONAME
=
&
HFC
'
Reserved for future use
VK_PA1
=
&
HFD
'
PA1 key
VK_OEM_CLEAR
=
&
HFE
'
Clear key
End
Enum
Private
m_colKeyMap
As
New
Collection
Private
Declare
Sub
keybd_event Lib
"
user32
"
( _
ByVal bVk
As
Byte
, ByVal bScan
As
Byte
, _
ByVal dwFlags
As
Long
, ByVal dwExtraInfo
As
Long
)
Private
Const
KEYEVENTF_EXTENDEDKEY
=
&
H1
Private
Const
KEYEVENTF_KEYUP
=
&
H2
Private
Declare
Function
GetVersion Lib
"
kernel32
"
()
As
Long
Private
Declare
Function
VkKeyScan Lib
"
user32
"
Alias
"
VkKeyScanA
"
( _
ByVal cChar
As
Byte
)
As
Integer
Private
Declare
Function
VkKeyScanW Lib
"
user32
"
( _
ByVal cChar
As
Integer
)
As
Integer

Private
Declare
Sub
CopyMemory Lib
"
kernel32
"
Alias
"
RtlMoveMemory
"
( _
lpvDest
As
Any, lpvSource
As
Any, ByVal cbCopy
As
Long
)
Private
Function
nextChar(ByRef sString
As
String
, ByVal iPos
As
Long
, Optional
ByVal lLen
As
Long
=
0
)
As
String
If
(lLen
=
0
)
Then
lLen
=
Len
(sString)
If
(iPos
+
1
<=
lLen)
Then
本文详细介绍了 SendKeys 语句的用法,包括语法、命名参数,说明了特殊字符及组合键的表示方法,还提及重复键的指定形式。同时指出 SendKeys 使用的限制,如不能用于特定应用程序、无法发送 PRINT SCREEN 按键等,最后探讨了发送 WINDOWS 微标键的问题。
3782

被折叠的 条评论
为什么被折叠?



