/// <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; } }
/// <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; }