Windows 構造体は、Windows OS のユーザ インタフェース要素にアクセスするためのメソッドを提供します。
これらのメソッドは、3ds Max 2008 以降で使用可能です。
従来、Avguard 拡張機能として提供されていた機能です。
このメソッドは、3ds Max メイン ウィンドウの HWND を整数(Pointer 値)で返します。
このメソッドは、MS Windows デスクトップの HWND を整数(Pointer 値)で返します。
windows.sendMessage <int HWND> <int message> <int messageParameter1> <int messageParameter2>
最初の引数で指定された HWND に Win32 メッセージを送信します。
2 番目の引数はメッセージ ID です。通常は 16 進数で指定します。
3 番目と 4 番目の引数はメッセージのパラメータです。パラメータを指定しない場合は、プレースホルダとして 0 を渡します。
windows.postMessage <int HWND> <int message> <int messageParameter1> <int messageParameter2>
引数の値を渡しながら、Windows の PostMessage 関数を呼び出します。
windows.processPostedMessages()
Windows の保留中のメッセージを取得して 3ds Max に送信するメッセージ ポンプを実行します。
このメソッドを呼び出すと、保留されているメッセージがすべて処理されます。これを MAXScript ループ内部で使用すると、時間のかかる計算によって 3ds Max の応答がなくなる場合に Windows 7で発生する「ホワイト スクリーン」を防ぐことができます。
このメソッドは、指定された HWND の再帰的な子ウィンドウの配列を返します。
指定された HWND が 0 である場合は、 (再帰的にではなく) 最上位のデスクトップ ウィンドウのみを返します。
親 HWND が指定されている場合は、直接の親が指定されたウィンドウであるウィンドウのみを返します。
HWND として #max が指定されている場合は、3ds Max メイン ウィンドウに関連付けられている HWND が使用されます。
指定された HWND が存在しない場合は、 undefined 値が返されます。
配列の各要素はウィンドウに対応し、8 要素の配列が含まれます(3ds Max 2008 では最初の 5 要素のみ)。
これらの配列の各要素は、ウィンドウに関する次の情報を表します。
2: 親の HWND。所有者は除く(GetAncestor(hWnd,GA_PARENT))
3: 親または所有者の HWND。子のウィンドウの場合、戻り値は親のウィンドウのハンドル。最上位のウィンドウの場合、戻り値は所有者のウィンドウのハンドル。(GetParent(hWnd))
4: クラス名の文字列(GetClassName(hWnd, className, bufSize)) - 最大 255 文字
5: ウィンドウ テキストの文字列(GetWindowText(hWnd, windowText, bufSize)) - 最大 255 文字
6: 所有者の HWND (GetWindow(hWnd,GW_OWNER))
7: ルート ウィンドウの HWND。親のウィンドウを順番にたどって特定されるルート ウィンドウ(GetAncestor(hWnd,GA_ROOT))
8: 所有ルート ウィンドウの HWND。GetParent で返される親および所有者のウィンドウを順番にたどって特定される所有ルート ウィンドウ(GetAncestor(hWnd,GA_ROOTOWNER))
このメソッドは、指定された HWND を親とし、特定のウィンドウ テキストを持った子ウィンドウを返します。子ウィンドウは再帰的に検索されます。
指定された HWND が 0 である場合は、(再帰的にではなく) 最上位のデスクトップ ウィンドウのみを返します。
親 HWND が指定されている場合は、直接の親が指定されたウィンドウであるウィンドウのみを検索します。
HWND として #max が指定されている場合は、3ds Max メイン ウィンドウに関連付けられている HWND が使用されます。
指定された HWND が存在しない場合は、 undefined 値が返されます。
指定されたテキストを持った子ウィンドウが見つからない場合は、 undefined が返されます。
マッチするものが見つかると、8 要素の配列が返されます。要素の意味の詳細については、上記の windows.getChildrenHWND() メソッドの説明を参照してください。
windows.getHWNDData {<int_HWND>|#max}
HWND として #max が指定されている場合は、3ds Max メイン ウィンドウに関連付けられている HWND が使用されます。
指定された HWND が存在しない場合は、undefined 値が返されます。
マッチするものが見つかると、8 要素の配列が返されます。要素の意味の詳細については、上記の windows.getChildrenHWND() メソッドの説明を参照してください。
windows.addChild <int_HWND> <int_HWND>
最初の引数として渡された HWND を持つ ActiveX コントロールを、2 番目の引数として渡された HWND を持つウィンドウの子にします。
最初の引数に MAXScript のコントロールやロールアウトを指定することはできません。必ず ActiveX コントロールを指定する必要があります。
3ds Max 9 以降廃止されたと見なされる ActiveX コントロールを指定した場合、このメソッドも廃止と見なされることがあります。
3ds Max 2011 以降では、ロールアウトやロールアウト コントロールで読み取り専用の .hwnd プロパティが公開されることに注意してください。
ロールアウトの場合は、このプロパティに、そのロールアウトに関連付けられたウィンドウの HWND が格納されます。ロールアウトが開いていない場合は 0 になります。
ロールアウト ユーザ インタフェース コントロールの場合は、そのロールアウトを含むロールアウトのウィンドウの HWND の配列が格納されます。ロールアウトが開いていない場合は空の配列になります。