• ベストアンサー

画面ハードコピーのプログラム

 お世話になります。  株チャートの動きを確認する為、ボタンをクリックすると、モニタに映ってるモノ全体が、瞬時に、BMPで保存されるというプログラムを作ってます。 キーボードの PrtScSysRq を押して、エクセルなどに貼付け保存という手作業をエクセルではなく BMP に置き換えて保存という事です。  過去の類似質問を見てみますと、「ピクチャーボックスの画像を保存」はありましたが、「モニタの画像」は見当たらず、グーグルなどで検索して、ムリヤリ作ってみました。下記参照。  しかし、実際動かしてみると、「名前がついて保存されてるが何も映っていない」「瞬時ではなく、30秒~2分くらい前の画像が保存される」という不具合になってます。    この場合の正しいプログラムを教えて欲しいです。  御教授御願いします。 form1 に .Command1 .Picture1 を貼り付けます。 Private Type tagKEYBDINPUT wVk As Integer wScan As Integer dwFlags As Long time As Long dwExtraInfo As Long bytUnusedPadding(7) As Byte End Type Private Type tagINPUT type As Long ki As tagKEYBDINPUT End Type Private Const INPUT_KEYBOARD = 1 Private Const VK_LMENU = &HA4& Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As tagINPUT, ByVal cbSize As Long) As Long Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Private Const VK_SNAPSHOT = &H2C Private Const KEYEVENTF_KEYUP = &H2 Private Const KEYEVENTF_EXTENDEDKEY = &H1 Private IYI As String, G_CC As Integer Private Sub Command1_Click() G_CC = G_CC + 1 Call keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0) Call keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0) Picture1.Picture = Clipboard.GetData IYI = "C:\test\" & G_CC & "_SAMP.BMP" Call SavePicture(Picture1.Image, IYI) Clipboard.Clear End Sub Private Sub Form_Load() With Me .ScaleMode = vbPixels With .Picture1 .Appearance = 0 .AutoRedraw = True .AutoSize = True .BorderStyle = 0 .Visible = False End With End With G_CC = 0 End Sub

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

つまり、スクリーンキャプチャしたいってこと?? PrtScSysRq…一瞬ナニ?ってなったけど、 「PrintScreen」ボタンのことですね^^; 下記サイトで画面キャプチャの仕方が載ってます。 http://dobon.net/vb/dotnet/graphics/screencapture.html 取得したのをBMP保存するようにすればよいのでは?

ryu8472
質問者

お礼

早速の御回答有難う御座います。 >>つまり、スクリーンキャプチャしたいってこと?? 恥ずかしながら、用語をイマイチ分かっておらず、メンドウな質問でしたが、御紹介頂いたサイト有効でした。 何とか、完成??できました。 また何かあればお付き合い下さい。 有難う御座いました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

VBAでは、私もやってみましたが SendKeys "{PRTSC}"  は効かないようです。 http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=7145;id=excel http://www.excel.studio-kazu.jp/kw/20080423200952.html ーー WEBを調べて、APIを使って Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Private Const VK_SNAPSHOT = &H2C ーー Sub test() Application.VBE.MainWindow.Visible = False Workbooks("Book1").Activate Sheets("Sheet11").Range("A1").Select '--- keybd_event &H2C, 1, 0, 0 End Sub を実行する。 そして、ペイントを開き、CTRL+Vすると上記指定エクセル・シート画面が表示されて出てきました。 そういうことから、上記プログラムで、Clipboardに画像が入ったことは間違いない。 Clipboardから後はどうするか、考えてください。

ryu8472
質問者

お礼

御回答有難うございます。 御陰様で何とかできました。 VBAですか、使った事がないので何とも。

すると、全ての回答が全文表示されます。

関連するQ&A