PRTGRAPH
2008年05月06日
PRTGRAPHにイベントログと状況依存ヘルプを追加
PRTGRAPHにイベントログの追加、状況依存ヘルプの追加
コードの一部修正を行って更新しました。ver1.1.4.9
イベントログではイベントビューアのアプリケーションログに印刷エラーや画像変換のエラーを記録します。
イベントログの登録には
RegiserEventSource()によりイベントログのハンドルを取得して
ReportEvent()によりエラー番号を登録します。
DeregisterEventSourceによりハンドルを閉じます。
またイベントログにメッセージを表示させるためには
イベントログに対応したメッセージをDLL等にリンクしてレジストリに登録する必要があります。
メッセージはprtgraph.mcファイルに以下のような形式で作成します。
MessageId=2
Severity=Error
Facility=Error
SymbolicName=MSG_OUTPUT_WRITE_ERROR
Language=Japanese
出力画像ファイルの作成に失敗しました。%n
出力先の空き容量の確認をしてください。
メッセージファイルは
mc prtgraph.mcとして変換しリソースファイルprtgraph.rcとprtgraphmsg.bin等に変換します
レジストリはWindowsInstallerで登録しますが、HKLM/System/CurrentControlSet/Services/EventLog/Application/PRTGRAPH/EventMessageFileにDLLファイルのパスを登録します。
以上でイベントビューアに登録されたエラーのメッセージ表示が可能になります。
コードの一部修正を行って更新しました。ver1.1.4.9
イベントログではイベントビューアのアプリケーションログに印刷エラーや画像変換のエラーを記録します。
イベントログの登録には
RegiserEventSource()によりイベントログのハンドルを取得して
ReportEvent()によりエラー番号を登録します。
DeregisterEventSourceによりハンドルを閉じます。
またイベントログにメッセージを表示させるためには
イベントログに対応したメッセージをDLL等にリンクしてレジストリに登録する必要があります。
メッセージはprtgraph.mcファイルに以下のような形式で作成します。
MessageId=2
Severity=Error
Facility=Error
SymbolicName=MSG_OUTPUT_WRITE_ERROR
Language=Japanese
出力画像ファイルの作成に失敗しました。%n
出力先の空き容量の確認をしてください。
メッセージファイルは
mc prtgraph.mcとして変換しリソースファイルprtgraph.rcとprtgraphmsg.bin等に変換します
レジストリはWindowsInstallerで登録しますが、HKLM/System/CurrentControlSet/Services/EventLog/Application/PRTGRAPH/EventMessageFileにDLLファイルのパスを登録します。
以上でイベントビューアに登録されたエラーのメッセージ表示が可能になります。
2008年03月23日
2008年02月24日
PRTGRAPHにカスタムサイズの用紙を追加する方法
PRTGRAPHは仮想プリンタですので、出力画像の用紙サイズを自由に指定する事ができます。
version1.1.4.6にコマンドラインからカスタムサイズの用紙を追加する為のプログラムaddform.exeを追加しました。
またプログラムから指定する場合はプリンタ用のAPIを使うことで同様に設定出来ます。
Windows2000,xp,vistaではカスタムサイズの用紙としてプリンタにFormを追加して使用します。
最初にPRTGRAPHプリンタをOpenPrinter()により開きます。
Formには追加する用紙名と用紙サイズを設定し、
AddForm()で追加します。
最後にClosePrinter()で閉じるとPRTGRAPHプリンタに指定の用紙が追加されます。
addform.exeでは用紙名PRTGRAPH_UserPaperを追加していますが、
AddForm()を使用すると幾つでも追加できます。
Formで指定する用紙のサイズは1/1000mm単位になりますので、出力されるピクセル数は
size/1000/25.4*dpiになります。
画像は96dpiで200mm X 200mmのカスタム用紙に透かしを設定して出力したものです。
version1.1.4.6にコマンドラインからカスタムサイズの用紙を追加する為のプログラムaddform.exeを追加しました。
またプログラムから指定する場合はプリンタ用のAPIを使うことで同様に設定出来ます。
Windows2000,xp,vistaではカスタムサイズの用紙としてプリンタにFormを追加して使用します。
最初にPRTGRAPHプリンタをOpenPrinter()により開きます。
Formには追加する用紙名と用紙サイズを設定し、
AddForm()で追加します。
最後にClosePrinter()で閉じるとPRTGRAPHプリンタに指定の用紙が追加されます。
addform.exeでは用紙名PRTGRAPH_UserPaperを追加していますが、
AddForm()を使用すると幾つでも追加できます。
Formで指定する用紙のサイズは1/1000mm単位になりますので、出力されるピクセル数は
size/1000/25.4*dpiになります。
画像は96dpiで200mm X 200mmのカスタム用紙に透かしを設定して出力したものです。
2008年02月17日
プログラムからPRTGRAPHの設定を行う方法
PRTGRAPHの設定はプロパティを開きデバイス設定タブから行いますが、
バッチやコマンドプロンプトから変更したい場合は1.1.4.5に同梱しsetprtgraph.exeを利用できます。
プログラムから設定する場合はOpenPrinter()でPRTGRAPHプリンタのハンドルを開き、SetPrinterData()を使ってプリンタのレジストリPrinterDariverDataのキーを設定する事ができます。
このAPIを使うには #include <winspool.h>を宣言します。
OpenPrinter()の第1引数には TEXT("PRTGRAPH virtual printer")を
第2引数には受け取るハンドル HANDLE hPrinterを
第3引数にはアクセス属性を設定するため PRINTER_DEFAULTS Defaultを設定します。
バッチやコマンドプロンプトから変更したい場合は1.1.4.5に同梱しsetprtgraph.exeを利用できます。
プログラムから設定する場合はOpenPrinter()でPRTGRAPHプリンタのハンドルを開き、SetPrinterData()を使ってプリンタのレジストリPrinterDariverDataのキーを設定する事ができます。
このAPIを使うには #include <winspool.h>を宣言します。
OpenPrinter()の第1引数には TEXT("PRTGRAPH virtual printer")を
第2引数には受け取るハンドル HANDLE hPrinterを
第3引数にはアクセス属性を設定するため PRINTER_DEFAULTS Defaultを設定します。
TCHAR pPrinterName[]=TEXT("PRTGRAPH virtual printer");
HANDLE hPrinter;
PRINTER_DEFAULTS Default = {NULL, NULL, PRINTER_ALL_ACCESS};
BOOL bres = OpenPrinter(pPrinterName, &hPrinter, &Default);
if(FALSE == bres){
printf("Can't open printer %ws\n", pPrinterName);
return bres;
}
//パラメータはSetPrinterData()またはSetPrinterDataEx()APIで指定します。
wres = SetPrinterDataEx(hPrinter,strprimkey[keytbl[idx].primkey], keytbl[idx].regkey, keytbl[idx].type, (LPBYTE)argv[2], (DWORD)wcslen(argv[2])*sizeof(TCHAR));
//最後はハンドルを閉じます。
ClosePrinter(hPrinter);
2008年02月03日
PRTGRAPHのファイル名に印刷ジョブIDを追加しました。
http://www.ksky.ne.jp/~yamama/prtgraph/prtgraph1144.lzh
Excelの複数シートをまとめて印刷した時に、ドキュメント名は同じですが、シートに別のジョブIDが割り当てられる事があり、ファイル名が重複しますので、ファイル名にジョブIDを追加出来るオプションを追加しました。
ドキュメント名が空欄のシートもドキュメント名を引きつぐように動作を変更しました。
アプリケーションによって印刷のドキュメントとページ指定が統一されてないようなので、ファイル名のオプションの組み合わせる必要がありそうです。
Excelの複数シートをまとめて印刷した時に、ドキュメント名は同じですが、シートに別のジョブIDが割り当てられる事があり、ファイル名が重複しますので、ファイル名にジョブIDを追加出来るオプションを追加しました。
ドキュメント名が空欄のシートもドキュメント名を引きつぐように動作を変更しました。
アプリケーションによって印刷のドキュメントとページ指定が統一されてないようなので、ファイル名のオプションの組み合わせる必要がありそうです。