Q:ディスクがマウントされたときにデフォルトのFinderウインドウを開くように設定するにはどうしたらよいですか?A:ディスクがマウントされたときに、指定したフォルダをFinderで自動的に開くことができます。これは、CDやディスクイメージでソフトウェアを配布する場合、特に便利です。 ボリュームヘッダーにあるfinderInfoフィールドの3つ目のUInt32には、ボリュームがマウントされたときにFinderに表示するディレクトリウインドウのディレクトリID、または開くティレクトリウインドウが無い場合にはゼロが格納されています。Mac OS XのFinderはこのフィールドを変更しません。 リスト1:ボリュームfrOpenChainの設定
// コマンドラインツールは引数を1つとります。ディスクのマウント時にFinderが開くディレクトリへのパス。
// SetOpenWindow path/to/directory/to/open
#include <CoreServices/CoreServices.h>
int main( int argc, const char *argv[] )
{
OSStatus err;
FSRef dirFSRef;
FSCatalogInfo fsCatalogInfo;
FSVolumeInfo fsVolumeInfo;
// ディスクのマウント時に自動的に開くフォルダを渡す、FSRefを作成。
err = FSPathMakeRef( (const UInt8 *)argv[1], &dirFSRef, NULL );
if ( err != noErr ) goto Bail;
err = FSGetCatalogInfo( &dirFSRef, kFSCatInfoGettableInfo, &fsCatalogInfo, NULL, NULL, NULL );
if ( err != noErr ) goto Bail;
// 従来のMac OSでは、frOpenChainは開くウインドウのリスト。完全を期すためにこれをゼロに設定。
((ExtendedFolderInfo*)&fsCatalogInfo.extFinderInfo)->reserved1 = 0;
err = FSSetCatalogInfo( &dirFSRef, kFSCatInfoFinderXInfo, &fsCatalogInfo );
if ( err != noErr ) goto Bail;
// ボリュームのfinderInfoを取得。
err = FSGetVolumeInfo( fsCatalogInfo.volume, 0, NULL, kFSVolInfoFinderInfo, &fsVolumeInfo, NULL, NULL );
if ( err != noErr ) goto Bail;
// 新しいフォルダIDを設定。
((UInt32*)&(fsVolumeInfo.finderInfo))[2] = fsCatalogInfo.nodeID;
err = FSSetVolumeInfo( fsCatalogInfo.volume, kFSVolInfoFinderInfo, &fsVolumeInfo );
if ( err != noErr ) goto Bail;
Bail:
return( err );
}ドキュメント改訂履歴掲載日: 2006-01-03
|