![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
No.3ベストアンサー
- 回答日時:
[PrintScreen]ボタンは画面全体のスナップショット
[Alt]+[PrintScreen]はアクティブ画面などのスナップショットです。
子フォームだけのスナップショットは、キー操作だけでは標準では無理ですね。。。
サンプルです。
手順としては
1.子フォームとなっているフォーム1が、デスクトップ上のどの位置に存在するか座標を得る
2.画像作成用のピクチャボックスをその領域座標とおなじ大きさになるように、大きさをセットする
3.デスクトップ領域のフォーム1の座標部分を、ピクチャボックスに描画
4.保存
というのが大きな流れです。
必要なもの
MDIForm1
Form1(デザイン時にMDIChild=True)
├コマンドボタン
└ピクチャボックス
-----Form1ここから-----
Option Explicit
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Sub Command1_Click()
Dim recWork As RECT
Dim lngL As Long, lngT As Long, lngW As Long, lngH As Long
Dim lngDeskTopWnd As Long 'デスクトップハンドル
Dim lngDescTooDC As Long 'デスクトップデバイスコンテキストハンドル
With Me
'フォームの座標を得る
Call GetWindowRect(.hwnd, recWork)
'左位置、上位置。幅、高さを得る
With recWork
lngL = .Left: lngT = .Top: lngW = .Right - lngL: lngH = .Bottom - lngT
End With
'ピクチャボックスのサイズ設定(左位置=0:上位置=0幅=lngW:高さ=lngH)
Call MoveWindow(.Picture1.hwnd, 0, 0, lngW, lngH, 1)
'デスクトップハンドルを得る
lngDeskTopWnd = GetDesktopWindow
'デスクトップのデバイスコンテキストハンドルを得る
lngDescTooDC = GetDC(lngDeskTopWnd)
'デスクトップ上のlngL:lngT:lngW:lngHの範囲を、ピクチャボックスに描画
'lngL:lngT:lngW:lngHにはフォーム1が存在しているので、実質フォーム1を描画することになる
Call StretchBlt(.Picture1.hdc, 0, 0, lngW, lngH, lngDescTooDC, lngL, lngT, lngW, lngH, vbSrcCopy)
'デバイスコンテキストをリリースする
Call ReleaseDC(lngDeskTopWnd, lngDescTooDC)
'画像を保存
Call SavePicture(.Picture1.Image, "c:\test.bmp")
End With
End Sub
Private Sub Form_Load()
With Me
With .Picture1
.Appearance = 1 'フラット
.BorderStyle = 0 '枠線なし
.AutoRedraw = True '自動再描画
.Visible = False
End With
End With
End Sub
-----Form1ここまで-----
-----MDIForm1ここから-----
Option Explicit
Private Sub MDIForm_Load()
Form1.Show
End Sub
-----MDIForm1ここまで-----
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=185224
この回答へのお礼
お礼日時:2002/01/22 19:19
ちょっとお礼が遅くなりましたが、ありがとうございます。
APIを扱うのは初めてなので、自分の思い通りに扱えるようにするには
時間がかかりそうですが、今月中になんとか出来ればいいので、
専門書を読んで、一つづつ命令の意味を理解しながらやっていきたいと思います。
No.2
- 回答日時:
センドキーでプリントスクリーンは効かないんで困るんですよねぇ。
仕様でしょうか。印刷は Me.PrintForm で何とかなるにしてもファイル保存はたいへんですね。
もし、他社ツールOKであるならば明熊さん(下記URL)のtransG32なんかを利用してみてはどうでしょう?直接ウィンドウハンドル送ってやればうまくいくと思いますよ。
他にはAPIをたたいてあげるしかないとおもいます。
参考URL:http://www.akikuma.cx/Download.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- PDF 画像調整してスクショし保存した画像を印刷する方法 1 2022/03/31 18:42
- Visual Basic(VBA) VB DataGridViewについて 3 2022/06/08 17:20
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Excel(エクセル) エクセルで重複データを行ごとに抽出したい 4 2022/12/05 08:18
- PDF 画像調整してスクショし保存した画像をPC画面と同画質で印刷する方法 1 2022/03/31 19:09
- その他(IT・Webサービス) 画像調整してスクショし保存した画像をPC画面と同画質で印刷する方法 3 2022/03/31 19:11
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メッセージボックスの背景色
-
Googleフォーム・複数人の申し...
-
PDFフォーム内で日付計算したい...
-
VBAにてメッセージボックスを最...
-
VB.NET 親フォームから子フォー...
-
サブフォームの行ごとにコンボ...
-
JR東日本に電話したいのですが...
-
サブフォームの新規レコードに...
-
Accessでフォームから別フォー...
-
フォーム上の全てのコントロー...
-
AccessVBAでサブフォームの値チ...
-
フォームを1つだけ閉じる方法は?
-
PDFフォームに本日の日付を自動...
-
VB.net(VB)で、フォームにExcel...
-
子フォームから親フォームのオ...
-
Access フォーム自動終了
-
アクセスのVBAなんですけど
-
VB.NET メッセージボックスが隠...
-
ユーザーフォーム上にアイコン...
-
メインフォームからサブフォー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAにてメッセージボックスを最...
-
VB.net(VB)で、フォームにExcel...
-
リストボックスの選択解除
-
Googleフォーム・複数人の申し...
-
サブフォームの新規レコードに...
-
Accessでフォームから別フォー...
-
accessで2つ以上のフォームを起...
-
サブフォームの行ごとにコンボ...
-
フォーム上の全てのコントロー...
-
アクセスVBA フォームのス...
-
VBA リストボックスをダブルク...
-
サブフォームのイベント取得
-
メッセージボックスの背景色
-
PDFフォームに本日の日付を自動...
-
VBAでフォームのスクロールバー...
-
Access 無操作の場合、自動で閉...
-
アクセス フォームが存在する...
-
VBプログラムの終了
-
メインフォームからサブフォー...
-
ユーザーフォーム上にアイコン...
おすすめ情報