• ベストアンサー

プログラムを実行して不具合の出たプリンタを直したい

よろしくお願いします。 『印刷をするプログラム』を書いて実行した結果、 PCからのスキャン、プリンタ本体での、スキャン、コピーが出来なくなりました。 チェックディスク、システムの復元、ドライバーの入れ替え、などをしたのですが直りません。 多分、自作プログラムの実行により『プリンタ』か、『PC』のプログラムに、なんらかの異常が出たと思うのですが、プログラムを直せば良いのか、リカバリするのか、修復する方法が見つかりません。 詳しい方、アドバイスをよろしくお願いします。 自作のメモ帳にコーディングしたソースです。 //印刷関数 int MyPrint(HWND hWnd) { int i; PRINTDLG pd; DOCINFO di; TEXTMETRIC tm; char *lpszBuf = TEXT("ここが印刷される"); memset(&pd, 0, sizeof(PRINTDLG)); //PRINTDLG構造体の定義 pd.lStructSize = sizeof(PRINTDLG); pd.hwndOwner = hWnd; pd.hDevMode = NULL; pd.hDevNames = NULL; pd.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC | PD_NOPAGENUMS | PD_NOSELECTION | PD_HIDEPRINTTOFILE; pd.nMinPage = 1; pd.nMaxPage = 1; pd.nFromPage = 1; pd.nToPage = 1; pd.nCopies = 1; if(PrintDlg(&pd) == 0) return -1; memset(&di, 0, sizeof(DOCINFO)); //DOCINFO構造体の定義 di.cbSize = sizeof(DOCINFO); di.lpszDocName = TEXT("テスト"); StartDoc(pd.hDC, &di); //印刷ジョブ StartPage(pd.hDC); GetTextMetrics(pd.hDC, &tm); for(i = 0; i < 5; i++){ //< 50印刷部数 SetTextColor(pd.hDC, RGB(0, 0, 0)); TextOut(pd.hDC, 5, 5 + (tm.tmHeight * i + 20), lpszBuf, (int)strlen(lpszBuf)); /*for(i = 0; i < 5; i++){ SetTextColor(pd.hDC, RGB(255, 0, 0)); TextOut(pd.hDC, 5, 5 + (tm.tmHeight * i + 20), lpszBuf, (int)strlen(lpszBuf));*/ } EndPage(pd.hDC); EndDoc(pd.hDC); DeleteDC(pd.hDC); return 0; }

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

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.2

>詳しい方、アドバイスをよろしくお願いします。 と制限があるのに、あえて・・。 >チェックディスク、システムの復元、ドライバーの入れ替え、などをしたのですが直りません。 重傷ですね。「ドライバーの入れ替え」ではなく、 ★プリンタを「削除」し、「プリンタの追加」をしてみたら如何でしょう。  これでもダメでしたら、OSの「リカバリ」ですね。  ・確認:プリンタの電源は、入れっぱなしではないですよね。  (最悪、プリンタ内のチップ損傷?) ------------ アドバイスはここまで --------------------- (年寄りの浅知恵) プリンタ出力プログラムを作成(デバッグ・出力位置等調整)する際は完成まで、 ★フリーソフトの「pdfプリンタ」を「通常使うプリンタ」にしておく。  (参考URLに、PrimoPDF ) と、拡大表示で細部確認ができたり、用紙・インクの節約になります。 ☆ところで、  for(i = 0; i < 5; i++){ //< 50印刷部数  ・  ・  }  この for 文の中で、「改ページ」に相当する命令は・・?。 ☆独学なので、使い方が正しいかどうか不明ですが・・、 ( C++Builder5、pPrinter = Printer(); )  ページ毎に、   pPrinter->BeginDoc(); // 印刷を開始する宣言     (各印刷命令)   pPrinter->EndDoc();  // 印刷を終了する宣言  の2宣言をしてました。

参考URL:
http://www.xlsoft.com/jp/products/activepdf/
noname#220054
質問者

お礼

御礼が遅くなってすみません。 いろいろと試してみたのですが、直りませんでした。 リカバリもだめでした、これから修理に出そうと思っています。 ありがとうございました。

noname#220054
質問者

補足

アドバイス有難うございます。 早速、プリンターの削除と追加をしてみます。 プリンターの電源については、いつも切った状態で、使う時だけ電源を入れるようにしています。 >for 文の中で、「改ページ」に相当する命令は・・?。 『猫でもわかる…第2版』を参考にしているのですが、『改ページ』についての命令文は解説してありませんでした。 ただ『複数のページにわたって印刷するには』 1、StartPage()を実行 2、印刷したいことをプリンタのデバイスコンテキストに出力 3、EndPage()を実行 と解説してあります。 質問の時のソースは、実行結果が、『ここが印刷される』と、縦に10行、表示されるだけです。 >for(i = 0; i < 5; i++){ //< 50印刷部数 は、『5行にわたって印刷される』の意味で、5ページに渡っての意味ではありませんでした。 私の解釈ミスでした。(すみません。) それから、フリーのソフトを教えていただき、有難うございます。 早速使ってみます。 結果報告は、お礼のほうにしたいと思っています。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

別段おかしな事をされているように思えません ・・・ プリンターを別のパソコンに接続して試験する事は可能なのでしょうか 別のパソコンで正常に動作するのであればドライバー関連のような気がします プリンターメーカのホームページなどのFAQやサポートには連絡してみたのでしょうか プリンターの付属ソフトに 診断プログラムなどは無いのでしょうか?

noname#220054
質問者

お礼

アドバイス有難うございます。 プログラムに自信が無かったので心配していたのですが、安心しました。 これから、プリンター関係を調べてみます。