/// <summary>
        /// 指定したファイルからショートカットを読み込みます。
        /// </summary>
        /// <param name="linkFile">ショートカットを読み込むファイル</param>
        /// <param name="hWnd">このコードを呼び出したオーナーのウィンドウハンドル</param>
        /// <param name="resolveFlags">ショートカット情報の解決に関する動作を表すフラグ</param>
        /// <param name="timeOutMilliseconds">SLR_NO_UIを指定したときのタイムアウト値(ミリ秒)</param>
        /// <exception cref="FileNotFoundException">ファイルが見つかりません。</exception>
        /// <exception cref="COMException">IPersistFileインターフェイスを取得できませんでした。</exception>
        public void Load(string linkFile, IntPtr hWnd, ShellLinkResolveFlags resolveFlags, int timeOutMilliseconds)
        {
            if (!File.Exists(linkFile))
            {
                throw new FileNotFoundException("ファイルが見つかりません。", linkFile);
            }

            // IPersistFileインターフェイスを取得
            IPersistFile persistFile = GetIPersistFile();

            if (persistFile == null)
            {
                throw new COMException("IPersistFileインターフェイスを取得できませんでした。");
            }

            // 読み込み
            persistFile.Load(linkFile, 0x00000000);

            // フラグを処理
            uint flags = (uint)resolveFlags;

            if ((resolveFlags & ShellLinkResolveFlags.SLR_NO_UI) == ShellLinkResolveFlags.SLR_NO_UI)
            {
                flags |= (uint)(timeOutMilliseconds << 16);
            }

            // ショートカットに関する情報を読み込む
            if (isUnicodeEnvironment)
            {
                shellLinkW.Resolve(hWnd, flags);
            }
            else
            {
                shellLinkA.Resolve(hWnd, flags);
            }

            // カレントファイルを指定
            currentFile = linkFile;
        }
 /// <summary>
 /// 指定したファイルからショートカットを読み込みます。
 /// </summary>
 /// <param name="linkFile">ショートカットを読み込むファイル</param>
 /// <param name="hWnd">このコードを呼び出したオーナーのウィンドウハンドル</param>
 /// <param name="resolveFlags">ショートカット情報の解決に関する動作を表すフラグ</param>
 /// <param name="timeOut">SLR_NO_UIを指定したときのタイムアウト値(ミリ秒)</param>
 /// <exception cref="FileNotFoundException">ファイルが見つかりません。</exception>
 /// <exception cref="COMException">IPersistFileインターフェイスを取得できませんでした。</exception>
 public void Load(string linkFile, IntPtr hWnd, ShellLinkResolveFlags resolveFlags, TimeSpan timeOut)
 {
     Load(linkFile, hWnd, resolveFlags, (int)timeOut.TotalMilliseconds);
 }
 /// <summary>
 /// 指定したファイルからショートカットを読み込みます。
 /// </summary>
 /// <param name="linkFile">ショートカットを読み込むファイル</param>
 /// <param name="hWnd">このコードを呼び出したオーナーのウィンドウハンドル</param>
 /// <param name="resolveFlags">ショートカット情報の解決に関する動作を表すフラグ</param>
 /// <exception cref="FileNotFoundException">ファイルが見つかりません。</exception>
 /// <exception cref="COMException">IPersistFileインターフェイスを取得できませんでした。</exception>
 public void Load(string linkFile, IntPtr hWnd, ShellLinkResolveFlags resolveFlags)
 {
     Load(linkFile, hWnd, resolveFlags, 1);
 }
        /// <summary>
        /// 指定したファイルからショートカットを読み込みます。
        /// </summary>
        /// <param name="linkFile">ショートカットを読み込むファイル</param>
        /// <param name="hWnd">このコードを呼び出したオーナーのウィンドウハンドル</param>
        /// <param name="resolveFlags">ショートカット情報の解決に関する動作を表すフラグ</param>
        /// <param name="timeOutMilliseconds">SLR_NO_UIを指定したときのタイムアウト値(ミリ秒)</param>
        /// <exception cref="FileNotFoundException">ファイルが見つかりません。</exception>
        /// <exception cref="COMException">IPersistFileインターフェイスを取得できませんでした。</exception>
        public void Load(string linkFile, IntPtr hWnd, ShellLinkResolveFlags resolveFlags, int timeOutMilliseconds)
        {
            if (!File.Exists(linkFile)) throw new FileNotFoundException("ファイルが見つかりません。", linkFile);

            // IPersistFileインターフェイスを取得
            IPersistFile persistFile = GetIPersistFile();

            if (persistFile == null) throw new COMException("IPersistFileインターフェイスを取得できませんでした。");

            // 読み込み
            persistFile.Load(linkFile, 0x00000000);

            // フラグを処理
            uint flags = (uint)resolveFlags;

            if ((resolveFlags & ShellLinkResolveFlags.SLR_NO_UI) == ShellLinkResolveFlags.SLR_NO_UI)
            {
                flags |= (uint)(timeOutMilliseconds << 16);
            }

            // ショートカットに関する情報を読み込む
            if (isUnicodeEnvironment)
            {
                shellLinkW.Resolve(hWnd, flags);
            }
            else
            {
                shellLinkA.Resolve(hWnd, flags);
            }

            // カレントファイルを指定
            currentFile = linkFile;
        }
 /// <summary>
 /// 指定したファイルからショートカットを読み込みます。
 /// </summary>
 /// <param name="linkFile">ショートカットを読み込むファイル</param>
 /// <param name="hWnd">このコードを呼び出したオーナーのウィンドウハンドル</param>
 /// <param name="resolveFlags">ショートカット情報の解決に関する動作を表すフラグ</param>
 /// <param name="timeOut">SLR_NO_UIを指定したときのタイムアウト値(ミリ秒)</param>
 /// <exception cref="FileNotFoundException">ファイルが見つかりません。</exception>
 /// <exception cref="COMException">IPersistFileインターフェイスを取得できませんでした。</exception>
 public void Load(string linkFile, IntPtr hWnd, ShellLinkResolveFlags resolveFlags, TimeSpan timeOut)
 {
     Load(linkFile, hWnd, resolveFlags, (int)timeOut.TotalMilliseconds);
 }
 /// <summary>
 /// 指定したファイルからショートカットを読み込みます。
 /// </summary>
 /// <param name="linkFile">ショートカットを読み込むファイル</param>
 /// <param name="hWnd">このコードを呼び出したオーナーのウィンドウハンドル</param>
 /// <param name="resolveFlags">ショートカット情報の解決に関する動作を表すフラグ</param>
 /// <exception cref="FileNotFoundException">ファイルが見つかりません。</exception>
 /// <exception cref="COMException">IPersistFileインターフェイスを取得できませんでした。</exception>
 public void Load(string linkFile, IntPtr hWnd, ShellLinkResolveFlags resolveFlags)
 {
     Load(linkFile, hWnd, resolveFlags, 1);
 }