VB6でPrintersオブジェクト古いプリンタ情報を削除するには?


Kohki  2012-11-09 19:09:45  No: 103385  IP: [192.*.*.*]

お世話になります。
VB6で作成した印刷処理で、プリンタ名が正常に取得出来ず困っております。
どなたか、ご存じの方がいらっしゃいましたら、ご教授頂ければと思います。


フォームにリストボックスを設置し、画面を開いた際に
PrintersObjectを使用して、Printers.Count分ループさせて
全てのDeviceNameを、リストボックスに追加しており
印刷に使用するプリンタを、リストボックスから選択する
仕組みにしております。

問題の現象としては、コントロールパネルから削除されている
プリンタ名も取得されてしまい、現在のコントロールパネル上の
プリンタ情報と一致出来ないものかと頭を悩ませております。

PrintersObjectの情報というのは、OS上のメモリやレジストリ(?)等に
残ってしまっている情報となるのでしょうか?
可能であればVB6のプログラム上で、PrintersObjectの情報を
現在インストールされているプリンタ情報のみに更新(というのでしょうか?)
する事が出来れば一番良いと思ってはいるのですが。。。
他の方法等も含めご存じの方がおられましたら、ご教授頂けると幸いです。

編集 削除
Koz  2012-11-09 22:46:56  No: 103386  IP: [192.*.*.*]

WinXP(SP3),VB6.0(SP6) の環境で、3パターンほど試しましたが、特に不具合は出ないですね。
OS や VB6 のサービスパックの状態は?

' Index で列挙
Private Sub Command1_Click()
    Dim i As Long
    With List1
        .Clear
        For i = 0 To Printers.Count - 1
            .AddItem Printers(i).DeviceName
        Next
    End With
End Sub

' For Each で列挙
Private Sub Command2_Click()
    Dim p As Printer
    With List1
        .Clear
        For Each p In Printers
            .AddItem p.DeviceName
        Next
    End With
End Sub

' WMI で列挙
Private Sub Command3_Click()
    Dim wmi, svc, ps, p
    Set wmi = CreateObject("WbemScripting.SWbemLocator")
    Set svc = wmi.ConnectServer
    Set ps = svc.ExecQuery("Select * From Win32_Printer")
    With List1
        .Clear
        For Each p In ps
            .AddItem p.Caption
        Next
    End With
End Sub

編集 削除
Kohki  2012-11-10 11:59:44  No: 103387  IP: [192.*.*.*]

Koz様
レスありがとうございます。
処理の組み方としては、記載頂いたサンプルの
INDEX列挙の手法で行っております。

利用の環境については、TSWeb環境を使用しており
アプリケーションを利用する際に、端末のプリンタを
リダイレクトしているのですが、以前接続時のリダイレクトプリンタが
「プリンタ名(リダイレクトされた XX)」と残ってしまっており
現状100個近く同名のプリンタが、Printersオブジェクトより
取得されてきてしまっている状態です。

ただ、私の方で類似の検証環境を構築して確認を行っておりますが
WANを挟んでいないからなのか、再現が出来ておらず環境に依存した
現象では無いかと調査を行っております。

参考までに現象の発生している環境構成は以下の通りです。
開発環境:WinXP  VB6.0 sp6
利用環境:Win2008Server(TSWeb構成)+端末はWinXP

環境的な要因となると、VB6の問題では無いやもしれませんが
原因の解明が出来ましたら、また報告させて頂きます。

編集 削除
オショウ  2012-11-15 08:27:07  No: 103388  IP: [192.*.*.*]

TSWeb・・・ターミナルサービスですネ?

であれば、お使いのプリンターメーカーのドライバーに
不具合があるため、そのような挙動になってしまってい
るものと推測します。

NECやキャノンや・・・いろいろ大トラブルがあり、
私も遭遇したことあります。

サービスパックや最新のドライバーやら、いろいろご確
認下さい。多分、メーカーが対応しない限り無理だと思
います。

※  プリンターのメーカーや型式は?
    あと、ただ単にTSWebだけですか?
    CITRIXのとか使ってません?

以上。参考まで

編集 削除
オショウ  2012-11-15 08:35:40  No: 103389  IP: [192.*.*.*]

こんな記事もありました

http://d.hatena.ne.jp/Tensor/20090829/1251648856

参考までに

以上。

編集 削除
1564-1616  2012-11-15 16:54:40  No: 103390  IP: [192.*.*.*]

とりあえず、
ttp://support.microsoft.com/kb/2620656/ja
とかはどうでしょう。

編集 削除