システム情報

sysinfo 構造体は、システム ディレクトリ、システム名、ユーザ、デスクトップのサイズおよびカラー深度などのシステム情報や、CPU の数やメモリ使用率などのハードウェア関連データなどに対するアクセスに関連するいくつかの変数およびメソッドを提供します。

システム ディレクトリ

sysInfo.windowsdir

Windows ディレクトリを <string> 値として含んでいる読み込み専用変数。

sysInfo.systemdir

Windows システム ディレクトリを <string> 値として含んでいる読み込み専用変数。

sysInfo.tempdir

Temp ディレクトリを <string> 値として含んでいる読み込み専用変数。

sysInfo.currentdir

現在のディレクトリを <string> 値として 取得/設定する変数。

fileIn() 呼び出しなど、明示的なパスが指定されていない場合は、MAXScript は現在のディレクトリでファイルを検索します。そのような呼び出しで相対パスが指定されている場合は、sysInfo.currentdir に相対的なパスが解決されます。

この変数は読み取りおよび書き込みはできませんが、相対パスを使用したり明示的なパスを指定したりすることなく、いつでも効率的に現在のディレクトリを指定することができます。

sysinfo.currentdir
-->"C:\Documents and Settings\username\My Documents\3dsmax\Scripts"

sysinfo.currentdir = "C:\\Temp"
-->"C:\Temp"

fileIn "test.ms" --this willloadthe scriptfromC:\Temp
-->OK

ユーザ名とコンピュータ名:

sysInfo.username

ユーザ名を <string> 値として含んでいる読み込み専用変数。

sysInfo.computername

コンピュータ名を <string> 値として含んでいる読み込み専用変数。

currentUser = sysinfo.username + "@" + sysinfo.computername
"SonGoku@FlyingNimbus"

CPU およびデスクトップ情報:

sysInfo.cpucount

CPU の数を <integer> 値として含んでいる読み込み専用変数。

sysInfo.desktopSize

読み込み専用 のシステム グローバル変数。ピクセル単位の Windows デスクトップ サイズを Point2 値として返します。2 台のモニタにまたがってデスクトップを表示するように設定したデュアル モニタ システムでは、返されるデスクトップ サイズには 2 番目のモニタも含まれることに注意してください。

sysInfo.DesktopSizeUnscaled

スケールされていない Windows デスクトップ サイズ(ピクセル単位)を Point2 値として含む読み取り専用のシステム グローバル変数です。2 台のモニタにまたがってデスクトップを表示するように設定したデュアル モニタ システムでは、返されるデスクトップ サイズには 2 番目のモニタも含まれることに注意してください。 3ds Max 2017 以降で使用可能です。

sysInfo.desktopBPP

読み込み専用のシステム グローバル変数。ビット/ピクセル単位の Windows デスクトップのカラー深度を整数値として返します。たとえば、グラフィックス ドライバが 32 ビット True Color に設定されている場合、返される値は 32 になります。

format "Your system has % CPUs (Cores)\n" sysinfo.cpucount
"Your system has 8 CPUs (Cores)"
format "Desktop: Scaled % / Unscaled % @ % bits per pixel\n" sysinfo.desktopSize sysinfo.DesktopSizeUnscaled sysinfo.desktopBPP
"Desktop: Scaled [1920,1080] / Unscaled [1920,1080] @ 32 bits per pixel"

3ds Max プロセスの優先順位とアフィニティ:

sysInfo.MAXPriority

3ds Max の処理優先順位を <name> 値で取得/設定します。有効な優先順名の値は #realtime#high#abovenormal#normal#belownormal、および #low です。

注: #realtime を設定するには管理者権限が必要です。 管理者以外のユーザーが #realtime を設定すると、#high が設定されます。#realtime を設定することは、一般にお勧めしません。この設定は、ハードウェアと直接通信するアプリケーションにのみ適しています。

#backgroundBegin および #backgroundEnd の書き込み専用プロパティもあります。Windows 10 では、#backgroundBegin を設定すると、優先順位が #low と報告され、#backgroundEnd を設定すると、プロセスが元の優先順位に戻ります。ただし、#realTime の場合は例外的に、プロセスは #low のままになります。Windows 7 では、#backgroundBegin を設定しても、報告される優先順位は変わりません。

3ds Max 2017.1 Update 以降で使用可能: #abovenormal#belownormal#backgroundBegin#backgroundEnd、および #realtime

対応するシステム プロセスの優先順位レベルについては、MSDN のトピック「SetPriorityClass 関数」を参照してください。

例:

(
current_priority = sysinfo.MAXpriority
priorities = #(#low,#belowNormal,#normal,#aboveNormal,#high,#realtime)
for p1 in priorities do
(
sysinfo.MAXpriority = #normal
sysinfo.MAXpriority = p1
format "% : %\t" p1 sysinfo.MAXpriority
for p2 in priorities do
(
sysinfo.MAXpriority = p2
format "\t%" sysinfo.MAXpriority
sysinfo.MAXpriority = p1
)
format "\n"
)
print "Priority Modifiers"
priority_modifiers = #(#backgroundBegin,#backgroundEnd)
for p1 in priorities do
(
sysinfo.MAXpriority = #normal
sysinfo.MAXpriority = p1
format "% : %\t" p1 sysinfo.MAXpriority
for p2 in priority_modifiers do
(
sysinfo.MAXpriority = p2
format "\t%" sysinfo.MAXpriority
)
format "\n"
)
sysinfo.MAXpriority = current_priority
ok
)
sysinfo.processAffinity

プロセスのアフィニティ(プロセスが使用できるプロセッサ)をポインタ値として取得/設定します。ポインタ値の各ビットが 1 つのプロセッサに対応しています。ビットが設定されていれば、プロセスはそのプロセッサを使用できます。

3ds Max 2008 以降で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

sysinfo.systemAffinity

システム アフィニティ(システムに存在するプロセッサ)をポインタとして含んでいる読み込み専用のプロパティです。ポインタの各ビットが 1 つのプロセッサに対応しています。ビットが設定されていれば、プロセッサは存在します。

3ds Max 2008 以降で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

以下の例は、既存のプロセッサまたは既存の各プロセッサ (コア) 用に設定されたビットが含まれた bitarray を取得する方法を示したものです。この例では、システムには 4 基のコアが搭載されています。

--getting system affinity as a Pointer:
sysinfo.systemAffinity
-->15P

--getting system affinity as an array:
(for i = 1 to 32 where bit.get sysinfo.systemAffinity i collect i)
-->#(1,2,3,4)

--getting system affinity as a bitarray:
(for i = 1 to 32 where bit.get sysinfo.systemAffinity i collect i)as bitarray
-->#{1..4}

システム言語とロケール:

sysinfo.getLanguage [user:<boolean>]

このメソッドは、Windows OS 言語を 3 要素の配列として返します。

最初の 2 つの要素は整数値で、プライマリ言語およびサブ言語 ID に対応しています。これらの ID に関する説明は、Windows SDK ヘルプ ファイルを参照してください。

3 番目の要素は現在の言語について記述したスクリプトです。3ds Max 2010 以降では、言語が取得できない場合は、3 番目の要素にはエラー文字列が含まれます。

オプションのキーワード usertrue (既定値)の場合、現在のユーザの言語が返されます。false の場合、システムの言語が返されます。

3ds Max 6 以降で使用可能です。

sysinfo.getMaxLanguage()

3ds Max 2010 以降 で使用できるこのメソッドは、3ds Max の言語を #(9, 1, "ENU", "English (United States)", "en-US") などの配列として返します。3ds Max 2013 以降、このメソッドは 5 つの要素を含む配列を返すようになりました。以前のバージョンは 4 つの要素を含む配列を返していました。

最初の 2 つの要素は整数値で、プライマリ言語およびサブ言語 ID に対応しています。これらの ID に関する説明は、Windows SDK ヘルプ ファイルを参照してください。

3 番目の要素は、現在の言語を示す 3 文字のコードです(例: 米国英語の場合は「ENU」)。

4 番目の要素は、現在の 3ds Max 言語の説明を示す文字列です。説明文字列を取得できない場合、この要素には undefined の値が格納されます。

5 番目の要素は、3ds Max の 2 文字のローカライゼーション コードおよび国名コードを <language>-<country> の形式で表したものです(「en-US」など)。

sysInfo.getDecimalChars()

3ds Max 2020.2 Update 以降で使用可能: 次の場所にあるユーザー ロケールの小数点記号を含む配列を返します。

  1. OS ユーザー ロケール
  2. C ランタイ ムロケール
  3. C++ ランタイム グローバル ロケール
  4. .NET ランタイム グローバル ロケール

たとえば、次のように使用されます。

res = sysInfo.getDecimalChars()
--> #(".", ".", ".", ".")
注: 3ds Max は起動時に 1 回だけロケールを読み取ります。3ds Max の実行中にロケールを変更したりカスタムの小数点記号を指定したりすると、このメソッドは新しい文字を返しますが、3ds Max が再起動するまで使用する文字は変更されません。

メモリ使用量と Max プロセスの情報:

sysinfo.getSystemMemoryInfo()

システム メモリ ステータス データを含む 7 つの要素配列を返すメソッドです。各配列要素には、次のデータが含まれます。

例:

(
r=sysinfo.getSystemMemoryInfo()
for i=2 to 7 do r[i] /= (1024*1024.)
format "percent of memory in use:\t%\n" r[1]
format "total physical memory:\t% MB\n" r[2]
format "free physical memory:\t% MB\n" r[3]
format "used physical memory:\t% MB\n" (r[2]-r[3])
format "total paging file size:\t% MB\n" r[4]
format "free paging file size:\t% MB\n" r[5]
format "used paging file size:\t% MB\n" (r[4]-r[5])
format "total virtual memory:\t% MB\n" r[6]
format "free virtual memory:\t\t% MB\n" r[7]
format "used virtual memory:\t\t% MB\n" (r[6]-r[7])
ok
)

結果

percent of memory in use: 0
total physical memory: 255.359 MB
free physical memory: 16.5156 MB
used physical memory: 238.844 MB
total paging file size: 1016.3 MB
free paging file size: 757.898 MB
used paging file size: 258.398 MB
total virtual memory: 2047.88 MB
free virtual memory:  1846.55 MB
used virtual memory:  201.328 MB
OK
sysinfo.getMAXMemoryInfo()

3ds Max メモリ ステータス データを含む 9 つの要素配列を返します。各配列要素には、次のデータが含まれます。

例:

(
r=sysinfo.getMAXMemoryInfo()
for i=2 to 9 do r[i] /= (1024*1024.)
format "Page Fault Count:\t\t\t%\n" r[1]
format "Peak Working Set Size:\t\t% MB\n" r[2]
format "Working Set Size:\t\t\t% MB\n" r[3]
format "Quota Peak Paged Pool Usage:\t% MB\n" r[4]
format "Quota Paged Pool Usage:\t\t% MB\n" r[5]
format "Quota Peak NonPaged Pool Usage:\t% MB\n" r[6]
format "Quota NonPaged Pool Usage:\t\t% MB\n" r[7]
format "Pagefile Usage:\t\t\t% MB\n" r[8]
format "Peak Pagefile Usage:\t\t\t% MB\n" r[9]
ok
)

結果

Page Fault Count:   32948
Peak Working Set Size:  70.3594 MB
Working Set Size:   70.3594 MB
Quota Peak Paged Pool Usage: 0.166186 MB
Quota Paged Pool Usage:  0.161236 MB
Quota Peak NonPaged Pool Usage: 0.0213509 MB
Quota NonPaged Pool Usage:  0.0213509 MB
Pagefile Usage:   58.9023 MB
Peak Pagefile Usage:   58.9219 MB
<int>sysinfo.getMAXHandleCount()
<int>sysinfo.getMAXUserObjectCount()
<int>sysinfo.getMAXGDIObjectCount()

ここに示されている関数は 3ds Max のプロセスで保持されるハンドル、ユーザ オブジェクト、および GDI オブジェクトの数を返します。3ds Max 2019.3 Update 以降で使用可能です。これは、Windows タスク マネージャの[詳細]タブに表示される情報と同じです。

<integer64>sysInfo.getMAXHeapUsed()

3ds Max ヒープ メモリ使用量を Integer の値として返します。3ds Max 2021 以降 で使用可能です。

3ds Max コマンド ラインの情報

<string>sysinfo.getCommandLine()

コマンド ライン全体(引数を含む)を文字列として返します。3ds Max 2019.2 Update 以降で使用可能です。

例:

""C:\\Program Files\\Autodesk\\3ds Max 2019\\3dsmax.exe" -d -dfc -g -q"

<array>sysinfo.getCommandLineArgs()

各要素がコマンド ラインの引数になっている文字列の配列を返します。3ds Max 2019.2 Update 以降で使用可能です。

例:

#("-d", "-dfc", "-g", "-q")