3

いくつかのフレームワークと言語には、ターゲットやプロパティなどに到達するために、lnkファイルパーサー(C#、Java、Python、確かに無数の他のもの)があるようです。上記の機能を持たない別の言語でlnkを解析したい。このためのWindowsAPIはありますか?

4

6 に答える 6

3

lnkファイル形式を説明するMicrosoftの公式ドキュメントはありませんが、フォーマットの説明があるドキュメントがいくつかあります。そのうちの1つを次に示します。ショートカットファイル形式(.lnk)

APIに関しては、 IShellLinkインターフェイスを使用できます

于 2010-08-09T15:09:00.387 に答える
2

これは古い投稿ですが、仕様全体を処理するlnk処理のC#実装は次のとおりです

https://github.com/EricZimmerman/Lnk

詳細とコマンドラインツールはこちら

http://binaryforay.blogspot.com/2016/02/introducing-lecmd.html

于 2016-02-12T21:50:55.123 に答える
1

JAFAT Archive of ForensicsAnalysisToolsプロジェクトでlnkファイルパーサーを使用するだけです。

http://jafat.sourceforge.netでlnk-parse-1.0.plを参照してください。

依存関係はないようです。構文は単純で、リンクファイルは標準出力で単純なテキストになり、Linuxで使用できるようになります。

于 2013-11-08T08:40:28.023 に答える
0

WSH関連のコンポーネントを使用すること.lnkは、XP以降のWindowsシステムでほとんどの言語のファイルを読み取るための最も便利なオプションのようです。COM環境にアクセスして、WScript.Shellコンポーネントをインスタンス化するだけです。(勝利時には、シェルへの参照は通常参照することを忘れないでくださいexplorer.exe

次のスニペットは、たとえばPHPで処理を実行します:(PHP 5、COMオブジェクトを使用)

<?php
$wsh=new COM('WScript.Shell'); // the wsh object

// please note $wsh->CreateShortcut method actually
// DOES THE READING, if the file already exists. 
$lnk=$wsh->CreateShortcut('./Shortcut.lnk');
echo $lnk->TargetPath,"\n";

代わりに、これはVBScriptでも同じことを行います。

set sh = WScript.CreateObject("WScript.Shell")
set lnk = sh.CreateShortcut("./Shortcut.lnk")
MsgBox lnk.TargetPath

この分野のほとんどの例はVB/VBSで書かれていますが、COMとWSHの相互作用を何らかの形でサポートするすべての言語でうまく翻訳されます。

この簡単なチュートリアル.lnkは、最も重要なもの以外のファイルの最も興味深いプロパティのいくつかをリストして例示しているので、便利な場合がありTargetPath。それらは:

  • WindowStyle
  • Hotkey
  • IconLocation
  • Description
  • WorkingDirectory
于 2011-11-20T02:42:22.100 に答える
0

@Giorgi:実際に、lnkファイルの公式仕様があります。少なくとも次のように主張されています 。http: //msdn.microsoft.com/en-us/library/dd871305%28PROT.10%29.aspx ただし、一部のファイルについては理由は、リンクが無効になっているようで、(45Megs)ドキュメントパッケージ全体(Application_Services_and_NET_Framework.zip)をダウンロードした後、ファイルMS-SHLLINK.pdfが含まれていないようです。

しかし、これは本当に驚くべきことですか?

ファイル形式を取得したら、それを読み取るためのコードを書くのはそれほど難しくないはずです。

于 2011-06-10T10:49:11.957 に答える
0

https://github.com/jmaton/ClearRecentLinksにある私の「ClearRecentLinks」プロジェクトからのShell32APIを使用したC#コードを次に示します。

これを使用するには、C#プロジェクトがc:\ windows \ system32\shell32.dllを参照する必要があります

            string linksPath = "c:\some\folder";
            Type shell32Type = Type.GetTypeFromProgID("Shell.Application");
            Object shell = Activator.CreateInstance(shell32Type);
            Shell32.Folder s32Folder = (Shell32.Folder)shell32Type.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, shell, new object[] { linksPath });
            foreach (Shell32.FolderItem2 item in s32Folder.Items())
            {
                if (item.IsLink)
                {
                    var link = (Shell32.ShellLinkObject)item.GetLink;
                    if (link != null && !String.IsNullOrEmpty(link.Target.Path))
                    {
                        string linkTarget = link.Target.Path.ToLower();
                        // do something... 
                    }
                }
            }
于 2021-07-23T19:08:38.860 に答える