- ベストアンサー
ネットワーク上のプリンタ名を取得
VB6で開発しています。 ネットワークプリンタの名称を取得する良い方法があれば教えて頂けますか。 CommonDialogやSHBrowsForFolderを使用すればネットワークプリンタの「共有名」は取得できるのですが、取得したいのはそれではなくて「サーバー上から見た場合のプリンタ名そのもの」なのです。 例えばあるサーバー上に共有プリンタAが存在するとします。 このプリンタは プリンタ名 :プリンタA 共有名 :printer という風になっています。 同ネットワーク内に存在するクライアント1からこのプリンターを参照しようとした場合、エクスプローラーや、あるいは上記のSHBrowsForFolderを使用した簡単なアプリケーションでは「\\サーバー名\printer」という値が返ってきます。 でも「プリンタの追加ウィザード」でネットワークプリンタをインストールしようとするとちゃんと「プリンタA」と表示されます。 この「プリンタA」という情報が欲しいのです。 何かよい方法がありましたら教えて下さい。 宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
NetShareGetInfoかな
その他の回答 (3)
- TAGOSAKU7
- ベストアンサー率65% (276/422)
失礼いたしました。履歴をみてなかったので、返事が遅れました。 環境がないので、どの構造体を使うかがはっきり報告できません。。。 NetShareEnum関数についても必要かどうかも名言できません。 しかしプリンタ名を知るには、OS別の処理を走らせるしかないように思います。 私ごとですが、以前にある人数以上のアクセスを受け付けないソフトの依頼をされたことがありました。 することはセッションの切断なのですが、これもまたNT系/95系で構造体&レベルが違いました。 セッションやネット系の関数はOSによって使用する構造体が違うようですね。 私にはこれ以上のアドバイスは難しいです。。。 環境さえあったら、、、正確なことが、、、言えるのですが、、、、
お礼
いえいえ、大変参考になりました。 どうもありがとうございました。
- TAGOSAKU7
- ベストアンサー率65% (276/422)
あそこにあったサンプルはNT系なのですが、もしかしてお使いのOSは95系では? 環境がないので正確には言えませんが、レベル1でエラーが返らないのであれば、SHARE_INFO_1構造体を使用する必要があります。 それで情報が足りないのであれば、レベル50でSHARE_INFO_50構造体(95系専用)の構造体を試したらいいかもしれません。
補足
ありがとうございます。 説明不足でしたね、申し訳ありません。 開発を行っているマシンは OS :NT4.0 VB :6.0 です。 但し、このPG(というか機能)を使うのは98、NT、2000、XPなんですよ。 あれからまた調べた所、9X系で同様の事をするには「NetShareEnum95」とかを使う必要があるみたいですね。 SHARE_INFO_50構造体を使う時はこちらの関数ですよね? OS毎に異なる処理をさせるのはあまり気が進まないので、この方法は諦めようかな~等と思案している所です。 何か良いアドバイスがありましたら宜しくお願いします<(_ _)>
- taisuke555
- ベストアンサー率55% (132/236)
間違っていたらすみません。 「通常使うプリンタ」に設定されている時に Printer.DeviceName で登録されている名前が取得できませんか? Private Sub Command1_Click() 'MsgBox Printer.DeviceName For Each pr In Printers MsgBox pr.DeviceName Next pr End Sub で登録されているプリンタの名前が取得できると思います。
お礼
ご回答ありがとうございます。 taisuke555さんゴメンナサイ! 私が今回使用したい機能は 「ネットワーク上に存在する(あるマシン上でネットワークインストールが可能な)プリンタの一覧を取得する」 ことなのです。 つまりこのPGが動作するマシン上にはプリンタがインストールされていない状態もありうるわけで。 まあ要するに前述したように、プリンタの追加ウィザードに出てくるような使用可能プリンタ一覧の情報、が取ってきたかったわけです。
お礼
ご回答ありがとうございます。 参考URLからNetShareGetInfoを使用したサンプルPGを取ってきて試したところ、ひとまずプリンタ名の取得はできました。 どうもありがとうございました。 ただ引数「Level」の意味がいまいち不明です・・・。 サンプルでは「2」となっていますが、この状態でネットワーク上のサーバー名と共有名を渡すと値の取得に失敗します(関数の戻り値:2310)。自マシン上のプリンタ名のみ指定した場合は正常に動作します。 引数「1」を指定してあげればネットワーク上、ローカル共にプリンタ名の取得は可能だったのですが、プリンタキュー名が文字化けしたりします。 今NetShareGetInfoの引数の説明があるサイトを探しているところです。