高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先



QD55 - “モニタ&サウンド”コントロールパネルに表示されるモニター ID の取得方法

(98 年 1 月 16 日)

Q: ディスプレイ・マネージャの DMGetDisplayIDByGDevice() コールを使って、ユーザが“Identify Monitors”ボタンをクリックしたときに“モニタ&サウンド”コントロールパネルに表示されるモニター ID を取得しようと思っています。ところが、DMGetDisplayIDByGDevice() はこの値を返さないようです。正しいモニター ID 番号を取得するにはどうしたらよいでしょう。

A: Display Manager のマニュアルに記載はないが、Displays.h ファイルで定義されているコールがあり、それを使います。まず、DMGetDisplayIDByGDevice で displayID を取得し、DMGetNameByAVID にその displayID を渡してデバイスの「名前」を取得する、というものです。ここでデバイスの「名前」といっているのは、いわゆるデバイス名 (例えば「Multiple Scan Display」) とデバイス番号 (例えば「1」) を合わせた文字列です。デバイス番号は“モニタ&サウンド”コントロールパネルに表示される番号です。デバイス番号、つまりモニター ID だけを取得するには、デバイスの名前の該当部分のマスクを指定して取り出してください。例えば、次のようになります。

err = DMGetDisplayIDByGDevice(gd, &displayID, false);
err = DMGetNameByAVID(displayID, kSuppressNameMask + kForceNumberMask, &theStr);

これらのコールが使用できるのは Display Manager 2.0 ですので、注意してください。Display Manager 1.0 のシステムでこれらのコールを使うには、Display Enabler がインストールされていることが必要です。Display Enabler は Display Manager SDK に含まれています。Display Manager SDK はこのサイトか、MacOS SDK CD にあります。

DMGetNameByAVID についてもう少し詳しく説明します。知りたいデバイスの「名前」やデバイス番号だけ、あるいは両方を調べるには、DMGetNameByAVID 関数を使ってください。

extern pascal OSErr DMGetNameByAVID
            (AVIDType theID, unsigned long nameFlags, Str255 *name)

theID: AVIDType はポートとデバイスを表す ID です。互換性のため旧来の Display ID タイプが使用されています。基本的に、theID は、GDevice レコードを取得したいビデオデバイスの displayID のことです。
nameFlags:
enum {
/* nameFlags のビット */
kSuppressNumberBit      = 0,
kSuppressNumberMask     = 1,
kForceNumberBit         = 1,
kForceNumberMask        = 2,
kSuppressNameBit        = 2,
kSuppressNameMask       = 4
};
*name: *name はデバイス名 (例えば「Multiple Scan Display」) とデバイス番号を含む文字列です。デバイス番号はそのデバイスがデバイス・ツリーに現れる順番です。

「名前」の一部を取得したい場合には、nameFlags パラメータを使ってください。

名前だけ (例えば「Multiple Scan Display」) を取得するには、nameFlags パラメータに kSuppressNumberMask フラグを使ってください。

     err = DMGetNameByAVID(displayID, kSuppressNumberMask, &nameStr);

番号だけを取得するには、マスクに kSuppressNameMask + kForceNumberMask を指定してください。

     err = DMGetNameByAVID(displayID, kSuppressNameMask + kForceNumberMask, &numberStr);

その文字列から名前と番号の両方を取得するには、kForceNumberMask フラグを使ってください。

     err = DMGetNameByAVID(displayID, kForceNumberMask, &nameStr);

-- レティシア・アラーコン
devsupport@apple.com


[ Technical Q&A's : Graphics & Media : QuickDraw : QD55 ]