用VBS實(shí)現(xiàn)一個(gè)小鍵盤動(dòng)作CTRL+V粘貼操作與思路分析
更新時(shí)間:2009年12月23日 23:57:39 作者:
我想實(shí)現(xiàn)當(dāng)有跳出窗口"請輸入"時(shí)的1.8秒后就發(fā)送一次 CTRL + V,把本來已經(jīng)復(fù)制到剪切版中的文字自動(dòng)粘貼過去呢
提示:
1,是每次有跳出窗口時(shí)的1.8秒后都要有此動(dòng)作,并且是只發(fā)送了一次該動(dòng)作,發(fā)送完后等待下次的窗口跳出再循環(huán).
2,每次循環(huán)中都只是發(fā)送了一次CTRL + V后就停,而不是一直發(fā)送
看到問題,立即著手編寫測試代碼,這時(shí)候問題出現(xiàn):
彈出 inputbox 窗口后,VBS處于暫停狀態(tài),等待用戶輸入,點(diǎn)擊確定or取消,
所以在它后面的 Wshshell.Sendkeys "^v" 將無法執(zhí)行,
如果前面彈出 inputbox 窗口后點(diǎn)擊確定 or 取消的話,那么再執(zhí)行 ctrl+v 就不能把剪切板中的內(nèi)容粘貼到inputbox 窗口當(dāng)中,如果把Wshshell.Sendkeys "^v" 放到 inputbox 之前的話,也不行,因?yàn)?inputbox 還沒彈出來,ctrl+v也無法實(shí)現(xiàn)粘貼內(nèi)容到 inputbox,
轉(zhuǎn)換一下思路,我們把inputbox 和 sendkey寫成兩個(gè)文件,這樣它們互相就不會(huì)產(chǎn)生沖突,最終解決代碼如下:
Set WshShell=WScript.CreateObject("WScript.Shell")
WScript.Sleep 2000
Set fso=wscript.createobject("scripting.filesystemobject")
set f=fso.opentextfile("sendkey.vbs",2,true)
f.Write("Set WshShell=WScript.CreateObject(" & Chr(34) & "WScript.Shell" & chr(34) & ")")
f.WriteBlankLines(1)
f.Write("WScript.Sleep 1800")
f.WriteBlankLines(1)
f.Write("Wshshell.appactivate " & chr(34) & "提示" & chr(34))
f.WriteBlankLines(1)
f.Write("Wshshell.Sendkeys " & chr(34) & "^v" & chr(34))
f.WriteBlankLines(1)
f.Close
Wshshell.Run ("sendkey.vbs")
InputBox "請輸入","提示",""
fso.DeleteFile ("sendkey.vbs")
代碼先寫 sendkey.vbs 并執(zhí)行,執(zhí)行過程中會(huì)等待1.8秒發(fā)送 ctrl+v ,接著彈出 inputbox,這時(shí)候inputbox彈出來了,sendkey.vbs在等待1.8秒后也執(zhí)行ctrl+v把內(nèi)容粘貼到了inputbox 輸入框中.問題解決
總結(jié):在遇到一些問題的時(shí)候,不能鉆牛角尖,換個(gè)思路,其實(shí)解決起來并不難!
1,是每次有跳出窗口時(shí)的1.8秒后都要有此動(dòng)作,并且是只發(fā)送了一次該動(dòng)作,發(fā)送完后等待下次的窗口跳出再循環(huán).
2,每次循環(huán)中都只是發(fā)送了一次CTRL + V后就停,而不是一直發(fā)送
看到問題,立即著手編寫測試代碼,這時(shí)候問題出現(xiàn):
彈出 inputbox 窗口后,VBS處于暫停狀態(tài),等待用戶輸入,點(diǎn)擊確定or取消,
所以在它后面的 Wshshell.Sendkeys "^v" 將無法執(zhí)行,
如果前面彈出 inputbox 窗口后點(diǎn)擊確定 or 取消的話,那么再執(zhí)行 ctrl+v 就不能把剪切板中的內(nèi)容粘貼到inputbox 窗口當(dāng)中,如果把Wshshell.Sendkeys "^v" 放到 inputbox 之前的話,也不行,因?yàn)?inputbox 還沒彈出來,ctrl+v也無法實(shí)現(xiàn)粘貼內(nèi)容到 inputbox,
轉(zhuǎn)換一下思路,我們把inputbox 和 sendkey寫成兩個(gè)文件,這樣它們互相就不會(huì)產(chǎn)生沖突,最終解決代碼如下:
復(fù)制代碼 代碼如下:
Set WshShell=WScript.CreateObject("WScript.Shell")
WScript.Sleep 2000
Set fso=wscript.createobject("scripting.filesystemobject")
set f=fso.opentextfile("sendkey.vbs",2,true)
f.Write("Set WshShell=WScript.CreateObject(" & Chr(34) & "WScript.Shell" & chr(34) & ")")
f.WriteBlankLines(1)
f.Write("WScript.Sleep 1800")
f.WriteBlankLines(1)
f.Write("Wshshell.appactivate " & chr(34) & "提示" & chr(34))
f.WriteBlankLines(1)
f.Write("Wshshell.Sendkeys " & chr(34) & "^v" & chr(34))
f.WriteBlankLines(1)
f.Close
Wshshell.Run ("sendkey.vbs")
InputBox "請輸入","提示",""
fso.DeleteFile ("sendkey.vbs")
代碼先寫 sendkey.vbs 并執(zhí)行,執(zhí)行過程中會(huì)等待1.8秒發(fā)送 ctrl+v ,接著彈出 inputbox,這時(shí)候inputbox彈出來了,sendkey.vbs在等待1.8秒后也執(zhí)行ctrl+v把內(nèi)容粘貼到了inputbox 輸入框中.問題解決
總結(jié):在遇到一些問題的時(shí)候,不能鉆牛角尖,換個(gè)思路,其實(shí)解決起來并不難!
相關(guān)文章
輸入mdb數(shù)據(jù)庫即可將打包的mdb文件解包
2008-01-01VBS中通過調(diào)用CAPICOM對象實(shí)現(xiàn)SHA1&MD5加密
MD5算法的VBS代碼在網(wǎng)上可以找到很多,這些代碼都是按照“算法”寫出來的,所以都很長,更重要的是,找不到SHA1算法的VBS實(shí)現(xiàn)。2011-01-01