1. ホーム
  2. スクリプト・コラム
  3. vbs

スクリーンショット機能用VBS

2022-02-08 20:35:41

バイドゥによると、VBSはスクリーンショットを撮るのが難しいが、サードパーティーのソフトを使い、ソフトを呼び出すと、ソフトが自動的にスクリーンショットを撮ってくれる方法があるそうだ。

しかし、それではそもそもVBSを使う意味がなくなってしまいます。

VBSを使う理由は、簡単で速いからです。サードパーティのソフトを使うなら、VBで書けばいいじゃないですか。

だから・・・Excelを呼び出してVBAでやればいいだけなんです。
もっと良い方法はないでしょうか?

実際のvbsの呼び出しは、vbaの特性を使用して、APIを呼び出すことができますこの方法も、インターネット上のコードをチェックし、イベント関数のUSER32モジュールkeybd_eventのスクリーンショットを呼び出します。

結局、ある神主が次のようなコードを出してきた。

'VBScreenshot.vbs
' Win7x64 tested and passed (with Word 2007 installed).
' Reference.
' http://qtp.blogspot.com/2010/02/screenshot-vbscript.html
' http://www.fixitscripts.com/problems/take-screenshot-of-current-user-s-session

With CreateObject("Word.Basic")
 .Sendkeys "{prtsc}"
 .FileQuit '.AppClose
End With

Msgbox "Screen has been captured to clipboard. ", vbSystemModal+vbInformation, WScript.ScriptName


それは大変でしたね。

そして最後にもっとすごい方法を紹介します

data = " 4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000C00000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000450E6EDA016F0089016F0089016F0089016F0189006F008963701389026F0089E9700B89006F008952696368016F008900000000000000000000000000000000504500004C01010017E773460000000000000000E0000F010B01060000000000000400000000000080110000001000000010000000004000001000000002000004000000000000000400000000000000002000000002000000000000020000000000100000100000000010000010000000000000100000000000000000000000F012000028000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000080000000000000000000000000000000000000000000000000000002E646174610000003A030000001000000004000000020000000000000000000000000000400000C00000000000000000000000000000000000000000000000000000000000000000 "

TargetFileName = "C:\tmp.exe"

With CreateObject("ADODB.Stream"):.Type = 1:.Open:.Write StrToByte(data):.SaveToFile TargetFileName, 2:.Close:End With

WScript.CreateObject("WScript.Shell").Run TargetFileName & " /s",,true
WScript.CreateObject("WScript.Shell").Run "cmd /c del " &TargetFileName,vbhid
MsgBox "The current screen image has been copied to the system clipboard", 64, "Info"

Function StrToByte(str)
    Set xmldoc = CreateObject("Microsoft.XMLDOM")
    xmldoc.loadXML "<?xml version=""1.0""? >"
    Set pic = xmldoc.createElement("pic")
    pic.dataType = "bin.hex"
    pic.nodeTypedValue = str
    StrToByte = pic.nodeTypedValue
End Function

サードパーティツールの短いコレクションをVBSスクリプトに入れ、豊かな機能を実現することである