Example #1
0
        /// <summary>Loads a shortcut from the specified file, and allows flags controlling
        /// the UI behaviour if the shortcut's target isn't found to be set.  If
        /// no SLR_NO_UI is specified, you can also specify a timeout.</summary>
        /// <param name="linkFile">The shortcut file (.lnk) to load</param>
        /// <param name="hWnd">The window handle of the application's UI, if any</param>
        /// <param name="resolveFlags">Flags controlling resolution behaviour</param>
        /// <param name="timeOut">Timeout if SLR_NO_UI is specified, in ms.</param>
        public void Open(string linkFile, IntPtr hWnd, ShellLinkResolutionBehavior resolutionBehavior, ushort timeOut)
        {
            uint flags;

            if ((resolutionBehavior & ShellLinkResolutionBehavior.NoUI) == ShellLinkResolutionBehavior.NoUI)
            {
                flags = (uint)((int)resolutionBehavior | (timeOut << 16));
            }
            else
            {
                flags = (uint)resolutionBehavior;
            }

            if (linkA == null)
            {
                ((IPersistFile)linkW).Load(linkFile, 0);                 //STGM_DIRECT)
                linkW.Resolve(hWnd, flags);
                this.shortcutFile = linkFile;
            }
            else
            {
                ((IPersistFile)linkA).Load(linkFile, 0);                 //STGM_DIRECT)
                linkA.Resolve(hWnd, flags);
                this.shortcutFile = linkFile;
            }
        }
Example #2
0
        /// <summary>
        /// Loads a shortcut from the specified file, and allows flags controlling
        /// the UI behaviour if the shortcut's target isn't found to be set.  If
        /// no SLR_NO_UI is specified, you can also specify a timeout.
        /// </summary>
        /// <param name="linkFile">The shortcut file (.lnk) to load</param>
        /// <param name="hWnd">The window handle of the application's UI, if any</param>
        /// <param name="resolveFlags">Flags controlling resolution behaviour</param>
        /// <param name="timeOut">Timeout if SLR_NO_UI is specified, in ms.</param>
        public void Open(
            string linkFile,
            IntPtr hWnd,
            EShellLinkResolveFlags resolveFlags,
            ushort timeOut
            )
        {
            uint flags;

            if ((resolveFlags & EShellLinkResolveFlags.SLR_NO_UI)
                == EShellLinkResolveFlags.SLR_NO_UI)
            {
                flags = (uint)((int)resolveFlags | (timeOut << 16));
            }
            else
            {
                flags = (uint)resolveFlags;
            }

            if (linkA == null)
            {
                ((IPersistFile)linkW).Load(linkFile, 0); //STGM_DIRECT)
                linkW.Resolve(hWnd, flags);
                this.shortcutFile = linkFile;
            }
            else
            {
                ((IPersistFile)linkA).Load(linkFile, 0); //STGM_DIRECT)
                linkA.Resolve(hWnd, flags);
                this.shortcutFile = linkFile;
            }
        }
        /// <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;
        }