PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
21175 04/05/09 15:14:58 RE(10):API関数でプリンタの状態を調べたい By isii
21174 04/05/08 20:56:48 RE(9):API関数でプリンタの状態を調べたい By にしやん
21173 04/05/08 17:24:35 RE(8):API関数でプリンタの状態を調べたい By yui_s
21172 04/05/08 17:23:23 RE(7):API関数でプリンタの状態を調べたい By yui_s
21156 04/05/05 20:54:52 RE(6):API関数でプリンタの状態を調べたい By isii
21155 04/05/04 19:48:54 RE(5):API関数でプリンタの状態を調べたい By class
21154 04/05/04 18:29:54 RE(4):API関数でプリンタの状態を調べたい By yui_s
21153 04/05/04 12:05:55 RE(3):API関数でプリンタの状態を調べたい By isii
21152 04/05/01 15:31:16 RE(2):API関数でプリンタの状態を調べたい By yui_s
21150 04/04/28 21:03:06 RE(1):API関数でプリンタの状態を調べたい By class
21149 04/04/28 18:31:31 API関数でプリンタの状態を調べたい By yui_s

カテゴリ:PowerBuilderの開発環境
日付:2004年05月08日 20:56 発信者:にしやん
題名:RE(9):API関数でプリンタの状態を調べたい

yui_sさん、こんばんは。

>又、priority以降の値はアドレスを取得しているかが疑問で
>string型の「address」表示を行うとアプリケーションエラーで落ちてしまいます。

ポインタでない値に対して String(・・,\"address\") なんて使ったら、
メモリアクセス違反になるのはあたりまえです。
(PRINTER_INFO_2 構造体の場合、Attributes 以降はポインタではありません)

例えば、Priority には 1 が返されたとありますが、
String(PrinterInfo.Priority,\"address\")
とすると、アクセス禁止領域であるアドレス 1 にアクセスしようとして、
メモリアクセス違反となるわけです。
Priority は DWORD ですから、そのまま 1 でいいです。

他にも、文字列以外(構造体等)に対するポインタも String(・・,\"address\") は
やめましょう。エラーにはなりませんが、まともな文字列が返るわけがありません。

>どのように修正すればよろしいでしょうか?

isii さんが書いているのは、PRINTER_INFO_2 構造体の Status で、
PRINTER_STATUS_OFFLINE フラグのビットが立っているかを確認してみれば・・、
というものです。

ただ、WinXP で実験したところ、Status はプリンタの電源の状態にかかわらず
常に 0 が返されてしまうようです。(OS によって異なるのかもしれません)
yui_s さんのテストでも 0 のようですね。(条件はわかりませんが・・)

で、同じく WinXP で実験したところ、PRINTER_INFO_2、PRINTER_INFO_5 の両方にある
Attributes で PRINTER_ATTRIBUTE_WORK_OFFLINE のビットが立っているかを
確認すればプリンタの電源の状態を確認できるようです。
(PRINTER_INFO_2、PRINTER_INFO_5 どちらの Attributes でも同じ値が返されます)
ちなみに、ビットが立っているときが電源OFFです。

http://msdn.microsoft.com/library/en-us/gdi/prntspol_8gz6.asp (英文)

によれば、このフラグは Win9x/Me のみ有効のようなことが書いてありますが、
WinXP で取得できるので Win2k でもできるのではないかと思います。

※PRINTER_ATTRIBUTE_WORK_OFFLINE の値は、winspool.h を見ればわかります。

付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows 2000
DBMS (記載なし)
Browser (記載なし)

Server SoftWare

OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.