A .lnk
Windowsのファイルは、別のファイルへのショートカットを目的とした実際のファイルです。しかし、私は本当に.lnk
ファイル自体。文字通りそうするのは不可能だと思っています。私が何をしようとも、私のアプリケーションはそれがが指しているファイルの内容を開いています(テキストまたは16進エディターにドラッグ/ドロップ、ファイル|ファイルから開くテキストまたは16進エディタなど)
プログラムが指すファイルの代わりに実際に.lnkファイルを開くをプログラムに指示する方法はありますか?
ショートカットを編集するには、最初にショートカットを開く必要があることは明らかですが、これは注意が必要です。 someの場合、コマンドライン引数を使用して、プログラムに強制的にショートカットファイルをロードさせることができます。
"X:\Path\to\program.exe" "X:\my shortcut.lnk"
ただし、リンクターゲットが読み込まれるか、実際のショートカットファイルが読み込まれるかは、プログラムによって異なります。ここにそれらをサポートするいくつかの無料の16進エディタのリスト(順不同)があります:
ダイアログを開くはい
ドラッグアンドドロップいいえ
XVI32 、 Free Hex Editor Neo 、 Tiny Hexer 、 wxHexEditor 、 Hex-Editor MX =、 Frhed
ダイアログを開くいいえ
ドラッグアンドドロップはい
ショートカットファイルのコンテンツを読み込めない場合は、 コマンドプロンプト を開き、.lnk
ファイルの名前を.lne
などの存在しない別の拡張子に変更します。
cd /d "X:\Folder\containing\shortcuts"
ren "my shortcut.lnk" "my shortcut.lne"
複数のファイルがある場合は、それらすべての名前を一度に変更することもできます。
ren *.lnk *.lne
その後、これらのショートカットを通常のファイルと同様に扱うことができます。完了したら、名前を変更して、通常の機能を復元してください。
ショートカット、または シェルリンク には、特定の リンクターゲット にアクセスするために使用されるメタデータ情報が含まれています。これは、Windowsシェルによって解析および解釈されます。公式ドキュメントから:
シェルリンク構造は、エンドユーザーに役立つ次のようなさまざまな情報を格納します。
アプリケーションの起動に使用できるキーボードショートカット。
説明コメント。
アプリケーションの動作を制御する設定。
追加のデータセクション に保存されるオプションのデータ。
ショートカットはバイナリファイルとして保存され、標準のテキストエディタを使用して編集することはできません。典型的な.lnk
ファイルは、内部的には次のようになります。
00000000 4C 00 00 00 01 14 02 00 00 00 00 00 C0 00 00 00 L...........À...
00000010 00 00 00 46 DC 03 00 02 20 00 00 00 C6 EF 52 BE ...FÜ... ...ÆïR¾
00000020 10 04 CA 01 C6 EF 52 BE 10 04 CA 01 60 45 8A 67 ..Ê.ÆïR¾..Ê.`EŠg
00000030 20 04 CA 01 00 9A 04 00 00 00 00 00 01 00 00 00 .Ê..š..........
最初の20バイトは常に次のバイトです。
4C 00 00 00 01 14 02 00 00 00 00 00 C0 00 00 00 00 00 00 46
私はこれを試しましたが、Windows 8.1で動作します。
メモ帳でLNK
ファイルを開く:
Open
ダイアログから開くと、メモ帳はEXE
ファイルが指すLNK
ファイルを開きます。LNK
ファイルを HxD hex editor で開く:
File
→Open
)コマンドプロンプトを使用してLNK
ファイルを開く:
LNK
ファイルを含むフォルダーに移動し、次のコマンドを入力します:TYPE SHORTCUTNAME.LNK
ほぼすべてのプログラムでLNK
ファイルを開く:
PROGRAM_NAME.EXE "path to LNK file"
.lnkファイルの要点は、Windowsが別のファイルへのリンクとして扱うことです。そのため、編集するのは困難です。
なぜ編集したいのかを説明すると役立つでしょう。 .lnkファイルの設定を変更するには、右クリックしてPropertiesを選択します。
本当に編集したいなら、特別なツールが必要です。次のようなものがあります。
注:私はこれらのいずれも試していません。Googledで試してみました。
更新:
なぜこれまで考えなかったのかわかりませんが、PowerShellを使用してプロパティを編集できます。 From スタックオーバーフローに関するこの以前の回答 :
Copy-Item $sourcepath $destination ## Get the lnk we want to use as a template
$Shell = New-Object -COM WScript.Shell
$shortcut = $Shell.CreateShortcut($destination) ## Open the lnk
$shortcut.TargetPath = "C:\path\to\new\exe.exe" ## Make changes
$shortcut.Description = "Our new link" ## This is the "Comment" field
$shortcut.Save() ## Save
これはシェルCOMオブジェクトを使用するので、WSHまたはOfficeのVBAでもこれを実行できます。
.LNKファイルはシェルによって解釈されます。コマンドプロンプトを開き、引数として.LNKファイルを使用して編集ツール(たとえば、メモ帳としましょう)を呼び出すと、シェルがバイパスされ、.LNKファイル自体のコンテンツが開きます。
notepad.exe shortcut.lnk
このようなファイルを頻繁に編集する理由がある場合は、notepad.exeへのショートカットをSendToフォルダーに追加します(Win 7の場合:C:\ Users\USER\AppData\Roaming\Microsoft\Windows\SendTo)。これにより、「Send to notepad.exe」がRtから利用可能になります。コンテキストメニューをクリックします。 .inkファイルが開き、編集して、notepad.exeに保存できます。
[〜#〜] cmd [〜#〜]を使用して、リンクファイルをパラメーターとしてプログラムを実行すると、そのパラメーターはそのままプログラムに渡されます。リンクの処理方法を決定するのはプログラム次第です。
私はこれを[〜#〜] frhed [〜#〜]でテストしました。これはフリーウェア(およびポータブル)の16進エディターです。コマンドラインから実行すると、リンクをパラメーターとして渡し、プロンプトが表示されます。 (はい)にリンクされたファイルを開くか、リンク自体(いいえ)、またはキャンセル。
奇妙なことに、[〜#〜] frhed [〜#〜] Fileメニュー内でOpenを使用すると、確認せずにターゲットファイルを開きます。
XP私は[〜#〜] frhed [〜#〜]を私のSendToコンテキストメニューに持っています。 [〜#〜] cmd [〜#〜]と同じように機能します。Win7は似ていると思います(専用アプリケーションにWin7システムを使用し、簡単なテストを行います)。上記のように、しかし私はその構成を台無しにしません)。
.lnkファイルは、Explorer.EXEなどの上位レベルのコンポーネントがそれらに配偶を割り当てるまでの単なるファイルです。下位(NTFS)レベルでは、データストリームを含む通常の構造のままです。特に、コンテンツ全体はfoo.lnk::$DATA
ストリーム。すべての上位レベルのツールがその構文を認識するわけではありません。彼らが奇妙なファイル名だと思ってそれを渡すと、彼らは.lnkの内容を取得します。
例えば。コマンドラインでMORE < foo.lnk::$DATA > con
はデータを出力しますが、少し意味不明です(パーツはバイナリです)。