3.スナップショットをファイルに保存及び印刷 |
1.スナップショットをファイルに保存及び印刷 2. 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:SendInputV6 参照設定方法参照 使用 API: その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。 :
|
1.スナップショットをファイルに保存及び印刷 |
Option Explicit 'デスクトップウィンドウのハンドルを取得します。 Private Declare Function GetDesktopWindow Lib "user32" () As Long Private Sub Command1_Click() 'スクリーン全体をクリップボードにコピー Dim Myhwnd As Long Dim SI As New SendInputV6.Class1 Clipboard.Clear Call SI.WaitTime(500) 'DesktopWindow のハンドルを取得 Myhwnd = GetDesktopWindow If Myhwnd <> 0 Then '指定のウィンドウをアクティブにする(最小化の場合は元のサイズで表示) Call SI.fSetForGrdWindow(Myhwnd) 'MsgWaitForMultipleObjects API を使っての安全な待機関数(ミリ秒単位で指定) Call SI.WaitTime(500) 'その間、0.5秒待つ(最小化になっている場合もあるので) '下記のように実行したいキー操作をマクロの記録のように書き込んで下さい。 Call SI.KeyReSet 'キー操作の初期化(使用した変数等の初期化) Call SI.KeyDown(vbKeySnapshot) 'PrintScreen キーの押し下げの動作を記録(実際の操作は行われない) Call SI.KeyUp(vbKeySnapshot) 'PrintScreen キーの解放の動作を記録 Call SI.KeyStroke '上記一連のキー操作を一括で実行(ここで初めてキー操作を実行) Call SI.WaitTime(500) 'クリップボードにコピーされるまで待つ Call sPrintOut(True) 'クリップボードの画像の保存及び印刷 End If End Sub Private Sub Command2_Click() 'アクティブウィンドウのみをクリップボードにコピー Dim Myhwnd As Long Dim SI As New SendInputV6.Class1 Clipboard.Clear 'アクティブウィンドウのハンドルを取得する Myhwnd = SI.fGetForGrdWindow(2000) If Myhwnd <> 0 Then Call SI.fSetForGrdWindow(Myhwnd) Call SI.WaitTime(500) Call SI.KeyReSet Call SI.KeyDown(vbKeyMenu) 'Alt キーを操作 Call SI.KeyDown(vbKeySnapshot) ' Call SI.KeyUp(vbKeySnapshot) Call SI.KeyUp(vbKeyMenu) Call SI.KeyStroke Call SI.WaitTime(500) Call sPrintOut(True) End If End Sub Private Sub sPrintOut(ByVal PrintOn As Boolean) Dim MyFileName As String, PicData As Picture 'クリップボード内にビットマップ形式のデータがあるか調べる If Clipboard.GetFormat(vbCFBitmap) Then 'ファイル名を自動生成 MyFileName = App.Path & "\" & Format$(Now, "yymmddhhmmss") & ".BMP" '表示データをビットマップ形式のデータで保存 Set PicData = Clipboard.GetData Call SavePicture(PicData, MyFileName) If PrintOn Then '印刷する場合 With Printer .ScaleMode = vbMillimeters .PaperSize = vbPRPSA4 .Orientation = vbPRORLandscape .PaintPicture PicData, 10, 0 .EndDoc End With End If Else MsgBox "保存出来ませんでした。" End If End Sub スクリーンのスナップショットをクリップボードに保存及び印刷を今回の見直しを機に、SendInputV6を使って作り直しました。(keybd_event API を使っている事やコード自体が今となっては、少しお粗末な事もあり) |
2. |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
スクリーンのスナップショット コピー キャプチャ ハードコピー アクティブウィンドウ デスクトップウィンドウ |