シェルAPI
CSIDL_BITBUCKET | ごみ箱 |
CSIDL_DESKTOPDIRECTORY | デスクトップ |
CSIDL_FAVORITES | お気に入り |
CSIDL_PERSONAL | マイドキュメント |
CSIDL_PROGRAMS | Program Files |
CSIDL_RECENT | 最近使ったファイル |
CSIDL_SENDTO | 送る |
CSIDL_STARTMENU | スタートメニュー |
CCSIDL_STARTUP | スタートアップ |
通常SHOpratonを呼び出すと、「はい」「いいえ」のダイアログが出てしまうが、
fFlagsに、FOF_NONCONFIRMATIONを追加すると、ダイアログを出さずにファイルを
ごみ箱に移動させられる。
//最後に"\0"をつけないとエラーに。 char *FileNames ="E:test\test.txt\0"; SHFILEOPSTRUCT op; op.hwnd = Handle; op.wFunc = FO_DELETE; //動作の種類(ここではゴミ箱行き) op.pFrom = FileNames; //対象のファイル op.pTo = NULL; op.fFlags= FOF_ALLOWUNDO; //Undoを許可するか? op.fAnyOperationsAborted = true; //キャンセルできるか? SHFileOperation(&op);
TSHFileOpStructA = packed record
Wnd: HWND; wFunc: UINT; pFrom: PAnsiChar; pTo: PAnsiChar; fFlags: FILEOP_FLAGS; fAnyOperationsAborted: BOOL; hNameMappings: Pointer; lpszProgressTitle: PAnsiChar;
end;
TSHFileOpStruct? = TSHFileOpStructA;
[メンバー] Wnd.....ファイル操作中の状態情報を表示するダイアログボックスのハンドル wFunc.....ファイル操作の種類を表すフラグ(以下のいずれか1つ)
・FO_COPY---pFromからpToへファイルをコピーする ・FO_DELETE---pFromのファイルを削除する ・FO_MOVE---pFromからpToへファイルを移動する ・FO_RENAME---pFromのファイルをリネームする
pFrom.....ソースファイル名(複数の場合は、ヌル区切りで2重ヌル終端の文字列) pTo.....デスティネーションファイル・ディレクトリ名(複数の場合はヌル区切り2重ヌ ル終端の文字列で、それぞれが pFrom の1つ1つのデスティネーションになる) fFlags.....ファイル操作をコントロールする以下のフラグの組合せ
・FOF_ALLOWUNDO---可能ならアンドゥー情報を保持する ・FOF_CONFIRMMOUSE---未実装 ・FOF_FILESONLY---ワイルドカード(*.*)が指定された場合、ファイルに対してのみ操作を行う ・FOF_MULTIDESTFILES---デスティネーションファイル・ディレクトリを複数指定する ・FOF_NOCONFIRMATION---表示されるダイアログボックスに「全てはい」を選択 ・FOF_NOCONFIRMMKDIR---必要があれば新しいディレクトリを自動的に作成 ・FOF_RENAMEONCOLLISION---既に同じファイル名が存在する場合「のコピー」というファイル名を与える ・FOF_SILENT---進捗ダイアログボックスを表示しない ・FOF_SIMPLEPROGRESS---進捗ダイアログボックスを表示(ファイル名は表示せず) ・FOF_WANTMAPPINGHANDLE---hNameMappings?を使用(ハンドルはSHFreeNameMappings?関 数で開放)
fAnyOperationsAborted.....処理が終了する前にユーザーが中断させた場合にTRUEが返される hNameMappings.....fFlagsがFOF_WANTMAPPINGHANDLEを含む時使用され、TSHNameMapping 構造体(後述)の配列を含むファイルネームマッピングオブジェクトのハンドル
lpszProgressTitle?.....fFlagsがFOF_SIMPLEPROGRESSを含む時使用され、進捗ダイアログボックスのタイトル文字列へのポインタ