通過SendKeys可以模擬鍵盤事件
<body>
<div><a href="#" οnfοcus="onblurpre()">999</a></div></body>
</html>
<script type="text/javascript">
function onblurpre() {
var wsh=new ActiveXObject("wscript.shell") ;
wsh.sendKeys("{CAPSLOCK}");
}
</script>
以下爲摘抄:
SendKeys 方法
將一個或多個鍵擊發送到活動窗口(彷彿是在鍵盤上擊鍵一樣)。
object.SendKeys(string) 參數
- object
- WshShell 對象。
- string
- 表示要發送的鍵擊(一個或多個)的字符串值。
說明
使用 SendKeys 方法可以將鍵擊發送到無自動化界面的應用程序中。多數鍵盤字符都可用一個鍵擊表示。某些鍵盤字符由多個鍵擊組合而成(例如,CTRL+SHIFT+HOME)。要發送單個鍵盤字符,請將字符本身作爲 string 參數發送。例如,要發送字母 x,則請發送 string 參數 "x"。
注意 要發送空格,則請發送字符串 " "。
可使用 SendKeys 同時發送多個鍵擊。爲此,可將每個鍵擊按順序排列在一起,以此來創建表示一系列鍵擊的複合字符串參數。例如,要發送鍵擊 a、b 和 c,則需要發送字符串參數 "abc"。SendKeys 方法將某些字符用作字符的修飾符(而不使用其本身的含義)。這組特殊的字符可包括圓括號、中括號、大括號,以及:
- 加號 "+"、
- 插入記號 "^"、
- 百分號 "%"、
- 和“非”符號 "~"。
用大括號 "{}" 括起這些字符可以發送它們。例如,要發送加號,請使用字符串參數 "{+}"。SendKeys中使用的中括號 "[ ]" 無任何特殊含義,但是必須把它們括在大括號中,以便容納確實要賦予其特殊含義的應用程序(例如,對於動態數據交換 (DDE) 就是這樣)。
- 要發送左中括號字符,請發送字符串參數 "{[]";要發送右中括號字符,請發送字符串參數 "{]}"。
- 要發送左大括號字符,請發送字符串參數 "{{}";要發送右大括號字符,請發送字符串參數 "{}}"。
某些鍵擊不生成字符(如 ENTER 和 TAB)。某些鍵擊表示操作(如 BACKSPACE 和 BREAK)。要發送這些類型的鍵擊,請發送下表中列出的參數:
鍵 | 參數 |
---|---|
退格鍵 | {BACKSPACE}、{BS} 或 {BKSP} |
BREAK | {BREAK} |
CAPS LOCK | {CAPSLOCK} |
DEL 或 DELETE | {DELETE} 或 {DEL} |
向下鍵 | {DOWN} |
END | {END} |
ENTER | {ENTER} 或 ~ |
ESC | {ESC} |
HELP | {HELP} |
HOME | {HOME} |
INS 或 INSERT | {INSERT} 或 {INS} |
向左鍵 | {LEFT} |
NUM LOCK | {NUMLOCK} |
PAGE DOWN | {PGDN} |
PAGE UP | {PGUP} |
PRINT SCREEN | {PRTSC} |
向右鍵 | {RIGHT} |
SCROLL LOCK | {SCROLLLOCK} |
TAB | {TAB} |
向上鍵 | {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 時只按 c(而不按 SHIFT),則發送字符串參數 "+ec"。
可使用 SendKeys 方法發送一種在一行內重複按鍵的鍵擊。爲此,要創建複合字符串參數,以指定要重複的鍵擊,並在其後指定重複次數。可使用 {鍵擊 數字} 形式的複合字符串參數來完成上述操作。例如,如果要發送 10 次 "x",則需要發送字符串參數 "{x 10}"。請確保在鍵擊和數字之間有一個空格。
注意 只可以發送重複按一個鍵的鍵擊。例如,可以發送 10 次 "x",但不可發送 10 次 "Ctrl+x"。
注意 不能嚮應用程序發送 PRINT SCREEN 鍵 {PRTSC}。
示例
下面的示例演示如何將一個 .wsf 文件用於以不同腳本語言(VBScript 和 Jscript)寫成的兩個作業。每個作業都運行 Windows 計算器並將它發送給鍵擊以執行簡單的計算。
<package> <job id="vbs"> <script language="VBScript"> set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "calc" WScript.Sleep 100 WshShell.AppActivate "Calculator" WScript.Sleep 100 WshShell.SendKeys
"1{+}" WScript.Sleep 500 WshShell.SendKeys
"2" WScript.Sleep 500 WshShell.SendKeys
"~" WScript.Sleep 500 WshShell.SendKeys
"*3" WScript.Sleep 500 WshShell.SendKeys
"~" WScript.Sleep 2500 </script> </job> <job id="js"> <script language="JScript"> var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Run("calc"); WScript.Sleep(100); WshShell.AppActivate("Calculator"); WScript.Sleep(100); WshShell.SendKeys
("1{+}"); WScript.Sleep(500); WshShell.SendKeys
("2"); WScript.Sleep(500); WshShell.SendKeys
("~"); WScript.Sleep(500); WshShell.SendKeys
("*3"); WScript.Sleep(500); WshShell.SendKeys
("~"); WScript.Sleep(2500); </script> </job> </package>