更新日付

最新投稿:素戔嗚神社(藤戸)
投稿日:2024年11月28日
既存投稿更新:高岡神社
更新日:2024年10月6日

2012年1月7日土曜日

ACCESSの実行画面をMSペイントに出力

たまには技術ネタも書け!とお叱りを受けそうなのでw

ACCESSを使用したシステムでハードコピーをボタン等でしたい。
出来たハードコピーはペイントで見たい との案件。
とりあえず思いついたのがクリップボード経由での受け渡し。
ただ出力先がMSペイント指定なのでめんどくさい。
しかもACCESSにクリップボード操作はサポートされてないようだし。

安直に
[prt sc]を画面から投げてクリップボードに画面コピー後
MSペイントを起動させて[Ctr+v]を投げる事を考えた。

最初 SendKeysで[scr sc]を投げたけど取れない。
ググったらどうも使えない事があるらしい。
めんどくさいけどAPIを一部使用。

以下がそのソース(簡易版w)

--------------------------------------------------------------------------------------
Option Compare Database

Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
    ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

'画面をクリップボードにコピー
Public Sub subGetSnapShot()
   
    '[prt sc]Key 送信
    Call keybd_event(CByte(vbKeySnapshot), 0, 0, 0)
    Call keybd_event(CByte(vbKeySnapshot), 0, 2, 0)
   
End Sub

'ペイント起動後、クリップボードをペースト
Public Sub subOutClipBord()

    Dim objShell    As New WSHShell
    Dim objExe      As WshExec
   
    'MSPaint起動
    Set objExe = objShell.Exec("mspaint.exe")
   
    '起動待ち
    Do Until objShell.AppActivate(objExe.ProcessID)
    Loop
   
    '[Ctr+V]key 送信
    SendKeys "^v"
   
    '参照破棄
    Set objExe = Nothing
    Set objShell = Nothing

End Sub

'画面をペイントに出力
Public Sub subOutForm()

    '画面取得
    Call subGetSnapShot
   
    '制御をWindowsに一時戻す
    DoEvents
   
    'ペイントへ出力
    Call subOutClipBord

End Sub
--------------------------------------------------------------------------------------

参照設定に[Windows Script Host Object Model]を設定して
画面から上記[subOutForm]をコールすればとりあえず動くはず^_^;

マシンのスペックが古いと時間が掛かりますし
実行中の操作で不具合が発生する可能性もありますがw
参考程度に(^^ゞ

試行錯誤してたから1日掛かったorz・・・

0 件のコメント:

コメントを投稿