2006 年 10 月 9 日 23 時 22 分

Windows のショートカット


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


[写真] [写真]


Windows にも基本的なリンク機能が存在する。
これは「ショートカット」と呼ばれるファイルだ。

・プログラム情報ファイル (*.pif)
・ショートカット (*.lnk)
・インターネットショートカット (*.url)

これらのショートカットは、ファイルの一種であり、
それぞれ専用の拡張子を持つ。

プログラム情報ファイルは、MS-DOS ファイル用であり、
実行時に割り当てるメモリ量などの情報を内部に持つ。

ショートカットは、ファイルやフォルダなど
任意のパスやパラメータを内部に持つ。
これが一番一般的なショートカットファイルである。

インターネットショートカットは、URL を内部に持つ。

Windows 上でこれらショートカットを開くと、
ショートカット自身ではなく、
ショートカットが示すファイルやプログラムが開かれる。
これが、Windows の基本的なリンク機能だ。

これは、UNIX のシンボリックリンクに似ているが、
ショートカットには、シンボリックリンクと違う大きな点がある。

UNIX のリンクは、ファイルシステムの持つ機能だが、
Windows のショートカットは Windows シェルの機能である。

Windows は、MS-DOS から発展したプログラムだ。
MS-DOS では、FAT ファイルシステムを利用していたが、
このファイルシステムにはリンク機能が存在しない。

初期の Windows も FAT ファイルシステムを使っていた。
そのため、ファイルシステム規模でリンク機能は使えず、
Windows 上で、独自にリンク機能を搭載する必要があった。

これが大きな違いであり、制約となっているのだ。

通常、プログラムがファイルにアクセスする際は、
シェルを介さず、ファイルシステムを直接利用する。
そのため、プログラムからファイルを扱う際には、
ショートカットの機能を利用することができないのだ。

もし、プログラムからショートカットを開くと、
ショートカットファイル自身を開くことになってしまう。

ちょいと試してみよう。

まずは、テキストファイル「file.txt」を作成する。
ファイルの内容は何でも良い。適当に書いておく。
そして、そのファイルへのショートカットを作成する。
これを「file.txt.lnk」という名前にしておこう。

Windows のエクスプローラ上では、
ショートカットの拡張子は常に表示されないため、
ショートカットは「file.txt」と表示される。
アイコンに小さな矢印が重なるので識別できる。

まずは、これをダブルクリックで開いてみる。
どちらを開いても、ちゃんと「file.txt」が開くはずだ。
ダブルクリックは、Windows シェルに対する操作なので、
ちゃんとショートカットが追跡されるのだ。

では、これをプログラムから開いてみよう。

コマンドプロンプトを開いて、
file.txt のあるフォルダに移動し、
type コマンドを使ってファイル内容を表示してみよう。

    >type file.txt
    ファイルの内容
    >type file.txt.lnk
    L…(意味不明なバイナリデータ)

どうだろう。type file.txt とした場合、
file.txt の内容が表示されたが、
type file.txt.lnk とすると、
全く読めないデータが画面に表示された。

分かりにくいかもしれないので、
type コマンドの代わりに、メモ帳を起動してみよう。

    >notepad file.txt
    >notepad file.txt.lnk

何が表示されただろうか。

メモ帳が 2 つ起動するが、
file.txt.lnk の方は全く読めないはずだ。

このように、ショートカットは、
プログラムやファイルシステムから見ると、
ただのファイルを変わらないのである。

プログラムの中には、ドラッグドロップで
ファイルを開いたり挿入できたりするものがあるが、
Windows シェルは、ファイルをドラッグする際に、
ショートカットをリンク先に自動的に置き換えてくれない。

なので、注意深く作成されたプログラムでなければ、
ショートカットファイルをドロップすると、
ショートカット自身を開いてしまうことになる。

例えば、メモ帳はショートカットを開いてしまう。
ペイントや Word は大丈夫のようだ。

このように、Windows のショートカットは、
プログラマ泣かせの機能なのである。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.