- 締切済み
VB6.0でのプリンタ設定について
はじめまして。 現在VB6.0にて、プリンタダイアログを表示させずに、プリンタの変更~印刷を行うプログラムを作成しています。(とある印刷は別のプリンタで印刷のイメージです) 方法はWIN32APIとWMIの2通りがあるようですがなかなか作成することができません。 WIN32API使用に関しては特に??で勉強中です。 イメージの流れでは以下を考えています。 (1)通常使用プリンタのバックアップ (2)通常使用プリンタの変更 (3)印刷 (4)通常使用プリンタを戻す すいませんがご教授いただけませんでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
WMIでは規定のプリンタ名が分かるだけで、設定できないのでは? APIのGetProfileString、WriteProfileStringを使う方法が昔から ある手法ですね。 Declare Function GetProfileStringA& Lib "KERNEL32" _ (ByVal A$, ByVal K$, ByVal D$, ByVal B$, ByVal L&) Declare Function WriteProfileStringA& Lib "KERNEL32" _ (ByVal S$, ByVal K$, ByVal D$) 'おまけのAPI Declare Function lstrlenA& Lib "KERNEL32" (ByVal A$) Declare Function SysAllocStringByteLen$ Lib "OLEAUT32" _ (ByVal X$, ByVal L&) (1)現在の規定のプリンタの取得 Dim P$ P = Space(256) GetProfileStringA "windows", "device", "", P, 256 P = SysAllocStringByteLen(P, lstrlenA(P)) (2)プリンタ名の情報を得る Dim P$ P = Space(256) GetProfileStringA "devices", プリンタ名, "", P, 256 P = SysAllocStringByteLen(P, lstrlenA(P)) ★プリンタ名の所はそちらの環境に従って、変えてください。 (3)規定のプリンタの変更 WriteProfileString "windows", "device", 設定データ ★設定データはプリンタ名 + "," + プリンタ情報です。 戻す時は(1)の情報を指定すればよい。
お礼
ご回答ありがとうございます。 自分は.NET開発ばかりしていたので書き方から間違っていたようです。。 参考にさせていただきました通り、以下の方法にて作成できました。 (1)WINAPIより端末の通常使用するプリンタ情報(プリンタ名・ドライバ名・ポート名)を取得し、バックアップ GetProfileString (2)INIファイル等で設定しておいた指定変更プリンタ名から、端末WIN情報のドライバ名・ポート名の取得 (3)上記(2)の情報で書き換え WriteProfileString SendMessage (4)印刷 (5)上記(1)の内容で書き換え WriteProfileString SendMessage 今回疑問に感じたのはポート番号ではなくポート名を使用していることです。 それと(3)(5)書き換え後のsendmessageも端末内で更新情報を通知しているようですが、何をしているのかよくわかりません。 こちらも何か参考情報がありましたら教えてください。 ちなみに、WMIは.NETにて可能でした。APIだとプリンタ情報がプリンタ名・ドライバ名・ポート名の3つに対し、WMIだとプリンタ名のみでいけました。