サイトトップ

Director Flash 書籍 業務内容 プロフィール
 

Macromedia Director非公式テクニカルノート

Directorアプリケーションのバージョンを調べたい

ID: FN0601004 Product: Director

Platform: All
Viersion: MX 2004 and above

Directorアプリケーションのバージョンに関わる情報は、_player.productVersionプロパティのほか、_system.environmentPropListにも含まれています。ふたつのプロパティは属するオブジェクトが異なり、取得できる内容も違いがありますので、整理しておきましょう。

1. _player.productVersionプレーヤープロパティ
_player.productVersionDirectorプロパティは、アプリケーションのバージョンをMajorVersion.MinorVersion.BugFixVersionの形式の文字列で返します[*1]。BugFixVersionは、ない場合もあります。このプロパティは、読み取り専用です。

つぎのスクリプトは、メッセージウィンドウにDirectorアプリケーションのバージョンを表示します(スクリプト001)。

スクリプト001■メッセージウィンドウに_player.productVersionの値を表示

-- Lingoシンタックス
put _player.productVersion
-- "10.1"

// JavaScriptシンタックス
trace(_player.productVersion);
// 10.1


[*1] _system.environmentPropList.productVersionプロパティも、_player.productVersionと同じ値を返します。ただし、「Directorスクリプトリファレンス」の「environmentPropList」の項には、productVersionがプロパティとして記載されていません。

しかし、_system.environmentPropListにはプロパティとして含まれており、またTom Higgins氏がlingo-lでこのプロパティを紹介しています。ですから、_system.environmentPropList.productVersionプロパティは、サポートされるものと思われます。

2. _system.environmentPropListシステムプロパティ
現在ムービーが再生されている環境についての情報を格納したリストです。13種類の項目の情報が、プロパティとして格納されています。詳しくは、「Directorスクリプトリファレンス」の「environmentPropList」の項をご参照ください[*2]。

つぎのスクリプトは、メッセージウィンドウに_system.environmentPropListプロパティのリスト内容を表示します(スクリプト002)。

スクリプト002■メッセージウィンドウに_system.environmentPropListの内容を表示

-- Lingoシンタックス
put _system.environmentPropList
-- [#shockMachine: 0, #shockMachineVersion: "", #platform: "Macintosh,PowerPC", #runMode: "Author", #colorDepth: 32, #internetConnected: #online, #uiLanguage: "Japanese", #osLanguage: "Japanese", #productBuildVersion: "11", #productVersion: "10.1", #osVersion: "Macintosh OS 10.4.3", #licenseType: "Full", #trialTime: 0]

// JavaScriptシンタックス
trace(_system.environmentPropList);
// <[#shockMachine: 0, #shockMachineVersion: "", #platform: "Macintosh,PowerPC", #runMode: "Author", #colorDepth: 32, #internetConnected: #online, #uiLanguage: "Japanese", #osLanguage: "Japanese", #productBuildVersion: "11", #productVersion: "10.1", #osVersion: "Macintosh OS 10.4.3", #licenseType: "Full", #trialTime: 0]>

_system.environmentPropList.productBuildVersionプロパティはDirecdtorアプリケーションの内部ビルド番号、_system.environmentPropList.productVersion_player.productVersionと同じ形式のバージョン情報を、それぞれ文字列で返します。ただし、後者は「Directorスクリプトリファレンス」に記載されていません[*1]。

つぎのスクリプトは、メッセージウィンドウにDirectorアプリケーションのビルド番号を表示します(スクリプト003)。

スクリプト003■メッセージウィンドウに_system.environmentPropList.productBuildVersionの値を表示

-- Lingoシンタックス
put _system.environmentPropList.productBuildVersion
-- "11"

// JavaScriptシンタックス
trace(_system.environmentPropList.productBuildVersion);
// 11


[*2]「Directorスクリプトリファレンス」に掲載されているのは13項目のうちの9つで、#productVersion、#osVersion、#licenseType、#trialTimeの4項目については記載がありません。

3. バージョン情報をリスト・配列にする
バージョン情報を、扱いやすいように数値のリストあるいは配列に変換してみましょう。関数xGetVersionを定義して、バージョン情報を[MajorVersion, MinorVersion, BugFixVersion, BuildNumber]のリストもしくは配列で返します。

まず、(1)_player.productVersionプロパティで取得される文字列をピリオド(".")で区切り、各要素を数値に変換したリストまたは配列を作成します。そして、(2)そのリストもしくは配列の最後に、_system.environmentPropList.productBuildVersionの値を、同様に数値に変換して追加します。

このとき注意しなければならないのは、_player.productVersionがBugFixVersionの数字を含まない場合があることです。したがって、(1)で作成したリストまたは配列の要素数が3に満たなかった場合には、BugFixVersionの値として数値0を追加しておく必要があります。

(a) Lingoシンタックス
Lingoシンタックスでは、itemDelimiterプレーヤープロパティを用いて、_player.productVersionプロパティの返す文字列をピリオド(".")で区切ります[*3]。バージョン情報の各要素はrepeat with構文でループ処理し、value()関数を使って数値に変換したうえで、リストに追加(append())していきます(スクリプト004)。

関数は、ムービースクリプトとして作成しました。メッセージウィンドウから呼出すと、例えばつぎのような結果が返ります(10.1.0r11の場合)。

put xGetVersion()
-- [10, 1, 0, 11]

スクリプト004■バージョン情報をリストで返す関数 − Lingシンタックス

-- ムービースクリプト
on xGetVersion()
  lVersion = []
  sItemDelimiter = _player.itemDelimiter
  _player.itemDelimiter = "."
  sProductVersion = _player.productVersion
  nLength = sProductVersion.item.count
  nCount = max(nLength, 3)
  repeat with i = 1 to nCount
    if (i<=nLength) then
      lVersion.append(value(sProductVersion.item[i]))
    else
      lVersion.append(0)
    end if
  end repeat
  lVersion.append(value(_system.environmentPropList.productBuildVersion))
  _player.itemDelimiter = sItemDelimiter
  return lVersion
end


[*3] itemDelimiterプロパティのシンタックスは、「Directorスクリプトリファレンス」にはthe itemDelimiterとしか掲載されていません。このプロパティのオブジェクトを参照するシンタックスは、_player.itemDelimiterになります。

(b) JavaScriptシンタックス
JavaScriptシンタックスでは、String.split()メソッドを使うと、_player.productVersionプロパティの返す文字列をピリオド(".")で区切った配列に変換できます。しかし、バージョン情報の各エレメントは文字列ですので、forステートメントでループ処理し、取出した値をparseInt()関数により数値に変換したうえで、配列に戻します。配列にエレメントを追加するには、Array.push()メソッドを用います(スクリプト005)。

関数は、ムービースクリプトとして作成しました。メッセージウィンドウから呼出すと、例えばつぎのような結果が返ります(10.1.0r11の場合)。

trace(xGetVersion());
// 10,1,0,11

スクリプト005■バージョン情報を配列で返す関数 − JavaScriptシンタックス

// ムービースクリプト
function xGetVersion() {
  var lVersion = _player.productVersion.split(".");
  var nLength = lVersion.length;
  var nCount = Math.max(nLength, 3);
  for (var i = 0; i<nCount; ++i) {
    if (i<nLength) {
      lVersion[i] = parseInt(lVersion[i]);
    } else {
      lVersion.push(0);
    }
  }
  lVersion.push(parseInt(_system.environmentPropList.productBuildVersion));
  return lVersion;
}

_____

作成者: 野中文雄
作成日: 2006年1月30日


Copyright © 2001-2006 Fumio Nonaka.  All rights reserved.