--- 1998 07/31 発刊 ---
--- 1999 06/16 改修 --- Thanks to 坂本 貴洋 さん --- 2000 01/08 改修 --- Thanks to KENZOU さん 創 刊 号
|
進め!中級プログラマー 創刊号
今回のテーマ シェルと仲良くする(part1)
VCLのような良く出来たライブラリを用いると、そこそこのWindowsアプリケーション、ユーティリティがものの数時間で非常に簡単に作成できてしまいます。
各ファイルに割当てられているアイコンを取得するにはどうすればいいのか。
このようなシェルとの対話を必要とする場面で使える知識やテクニックを今号(part1)及び次号(part2)に分けて解説していきます。 |
1. シェルAPI
ここでいうシェルAPIとは、SHで始まる関数群及びその他のシェルに作用する関数群を合わせたもの(表1参照)のことで、Delphiでは「shellapi.pas」及び「shlobj.pas」にて宣言されています。(C系言語では「shellapi.h」「shlobj.h」) これらの関数を利用すれば、シェル内で管理されているアイコンなどのシステムリソースにアクセスしたり、別のアプリケーションを実行したりすることが出来るようになります。 ここではまず、これらのシェルAPIのうち知っていると便利なものについて、概要及び使用法を簡単に解説していきます。 また、ドラッグ&ドロップに絡む部分など、別の号で特集する予定のものに関しましては外しましたのでご容赦下さい。 なお、「シェルって何?」という方は、まず下のミニ解説からご覧になって下さい。
|
1.2 SHAddToRecentDocs手続き
[概要]
{ パラメータ }
[使用例]
|
1.3 SHBrowseForFolder関数
[概要]
{ パラメータ }
{ 返値 }
選択されたファイルの(名前空間のルートに対する)位置を指定するアイテムIDリストへのポインタを返します。
[使用例]
|
1.4 SHGetPathFromIDList関数
[概要]
{ パラメータ }
{ 返値 }
関数が成功すればTRUE、失敗すればFALSEを返します。
[使用例]
|
1.5 SHGetSpecialFolderLocation関数
[概要]
{ パラメータ }
{ 返値 }
関数が成功すれば、NOERRORを返します。失敗した場合はOLEで定義されたエラーコードを返します。
[使用例]
|
1.6 SHGetMalloc関数
[概要]
{ パラメータ }
{ 返値 }
関数が成功すればNOERRORを返します。失敗すればE_FAILを返します。
[使用例]
|
1.7 ShellExecuteEx関数
[概要]
{ パラメータ }
{ 返値 }
関数が成功した場合は非ゼロ値を返します。
[使用例]
|
1.8 FindExecutable関数
[概要]
{ パラメータ }
{ 返値 }
関数が成功した場合、33以上の値を返します。失敗した場合は32以下の値を返し、以下のいずれかの値を取ります。
[使用例]
|
1.9 ExtractAssociatedIcon関数
[概要]
{ パラメータ }
{ 返値 }
関数が成功すると、アイコンのハンドルを返します。失敗するとヌルを返します。
[使用例]
|
1.10 ExtractIcon関数
[概要]
{ パラメータ }
{ 返値 }
関数が成功すればアイコンのハンドルを返します。指定されたファイルが実行ファイル、DLL、アイコンファイルでなかった場合は1を返します。アイコンが見つからなければヌルを返します。
[使用例]
|
1.11 SHAppBarMessage関数
[概要]
{ パラメータ }
{ 返値 }
メッセージ依存の値を返します。
[使用例]
ただしここで注意しなければならないのは、シェルはAppBarを登録しても、その表示領域を確保するだけで、その他の動作は全てAppBarの側で実装しなければならない点です。したがって、タスクバーのようなものを作成するにはかなりの作業が必要となります。
|
1.12 SHFileOperation関数
[概要]
{ パラメータ }
{ 返値 }
関数が成功すればゼロ、失敗すれば非ゼロを返します。
[使用例]
|
1.13 SHGetFileInfo関数
[概要]
{ パラメータ }
{ 返値 }
返値はuFlagsに依存します。
[使用例]
|
進め!中級プログラマー 創刊号
本当は今回だけで、拡張シェルオブジェクトも含めた「シェルと仲良くする」を終了させるつもりだったのですが、予想していた以上に作成が難航してしまい、2回に分けて掲載することとなりました。 基ネタがあればすぐ作成できる、という僕の読みは非常に甘かったようです。断片的なネタをまとまった文章に組み立てる難しさを思い知らされてしまいました。 読者の皆さんにとっても(2部構成になったことは)かったるいことと思いますが、どうかご勘弁をお願いします。 シェルを取扱う、拡張する、は32ビット版 Windowsの一つの売りであり、また面白い話題でもありますので、何とか次号でそれなりの形にまとめたいと思います。
ただし、次号発刊日は未定です。今回のでかなり疲れてしまったので少し休養します。(毎日が休養だろ!というお叱りの声が...)まあ、あまり期待しないで適当に待っていて下さい。 |
トップページに戻る |