su
プロフィール

たか号(gatsutaka)

Author:たか号(gatsutaka)
コンタクトは下のアドレスもしくはコメントでどうぞ。
過去の古い日記へのコメントも大歓迎です。
garei#mars.dti.ne.jp
#を@にして下さい

ボーカロイドを扱った自作小説の一覧は→こちら
です。


そして、とうとう、とうとう、
ツイッター始めました。
↓↓↓↓↓↓↓↓↓↓
ネフレンを愛でる会

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

遅れてきた突っ込み
書きたいことは山ほどあるけど、暇がない。 だから、多分、どれも旬を過ぎた話題ばかりに なりそうなブログ。ここでのハンドルはたか号ですが、小説などはgatsutaka名で書いています。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ものすごく用途が限定されたtips(dwviewerの/ptオプション)

こんな細かいというか、用途が限定されたtipsなんか必要な人はあまりいないでしょうが、少なくとも私の隣の席にはいたので、他にも誰かいるのではないかと書き置くものです。

富士ゼロックスが販売しているDocuworksというソフトがあります。
PDFに似た独自のフォーマット(拡張子xdw)で文書、図面などを管理するものです。
個人利用というより、業務で使用するのが普通でしょう。

管理用のDocuworks本体(dwdesk)と、その本体でxdw化したファイルを閲覧・印刷するためのビューワ(dwviewer)がメインのプログラムです。

このビューワは起動時オプションを指定すればコマンドライン上でファイルを印刷することができます。
つまり人によるマウス操作を経ないで、EXCEL VBAなどのプログラムからxdwファイルを自動印刷することができるのです。

印刷指示のオプションは「/p」もしくは「/pt」です。
/pはwindowsの「通常使うプリンタ」で印刷します。
/ptはそれ以外のプリンタで印刷します。

私の職場には9台のプリンタがあります。
3台はモノクロレーザー、1台はカラーレーザー
3台はA0カラープロッター、2台はA1モノクロプロッターです。
これだけあると同じ職場の各人(約100人)が勝手にジョブを流した場合、特に印刷トラブルが発生したときの管理が面倒です。
間違えて何百ページにも及ぶジョブをかけられた場合、それがどの端末からのジョブなのか判らないことには止めることもできません。(プリンター側でできないことはありませんが、操作が面倒だし、問題ジョブの解除後に次のジョブが正常に始まらないこともあります)
なので、プリントサーバーを使ってジョブのコントロールをしています。
これだと、トラブル発生時にはそのサーバを操作するだけで解決できます。

さらに、印刷コスト(印刷枚数)を減らすためにFinePrintというソフトが導入されています。
これは色々な機能がありますが、基本的には複数枚の印刷を一枚にまとめるためのソフトです。
便利と言えば便利ですが、EXCELやWORDからの印刷指令が一旦FinePrintに渡されるので、操作の手間が一つ増えます。
しかもログを集約する機能があって、誰が何枚削減したかなんて統計が取られているのです。
なので、Windowsでの「通常使うプリンタ」はこのFinePrintにすることが義務付けられています。
FinePrintから実際のどのプリンタにジョブを流すのかは、各端末毎に設定します。

こういった環境では、プログラムからの自動印刷をするには「通常使うプリンタ」は使えません。
FinePrintは必ずマウスもしくはキー操作を伴うので自動化にならないし、どのプリンタに出力されるかプログラム側から判らないからです。(できるのかもしれませんがそのやり方が判りません)

話をdwviewerに戻します。

/ptオプションでのプリンタ指定は次の形式にしろとdwviewer.exeのhelpに記載されています。

/pt プリンター名 ドライバー名 ポート名

ところが、このプリンタ名、ドライバ名、ポート名として何をどう指定すればいいのか判りません。HELPには具体的な方法が書いてありません。

コントロールパネルの「プリンタ」で表示される情報を元にして色々試してみましたが、印刷することができません。
net viewコマンドの情報でも駄目です。

/pオプションでは印刷できたので、プリンタ名等の指定だけの問題だろうと思われました。

この時点で、プログラムを作成していた人(つまりは私の隣の机の人)から私にヘルプ要請が入りました。

はて?
プリンタ名はプリントサーバで設定している共有名だろうか。
ドライバ名? そんなの普通は意識しないもんなあ。
ポートはプリンタの固定IPでいいんだろうか。

などなど色々試してみましたが駄目でした。

それからネットで情報を探しました。
たどり着いたのはこのページです。
http://www.wmifun.net/sample/vb6/win32_printer.html

ここに記載されているスクリプトをVBAに貼り付けて実行すれば、探していたプリンター名 ドライバー名 ポート名の情報がずらずらと表示されます。

その情報を/ptオプションに使ってdwviewerを起動すると、指定したプリンタに印刷することができます。

例を挙げるとこんな感じ。
"Program Files\Fuji Xerox\DocuWorks\bin\dwviewer.exe" c:\samp.xdw /pt "\\PrSrv\RICOH IPSiO SP 6220 RPCS_2" "RICOH IPSiO SP 6220 RPCS" "IP_192.168.1.11"
(ポート名はでっち上げの架空の番号です。SP 6220 は職場で使っている中で一番小さなプリンタです。念の為w)

尚、上記のサイトに記載されているスクリプトは、そのままでは動かないことがあります。
「ユーザー変数が定義されていません」というエラーの場合は、次のようにしてください。
1)VisualBasicEditorを起動する(Excel画面でAlt+F11)
2)「ツール」の「参照設定」
3)参照可能なライブラリファイルの中で「Microsoft WMI Scripting V1.2 Library」
にチェックを付ける

スクリプトを貼り付けて実行するまでの操作の説明は、必要があってここを読んでいる方には不要だと思うので省略します。

上記サイトにあるスクリプトは、情報をMsgBoxに表示するだけです。
プリンタ数が多すぎるときは全ては表示されません。

情報は変数「MesStr」に格納されていますので、これをファイルに書き出すかシートに書き出すかする機能をMsgBox関数の部分、もしくはその下に追加してください。

尚、上記サイトには、VBAではなく、WMIのスクリプトを記載したページへのリンクも含まれています。
これを使うと、EXCELは不要です。
WMIのスクリプトを適当なエディタに貼り付けて、名前を付けて(Ex. PriNamGet.wmi)保存し、そのファイルをダブルクリックして実行すれば情報を得ることができます。
この場合もそのままではMsgBoxが表示されるだけなので、全てを文字列として取得するには一工夫が必要です。

例えば、MsgBox関数の次に
「WScript.echo MesStr」
という一行を追加し、Windowsのコマンドプロンプトを開いて、
C:\>cscript.exe PriNamGet.wmi > c:\res.txt[Enter]
とすれば、res.txtファイルに文字として書き出すことができます。

いつか、どこかの、だれかの、お役に立てれば幸いです。
スポンサーサイト

この記事に対するコメント

この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://gatsutaka.blog26.fc2.com/tb.php/276-a4ace679
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。