たまには技術ネタも書け!とお叱りを受けそうなので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 件のコメント:
コメントを投稿