VB.netで開発しています
実行中の画面で自分のハードコピーを印刷ボタン押下で実行するPGを作りました。
開発環境でも,インストール先でもこの半年ぐらい問題なく動いていましたが,先ごろ新規ユーザーからエラーになるとクレームがでて困っています。原因と対策を教えてください
<<<エラー内容>>>
Just-In-Time (JIT) デバッグを呼び出すための詳細については、
ダイアログ ボックスではなく、このメッセージの最後を参照してください。
************** 例外テキスト **************
System.Runtime.InteropServices.ExternalException: 要求されたクリップボード操作に成功しませんでした。
場所 System.Windows.Forms.Clipboard.ThrowIfFailed(Int32 hr)
場所 System.Windows.Forms.Clipboard.GetDataObject(Int32 retryTimes, Int32 retryDelay)
場所 System.Windows.Forms.Clipboard.GetDataObject()
場所 クラス.BtnPrintDisp_Click(Object sender, EventArgs e)
場所 System.Windows.Forms.Control.OnClick(EventArgs e)
場所 System.Windows.Forms.Button.OnClick(EventArgs e)
場所 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
場所 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.ButtonBase.WndProc(Message& m)
場所 System.Windows.Forms.Button.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** 読み込まれたアセンブリ **************
<<<関連ソース部分>>>
#Region "印刷ボタン"
Private Sub BtnPrintDisp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPrintDisp.Click
'印刷しますか?のMsgBox
If MessageBox.Show(Com.GetIniString(ComIniNm, "QUESTIONMSG31", "MESSAGE"), Me.Text, _
MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = Windows.Forms.DialogResult.OK Then
' [Alt]キー+[Print Screen]キーの送信
SendKeys.SendWait("%{PRTSC}")
' クリップボードに格納された画像の取得
Dim data As IDataObject = Clipboard.GetDataObject()
If data.GetDataPresent(DataFormats.Bitmap) = True Then
Dim bmp As Bitmap = CType(data.GetData(DataFormats.Bitmap), Bitmap)
' 取得した画像の印刷
gBmp = bmp
PrintDoc = New System.Drawing.Printing.PrintDocument
PrintDoc.Print()
End If
End If
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDoc.PrintPage
' 印刷ページの描画を行う
gBmp.RotateFlip(RotateFlipType.Rotate270FlipNone)
e.Graphics.DrawImage(gBmp, New System.Drawing.Rectangle(50, 100, 480 * 1.5, 640 * 1.5))
End Sub
#End Region
よろしくお願いします
No.1ベストアンサー
- 回答日時:
VB.NETと書かれていることから、.NET FrameWorkは1.0もしくは1.1でしょうか?
1.0ではSendeyでのPrintscreenは予約と書かれていたと思いますし、
実際には動くこともありましたが、Sendkeyでの画面印刷は不安定な
ため、別の方法で実施したことがあります。
以下のサイトのAPIを使用する方法に近い・・
http://dobon.net/vb/dotnet/graphics/screencaptur …
上記のエラーとコードを見た限り、Sendkeyの直後にクリップボードを
見に行っていますが、間に合っていない可能性はないでしょうか?
#ちょっと待ってみるとか・・
あと、こちらも参考にしてみてください。
http://dobon.net/vb/dotnet/vb6/sendkeys.html
#Vistaかどうかは判りませんが・・
この回答への補足
ありがとうございます
FrameWorkは2.0 OSは XP です
「Sendkeyでの画面印刷は不安定」ということですが、どういうときにエラーになるのか教えて頂けると助かるんですが・・
「#ちょっと待ってみるとか・・」の意見を取り入れて 0.1秒Sleepさせて、さらにDoEventも入れてみて試して見ます
不具合再現実機(これでは必ずエラーになります→PCの設定が違うんではないかと疑ってこの質問をしたのですが・・)が手元にないため、すぐには結果が出ないです。
それでだめなら、指摘HPに乗っている 別のAPIを試して見ます
No.2
- 回答日時:
>「Sendkeyでの画面印刷は不安定」ということですが、どういうときにエラーになるのか教えて頂けると助かるんですが・・
画面印刷だけではないですが、SendkeyはアクティブなWindowに対して
実行されるので、画面遷移やPopUp、ユーザの操作などいろんな原因で
ミスすることがあります。
#まともな業務システムには使用しないのが懸命かと・・(Vb以外でも)
私がPrintScreenを.NETで実装する際、最初はSendKeyを使ってテスト
してみました。
#FrameWork1.0では正常に動かなかったですが・・
その他、Printscreen後にClipBoadを読む際に失敗すること
何度も経験しました。
#エラー処理とリトライで逃げましたが
また、他のアプリを同時に動かす場合は、PrintScreenのデータと
他の画像のCopyなども区別する必要があります。
(BITMAPの判定だけではNGの場合もあり)
ありがとうございました
Sendwait後にsleep1秒入れたり、DoEvents入れたりしましたが、結果が同じだった(必ず同じエラーになる)
結局、指摘HPの別APIですることになりました
まだ、客先で試行できないので結果が特定できないですが、この質問は〆ます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- Visual Basic(VBA) EXCELのセル相互同期用のVBAでの不具合 3 2022/08/10 11:44
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# WINDOWS フォルダー右クリッ...
-
ファイル並び順がバラバラで困...
-
ウイルススキャンでファイルが...
-
【VBA】写真の縦横比を変えずに...
-
アドオンの管理で削除ができない
-
Font Bookを初期化したい
-
常に「すべての列のサイズを自...
-
zip形式の動画をDVD-RWに保存し...
-
Ububtuでファイル共有できない...
-
Windows7でiniファイルが作成さ...
-
aviファイルが削除できない。。
-
タスクスケジューラで指定フォ...
-
Not kind:Folders
-
Wordを開こうとすると『環境変...
-
WindowsXPのインストールでプロ...
-
貼り付けとショートカットの貼...
-
アイコンの自動整列をやめたい!
-
msdia80.dllとはなんなのでしょ...
-
「ディスプレイブート」とは?
-
MP3→CDA形式の変換方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.net 任意の例外を発生させ...
-
strtoint関数について
-
【C#, xaml】TypeInitializatio...
-
【VB 6.0】参照設定でエラーが...
-
C# WINDOWS フォルダー右クリッ...
-
VB.net 画面のハ-ドコピーでエ...
-
Excel VBAですが、表示している...
-
【VBA】写真の縦横比を変えずに...
-
Ububtuでファイル共有できない...
-
常に「すべての列のサイズを自...
-
タスクスケジューラで指定フォ...
-
System32内のファイルを書き換...
-
Not kind:Folders
-
ファイル並び順がバラバラで困...
-
シャットダウン時に自動ファイ...
-
検索したファイルの場所を調べ...
-
ワードの作成日時と更新日時
-
レジストリの変更が保存されない
-
Wordを開こうとすると『環境変...
-
google Drive 容量を減らせない...
おすすめ情報