最近の記事
- 9/1 - 将棋始めました
- 5/16 - サーバー引っ越し
- 4/24 - 優先順位
- 3/17 - vbNullString と 空文字列 ""
- 3/15 - InputBox 関数の戻り値
- 3/13 - 紙と Excel と VBA
- 3/9 - 未だに Visual Basic 6
- 11/14 - ぼて閉鎖
- 11/9 - 関数オブジェクトの呼び出し
- 9/7 - メソッドとしての関数オブジェクト
Entering Passive Mode
今まで紹介したフォルダの特殊化を利用すると、
色々な場所の特殊フォルダやネットワークプレースを
シェルのフォルダツリーの好きな場所に集めることができる。
例えば、デスクトップやマイドキュメントなどに、
特殊化したフォルダを作成しておけば、
通常のショートカットと同じように使うことができる上に、
エクスプローラでツリー表示した際に、
そのままフォルダを展開できるというメリットがある。
では、幾つか作ってみよう。
シェルの名前空間には、「マイネットワーク」がある。
これも特殊フォルダだ。
確か Windows 2000 以降だったかな。
「ネットワークプレース」の追加という機能が追加され、
ファイルサーバの共有フォルダや FTP サーバ、
HTTP の WEBDAV などのアイコンを登録することができる。
これらのアイコンは、ネットワークプレースと呼ばれ、
好きな名前をつけて登録することができる。
これを使うと、ネットワーク上にある色々なフォルダに、
エクスプローラから簡単にアクセスできるようになるのだ。
シェル名前空間を拡張するためには、
高度なプログラミングと設定が必要になる。
特に、自分が作成した新しい特殊フォルダを、
名前空間の自由な場所に追加するのは大変である。
そのため Windows には、既存のファイルフォルダを
特殊なフォルダとして機能させるための仕組みがある。
これらのフォルダは、基本的にはファイルフォルダなのだが、
エクスプローラ上で表示すると通常の表示とは異なる。
例えば、フォント、タスク、アセンブリ、
インターネット一時キャッシュ、オフラインフォルダ等だ。
ディレクトリとフォルダ。この言葉の違いは何だろうか。
Windows では、主にフォルダという表現が使われているが、
その前身である MS-DOS や UNIX では、
ディレクトリという表現が使われている。
ディレクトリとは、ファイルを分類・整理するため、
複数のファイルをまとめる事ができる入れ物である。
ディレクトリには別のディレクトリも格納できるため、
ファイルを木構造に階層化することができる。
…とまあ、この程度は基礎なので解説するまでもないか。
インストーラやランチャーなどのプログラムでは、
ショートカットを作成する必要に迫られる場合がある。
今度は、ショートカットを作ってみよう。
まずはプロトタイプ宣言。
========== lnkfile.h (partial) ==========
HRESULT ShortcutCreate(const wchar_t *fileName, const wchar_t *target);
========== end of lnkfile.h (partial) ==========
続いて、関数を呼び出す側を作ろう。
プログラムとして実行できるように、
C 言語の起動関数を定義し、
実際にコンパイルして実行してみよう。
起動関数は、program.c で定義することにする。
Visual C++ + Windows 開発専用なので、
Unicode に特化して書いてみよう。
========== program.c ==========
昨日の続き。
最近の言語では、クラスが名前空間で整理されており、
利用側が空間やクラス単位で宣言を取り込むことができる。
C 言語では、関数を使う側のファイルで、
関数のプロトタイプ宣言が含まれたヘッダファイルを、
必要なだけ選択して取り込む必要がある。
そのためには、どの関数がどのヘッダに宣言されているか、
事前にしっておく必要がある。
まあ、片っ端から取り込むことはできるのだが、
それをするとコンパイル時間が増加してしまう。
では、C 言語とWINAPI を使って、
ショートカットファイルを読んでみよう
以前に、C# でショートカットを読んだが、
今日はこれの C 言語版である。
http://mixi.jp/view_diary.pl?id=166475473&owner_id=2300658
前にやったのに、また取り上げるのはちょっと嫌だが、
C# では裏で隠蔽してくれていたことを、
C 言語では全て自力で実装する必要があるため、
ちょうど良い対比となるからいいとするか。
Windows にも基本的なリンク機能が存在する。
これは「ショートカット」と呼ばれるファイルだ。
・プログラム情報ファイル (*.pif)
・ショートカット (*.lnk)
・インターネットショートカット (*.url)
これらのショートカットは、ファイルの一種であり、
それぞれ専用の拡張子を持つ。
プログラム情報ファイルは、MS-DOS ファイル用であり、
実行時に割り当てるメモリ量などの情報を内部に持つ。
UNIX 系のファイルシステムには、
ハードリンクとシンボリックリンクがある。
これらは、ファイルに別名をつける機能である。
同じデータを参照する別名のファイルを作成するので、
ファイルのコピーと異なり、余計な容量を占有しない。
ハードリンクは、ファイルに複数の名前を持たせる機能である。
あるファイルに対してハードリンクを作成することで、
1 つのファイル内容に対して、複数のファイル名が対応する。