12

重複の可能性:
ショートカット フォルダーのターゲットを取得

たとえばC:\TEMP\、ショートカットと呼ばれるtest.dllショートカットがある場合、ショートカットはファイル名につながりますtest.dll

ショートカットからファイル自体へのパス名のみを取得したい。そのため、この関数を別の再帰関数で呼び出して、ハードディスクから別のディレクトリに移動するたびにこの関数を入れています。

たとえば、最初のディレクトリにはC:\TEMPC:\TEMPファイルへのパスのみを取得したいショートカットファイルがあります。テストのためにC:\TEMP、私は今3つのファイルを持っています:

hpwins23.dat
hpwmdl23.dat
hpwmdl23.dat - Shortcut( C:\TEMP\hpwmdl23.dat)

したがって、取得したいのは、この場合は C:\TEMP のショートカットのパス名です

私はこの機能を使用しようとしました:

public string GetShortcutTargetFile(string shortcutFilename)
        {
            string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
            string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);
            Shell shell = new Shell();
            Folder folder = shell.NameSpace(pathOnly);
            if (folder == null)
            {
            }
            else
            {
                FolderItem folderItem = folder.ParseName(filenameOnly);
                if (folderItem != null)
                {
                    Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
                    return link.Path;
                }
            }
            return string.Empty;
        }

しかし、関数を使用してショートカットに到達すると、次の行で例外エラーが発生します。

Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink //The exception is: NotImplementedException: The method or operation is not implemented

解決するにはどうすればよいですか?

これは、完全な例外エラー メッセージです。

System.NotImplementedException
メッセージがキャッチされました = メソッドまたは操作が実装されていません。
ソース= GatherLinks
StackTrace :
at Shell32.FolderItem.get_GetLink()
at GatherLinks.Form1.GetShortcutTargetFile(String shortcutFilename)in
D:\C-Sharp\GatherLinks\GatherLinks\GatherLinks\Form1.cs: line 904
atGatherLinks.Form1.offlinecrawling

4

1 に答える 1

38

ショートカットのターゲット (.lnkファイル拡張子) を取得するには、まず次のCOMオブジェクトが必要です。Windows Script Host Object Model

次に、WshShell(またはWshShellClass) およびIWshShortcutインターフェイスを使用して、ショートカットのターゲットを取得できます。

            string linkPathName = @"D:\Picrofo Autobot.lnk"; // Change this to the shortcut path

            if (System.IO.File.Exists(linkPathName))
            {
             // WshShellClass shell = new WshShellClass();
                WshShell shell = new WshShell(); //Create a new WshShell Interface
                IWshShortcut link = (IWshShortcut)shell.CreateShortcut(linkPathName); //Link the interface to our shortcut

                MessageBox.Show(link.TargetPath); //Show the target in a MessageBox using IWshShortcut
            } 

ありがとう、
これがお役に立てば幸いです:)


Windows Script Host Object Modelプロジェクトに追加するには、次の手順を試してください。

  • [ソリューション エクスプローラー]で、プロジェクト名を右クリックし、[参照の追加] を選択します。
  • ポップアップ ウィンドウから[ COM ] タブを選択します。
  • [コンポーネント名]で、[ Windows スクリプト ホスト オブジェクト モデル]を選択します。
  • [ OK]をクリックします。
于 2012-10-26T01:40:32.777 に答える