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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.net 任意の例外を発生させ...
-
タスクスケジューラで指定フォ...
-
【VBA】写真の縦横比を変えずに...
-
常に「すべての列のサイズを自...
-
検索したファイルの場所を調べ...
-
imgからブートCDの作成方法
-
新規作成でなぜフォルダだけ?
-
Not kind:Folders
-
共有フォルダの設定
-
ショートカットファイルそのも...
-
Win 10エクスプローラーについ...
-
拡張子.EXTの解凍方法
-
EXCELファイルを開くと・・・
-
Windowsコマンドでファイル削除...
-
レジストリの格納場所
-
「システムの復元」によるファ...
-
TextBoxの最下行を表示しておき...
-
貼り付けとショートカットの貼...
-
batファイルからPCをシャットダ...
-
”彦”の異体字
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.net 任意の例外を発生させ...
-
【C#, xaml】TypeInitializatio...
-
【VB 6.0】参照設定でエラーが...
-
strtoint関数について
-
知恵袋で「予期せぬエラーが発...
-
TreeGridView(オープンソース)...
-
VB.net 画面のハ-ドコピーでエ...
-
Not kind:Folders
-
常に「すべての列のサイズを自...
-
【VBA】写真の縦横比を変えずに...
-
検索したファイルの場所を調べ...
-
System32内のファイルを書き換...
-
シャットダウン時に自動ファイ...
-
ファイル並び順がバラバラで困...
-
貼り付けとショートカットの貼...
-
タスクスケジューラで指定フォ...
-
google Drive 容量を減らせない...
-
Cドライブにconfig msiというフ...
-
ショートカットファイルそのも...
-
レジストリの変更が保存されない
おすすめ情報