EnumPrintersで取得したプリンタがローカル接続かネットワーク接続か
判別したいのですが、うまくいきません。
どなたかご教授願います。
※pPrinterInfoはEnumPritners()で取得したバッファを格納してあるPRINTER_INFO_2の
インスタンス。
DWORD dwAttribute = pPrinterInfo[i].Attributes &= PRINTER_ATTRIBUTE_LOCAL;
if(dwAttribute != PRINTER_ATTRIBUTE_LOCAL)
{
//はじく処理;
}
上記のようにしてみたのですが、すべてのプリンタがローカル接続だと判別してしまい
ます。
よろしくお願いします。
PRINTER_INFO_2のメンバー変数からdwAttributeに取り出すところの処理がへん。
もし、パンチミスで無いのならもう一度良く見直すことをお勧めします。
DWORD dwAttribute = pPrinterInfo[i].Attributes;
素直に上記のようにしてみたのですが、やはりうまくいきません。
ネットにもなかなか情報がなので
よろしければほかの方法をご教授願いますか?
> DWORD dwAttribute = pPrinterInfo[i].Attributes;
> 素直に上記のようにしてみたのですが、
改悪。
if (pPrinterInfo[i].Attributes & PRINTER_ATTRIBUTE_LOCAL) {
//はじく処理;
}
でいいのでは?
ネットワーク接続という用語に混乱がないか確かめておいたほうがいいな
プリンタサーバ機が公開している共有プリンタに
(暗黙の) net use で接続する場合は「リモート」
LAN 接続プリンタに IP アドレスを直接指定して打ち出す場合は「ローカル」
(プリンタプロパティ画面でポートが Standard TCP/IP Port ならローカル)
最近の LAN 接続プリンタを使うのであればローカルなのが当たり前な気がするぞ
tetrapodさん、ありがとうございます。
ご指摘の通り、認識に間違いがありました。
Standard TCP/IP Port → PRINTER_ATTRIBUTE_NETWORK
Local Port → PRINTER_ATTRIBUTE_LOCAL
という認識でした。
Standard TCP/IP PortとLocal Portの判別を行いたいのですが、
PRINTER_INFO_2のメンバでは無理ということでしょうか?
「&=」の用法についてちゃんと調べて理解する事がまず先決かと。
この辺は単純な文法の問題なので本で確認すればわかると思います。
プリンタの接続に関してはちゃんと仕様を抑えないと駄目でしょうねぇ。
あと、なんでローカル接続で無いと駄目なのかと言う部分の解説が無いと
この判断で良いかどうかの判定もできない気がしますね。
うわっ、ニアミスだった。
ニアミスだけなのはあんまりなので。
PRINTER_INFO_2のpPortNameは使えない?
その物ズバリポートの名前だから判別できるのでは?
ちなみになぜStandard TCP/IP Portをはじきたいのかまで提示すれば、
別の案も出てくるかも。
>ちなみになぜStandard TCP/IP Portをはじきたいのかまで提示すれば、
>別の案も出てくるかも。
特別なことはありません。
Local Port接続のプリンタ名を取得して、リストに列挙したいのです。
>PRINTER_INFO_2のpPortNameは使えない?
>その物ズバリポートの名前だから判別できるのでは?
すいません、情報提示不足でした。
上記方法は試行済みです。
ただ、Attributesメンバも使えそうたっだので、試していました。
上記方法でやるのが、無難そうですかね...
> Local Port接続のプリンタ名を取得して、リストに列挙したいのです。
だから、どうして Local Port のだけ列挙したいのか? という疑問なのです。
「理由はない。なんとなく」なのでしょうか?
>> Local Port接続のプリンタ名を取得して、リストに列挙したいのです。
>
>だから、どうして Local Port のだけ列挙したいのか? という疑問なのです。
>「理由はない。なんとなく」なのでしょうか?
そそ。
私もそれが言いたかった。
Local Portだけを列挙すると言うことはそれ以外だと不都合があるとか
そういう話なのかなと。
もし別の方向でカバーできるならそこを気にしなくても良いのでは
と言う話です。
>だから、どうして Local Port のだけ列挙したいのか? という疑問なのです。
Local Port接続のプリンタ名を列挙する、という仕様だからです。
なにもないようなので解決にしちゃいます。