2009-10-14T20:13:11の更新内容

programming/tips/createlnk/index.wiki.txt

current previous
1,685 1,859
 
${smdncms:keywords,ショートカットファイル,lnk,C#,IShellLink}
${smdncms:keywords,ショートカットファイル,lnk,C#,IShellLink}
 
${smdncms:tags,lang/c#,plat/win,api/com}
${smdncms:tags,lang/c#,plat/win,api/com}
 
*ショートカットファイル(.lnkファイル)を作成する
*ショートカットファイル(.lnkファイル)を作成する
~
IShellLinkインターフェイスを用いることで、ショートカットの作成・読み込みができる。 ここではIShellLinkのラッパークラスとしてShellLinkクラスを作成し、それを使用している。 IShellLinkインターフェイスについては、[[IShellLink Interface.aspx]]を参照のこと。
IShellLinkインターフェイスを用いることで、ショートカットの作成・読み込みができる。 ここではIShellLinkのラッパークラスとして ShellLinkクラスを作成し、それを使用している。 ShellLinkクラスのメソッドの詳細およびその他の関連クラス・インターフェイス等は以下のコードにある通り。 なお、このコードは[[Creating and Modifying Shortcuts:http://www.vbaccelerator.com/home/NET/Code/Libraries/Shell_Projects/Creating_and_Modifying_Shortcuts/article.asp]]を参考にして作成した。 また、ANSI環境下では動作確認していない。
+

          
+
参考までに、Windows Scripting Hostの[[CreateShortcutメソッド:http://msdn.microsoft.com/ja-jp/library/cc364400.aspx]]を使うことでより簡単にショートカットを作成することもできる。
 

        

        
-
なお、Windows Scripting Hostの[[CreateShortcutメソッド:http://msdn.microsoft.com/ja-jp/library/cc364400.aspx]]を使うことでより簡単にショートカットを作成することもできる。
 
#googleadunit
#googleadunit
 

        

        
 
**コード
**コード
 
***使用例
***使用例
 
#code(cs){{
#code(cs){{
~
public static void Main(string[] args)
using System;
-
using System.IO;
-

          
-
namespace SantaMarta.Tips.ShellLink
 
{
{
~
  // 作成先
    class Shortcut
~
  var shortcutPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "電卓.lnk");
    {
-
        static void Main( string[] args )
-
        {
-
            // 作成先
-
            string shortcutPath = Path.Combine( Environment.GetFolderPath( Environment.SpecialFolder.Desktop ), "電卓.lnk" );
-

          
-
            // ショートカットを作成
-
            ShellLink shortcut = new ShellLink();
-

          
-
            shortcut.Description = "電卓のショートカットです。";
-
            shortcut.TargetPath = @"%SystemRoot%\System32\calc.exe";
-
            shortcut.DisplayMode = ShellLink.ShellLinkDisplayMode.Normal;
-

          
-
            shortcut.Save( shortcutPath );
-

          
-
            Console.WriteLine( "{0}を作成しました。", shortcut.CurrentFile );
 

        

        
~
  // ショートカットを作成する
            shortcut.Dispose();
+
  using {
+
    shortcut.Description = "電卓のショートカットです。";
+
    shortcut.TargetPath = @"%SystemRoot%\System32\calc.exe";
+
    shortcut.ShowCommand = SW.NORMAL;
 

        

        
~
    shortcut.Save(shortcutPath);
            shortcut = null;
 

        

        
~
    Console.WriteLine("{0}を作成しました。", shortcut.CurrentFile);
            // ショートカットを読み込み
~
  }
            shortcut = new ShellLink( shortcutPath );
-

          
-
            Console.WriteLine( "{0}を読み込みます。", shortcut.CurrentFile );
-
            Console.WriteLine( "ターゲット: {0}", shortcut.TargetPath );
-
            Console.WriteLine( "説明: {0}", shortcut.Description );
-

          
-
            shortcut.Dispose();
 

        

        
~
  // 作成したショートカットを読み込む
            shortcut = null;
~
  using {
        }
~
    Console.WriteLine("ファイル: {0}", shortcut.CurrentFile);
    }
+
    Console.WriteLine("ターゲット: {0}", shortcut.TargetPath);
+
    Console.WriteLine("説明: {0}", shortcut.Description);
+
  }
 
}
}
 
}}
}}
 

        

        
 
#prompt(出力例){{
#prompt(出力例){{
 
C:\Documents and Settings\--------\デスクトップ\電卓.lnkを作成しました。
C:\Documents and Settings\--------\デスクトップ\電卓.lnkを作成しました。
~
ファイル: C:\Documents and Settings\--------\デスクトップ\電卓.lnk
C:\Documents and Settings\--------\デスクトップ\電卓.lnkを読み込みます。
 
ターゲット: C:\WINDOWS\system32\calc.exe
ターゲット: C:\WINDOWS\system32\calc.exe
 
説明: 電卓のショートカットです。
説明: 電卓のショートカットです。
 
Press any key to continue
Press any key to continue
 
}}
}}
 

        

        
 
***実装
***実装
+
このコードは[[Creating and Modifying Shortcuts:http://www.vbaccelerator.com/home/NET/Code/Libraries/Shell_Projects/Creating_and_Modifying_Shortcuts/article.asp]]を参考にして作成した。 ANSI環境下での動作も考慮した実装になっているが、確認はしていない。
+

          
+
:2009-10-14|現在のファイルパスをIPersistFileから取得するように修正
+
IDisposeの実装を修正
+
ushort<->Keysの変換処理の誤りを修正
+
System.Runtime.InteropServices.FILETIMEの代わりにSystem.Runtime.InteropServices.ComTypes.FILETIMEを使うように修正
+

          
 
#code(cs){{
#code(cs){{
 
using System;
using System;
-
using System.IO;
-
using System.Text;
 
using System.ComponentModel;
using System.ComponentModel;
+
using System.IO;
 
using System.Runtime.InteropServices;
using System.Runtime.InteropServices;
+
using System.Runtime.InteropServices.ComTypes;
+
using System.Text;
 
using System.Windows.Forms;
using System.Windows.Forms;
 

        

        
~
using ComTypes = System.Runtime.InteropServices.ComTypes;
namespace SantaMarta.Tips.ShellLink
-
{
-
    #region "COM Interop"
-

          
-
    /// <summary>
-
    /// ShellLink コクラス 
-
    /// </summary>
-
    [ComImport]
-
    [Guid("00021401-0000-0000-C000-000000000046")]
-
    [ClassInterface(ClassInterfaceType.None)]
-
    internal class ShellLinkObject {}
-

          
-
    #region "Unicode環境用"
-

          
-
    /// <summary>
-
    /// IShellLinkWインターフェイス
-
    /// </summary>
-
    [ComImport]
-
    [Guid("000214F9-0000-0000-C000-000000000046")]
-
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
-
    internal interface IShellLinkW
-
    {
-
        void GetPath
-
            (
-
            [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile,
-
            int cch,
-
            [MarshalAs(UnmanagedType.Struct)] ref WIN32_FIND_DATAW pfd,
-
            uint fFlags
-
            );
 

        

        
~
namespace Smdn.Windows.UserInterfaces.Shells {
        void GetIDList( out IntPtr ppidl );
~
  /*
            
~
   * http://msdn.microsoft.com/en-us/library/bb774950%28VS.85%29.aspx
        void SetIDList( IntPtr pidl );
+
   */
+
  public class ShellLink : IDisposable {
+
    public string CurrentFile {
+
      get
+
      {
+
        string file;
 

        

        
~
        PersistFile.GetCurFile(out file);
        void GetDescription( [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cch );
 

        

        
~
        return file;
        void SetDescription( [MarshalAs(UnmanagedType.LPWStr)] string pszName );
+
      }
+
    }
 

        

        
~
    public string TargetPath {
        void GetWorkingDirectory( [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cch );
+
      get
+
      {
+
        CheckDisposed();
 

        

        
~
        var targetPath = CreatePathStringBuffer();
        void SetWorkingDirectory( [MarshalAs(UnmanagedType.LPWStr)] string pszDir );
 

        

        
~
        if {
        void GetArguments( [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cch );
+
          var data = new WIN32_FIND_DATAW();
 

        

        
~
          shellLinkW.GetPath(targetPath, targetPath.Capacity, ref data, SLGP_FLAGS.UNCPRIORITY);
        void SetArguments( [MarshalAs(UnmanagedType.LPWStr)] string pszArgs );
+
        }
+
        else {
+
          var data = new WIN32_FIND_DATAA();
 

        

        
~
          shellLinkA.GetPath(targetPath, targetPath.Capacity, ref data, SLGP_FLAGS.UNCPRIORITY);
        void GetHotkey( out ushort pwHotkey );
+
        }
+
        
+
        return targetPath.ToString();
+
      }
+
      set
+
      {
+
        CheckDisposed();
+

          
+
        if
+
          shellLinkW.SetPath(value);
+
        else
+
          shellLinkA.SetPath(value);
+
      }
+
    }
 

        

        
~
    public string WorkingDirectory {
        void SetHotkey( ushort wHotkey );
+
      get
+
      {
+
        CheckDisposed();
+

          
+
        var workingDirectory = CreatePathStringBuffer();
+

          
+
        if
+
          shellLinkW.GetWorkingDirectory(workingDirectory, workingDirectory.Capacity);
+
        else
+
          shellLinkA.GetWorkingDirectory(workingDirectory, workingDirectory.Capacity);
+

          
+
        return workingDirectory.ToString();
+
      }
+
      set
+
      {
+
        CheckDisposed();
+

          
+
        if
+
          shellLinkW.SetWorkingDirectory(value);
+
        else
+
          shellLinkA.SetWorkingDirectory(value);
+
      }
+
    }
 

        

        
~
    public string Arguments {
        void GetShowCmd( out int piShowCmd );
+
      get
+
      {
+
        CheckDisposed();
+

          
+
        var arguments = CreatePathStringBuffer();
+

          
+
        if
+
          shellLinkW.GetArguments(arguments, arguments.Capacity);
+
        else
+
          shellLinkA.GetArguments(arguments, arguments.Capacity);
+

          
+
        return arguments.ToString();
+
      }
+
      set
+
      {
+
        CheckDisposed();
+

          
+
        if
+
          shellLinkW.SetArguments(value);
+
        else
+
          shellLinkA.SetArguments(value);
+
      }
+
    }
 

        

        
~
    public string Description {
        void SetShowCmd( int iShowCmd );
+
      get
+
      {
+
        CheckDisposed();
+

          
+
        var description = CreatePathStringBuffer();
+

          
+
        if
+
          shellLinkW.GetDescription(description, description.Capacity);
+
        else
+
          shellLinkA.GetDescription(description, description.Capacity);
+

          
+
        return description.ToString();
+
      }
+
      set
+
      {
+
        CheckDisposed();
+

          
+
        if
+
          shellLinkW.SetDescription(value);
+
        else
+
          shellLinkA.SetDescription(value);
+
      }
+
    }
 

        

        
~
    public IconLocation IconLocation {
        void GetIconLocation
~
      get
            (
~
      {
            [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath,
~
        CheckDisposed();
            int cch,
~

          
            out int piIcon
~
        var iconFileBuffer = CreatePathStringBuffer();
            );
+
        int iconIndex;
+

          
+
        if
+
          shellLinkW.GetIconLocation(iconFileBuffer, iconFileBuffer.Capacity, out iconIndex);
+
        else
+
          shellLinkA.GetIconLocation(iconFileBuffer, iconFileBuffer.Capacity, out iconIndex);
+

          
+
        return new IconLocation(iconFileBuffer.ToString(), iconIndex);
+
      }
+
      set
+
      {
+
        CheckDisposed();
+

          
+
        if
+
          shellLinkW.SetIconLocation(value.File, value.Index);
+
        else
+
          shellLinkA.SetIconLocation(value.File, value.Index);
+
      }
+
    }
 

        

        
~
    public SW ShowCommand {
        void SetIconLocation
~
      get
            (
~
      {
            [MarshalAs(UnmanagedType.LPWStr)] string pszIconPath,
~
        CheckDisposed();
            int iIcon
~

          
            );
+
        SW showCmd;
+

          
+
        if
+
          shellLinkW.GetShowCmd(out showCmd);
+
        else
+
          shellLinkA.GetShowCmd(out showCmd);
+

          
+
        return showCmd;
+
      }
+
      set
+
      {
+
        CheckDisposed();
+

          
+
        if
+
          shellLinkW.SetShowCmd(value);
+
        else
+
          shellLinkA.SetShowCmd(value);
+
      }
+
    }
 

        

        
~
    public Keys HotKey {
        void SetRelativePath
~
      get
            (
~
      {
            [MarshalAs(UnmanagedType.LPWStr)] string pszPathRel,
~
        CheckDisposed();
            uint dwReserved
~

          
            );
+
        ushort hotKey;
+

          
+
        if
+
          shellLinkW.GetHotkey(out hotKey);
+
        else
+
          shellLinkA.GetHotkey(out hotKey);
+

          
+
        return TranslateKeyCode(hotKey);
+
      }
+
      set
+
      {
+
        CheckDisposed();
+

          
+
        var newHotKey = TranslateKeyCode(value);
+

          
+
        if
+
          shellLinkW.SetHotkey(newHotKey);
+
        else
+
          shellLinkA.SetHotkey(newHotKey);
+
      }
+
    }
 

        

        
~
    private IPersistFile PersistFile {
        void Resolve
~
      get
            (
~
      {
            IntPtr hwnd,
~
        CheckDisposed();
            uint fFlags
~

          
            );
+
        var ret =
+
          ? shellLinkW as IPersistFile
+
          : shellLinkA as IPersistFile;
+

          
+
        if
+
          throw new COMException("cannot create IPersistFile");
+
        else
+
          return ret;
+
      }
+
    }
 

        

        
~
    public ShellLink()
        void SetPath( [MarshalAs(UnmanagedType.LPWStr)] string pszFile );
+
      : this(null)
+
    {
 
    }
    }
 

        

        
~
    public ShellLink(string linkFile)
    /// <summary>
-
    /// WIN32_FIND_DATAW 構造体
-
    /// </summary>
-
    [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
-
    internal struct WIN32_FIND_DATAW
 
    {
    {
~
      try {
        public const int MAX_PATH = 260;
+
        if {
+
          shellLinkW =;
+
          shellLinkA = null;
+
        }
+
        else {
+
          shellLinkA =;
+
          shellLinkW = null;
+
        }
+
      }
+
      catch {
+
        throw new COMException("cannot create ShellLinkObject");
+
      }
 

        

        
~
      if
        public uint dwFileAttributes;
~
        Load(linkFile);
        public System.Runtime.InteropServices.FILETIME ftCreationTime;
-
        public System.Runtime.InteropServices.FILETIME ftLastAccessTime;
-
        public System.Runtime.InteropServices.FILETIME ftLastWriteTime;
-
        public uint nFileSizeHigh;
-
        public uint nFileSizeLow;
-
        public uint dwReserved0;
-
        public uint dwReserved1;
-
        
-
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
-
        public string cFileName;
-
        
-
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
-
        public string cAlternateFileName;
 
    }
    }
 

        

        
~
    ~ShellLink()
    #endregion
~
    {

          
~
      Dispose(false);
    #region "ANSI環境用"
+
    }
 

        

        
~
    public void Dispose()
    /// <summary>
-
    /// IShellLinkAインターフェイス
-
    /// </summary>
-
    [ComImport]
-
    [Guid("000214EE-0000-0000-C000-000000000046")]
-
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
-
    internal interface IShellLinkA
 
    {
    {
~
      Dispose(true);
        void GetPath
~
      GC.SuppressFinalize(this);
            (
~
    }
            [Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszFile,
-
            int cch,
-
            [MarshalAs(UnmanagedType.Struct)] ref WIN32_FIND_DATAA pfd,
-
            uint fFlags
-
            );
 

        

        
~
    protected virtual void Dispose(bool disposing)
        void GetIDList( out IntPtr ppidl );
~
    {
            
~
      if {
        void SetIDList( IntPtr pidl );
+
        Marshal.ReleaseComObject(shellLinkW);
+
        shellLinkW = null;
+
      }
+

          
+
      if {
+
        Marshal.ReleaseComObject(shellLinkA);
+
        shellLinkA = null;
+
      }
+
    }
 

        

        
~
    public void Save()
        void GetDescription( [Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszName, int cch );
+
    {
+
      var file = CurrentFile;
 

        

        
~
      if
        void SetDescription( [MarshalAs(UnmanagedType.LPStr)] string pszName );
+
        throw new InvalidOperationException("file name must be specified");
 

        

        
~
      Save(file);
        void GetWorkingDirectory( [Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszDir, int cch );
+
    }
 

        

        
~
    public void Save(string file)
        void SetWorkingDirectory( [MarshalAs(UnmanagedType.LPStr)] string pszDir );
+
    {
+
      CheckDisposed();
 

        

        
~
      if
        void GetArguments( [Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszArgs, int cch );
+
        throw new ArgumentNullException("file");
 

        

        
~
      PersistFile.Save(file, true);
        void SetArguments( [MarshalAs(UnmanagedType.LPStr)] string pszArgs );
+
    }
 

        

        
~
    public void Load(string file)
        void GetHotkey( out ushort pwHotkey );
+
    {
+
      Load(file, IntPtr.Zero, SLR_FLAGS.ANY_MATCH | SLR_FLAGS.NO_UI, 1);
+
    }
 

        

        
~
    [CLSCompliant(false)]
        void SetHotkey( ushort wHotkey );
+
    public void Load(string file, IntPtr hWnd, SLR_FLAGS flags)
+
    {
+
      Load(file, hWnd, flags, 1);
+
    }
 

        

        
~
    [CLSCompliant(false)]
        void GetShowCmd( out int piShowCmd );
+
    public void Load(string file, IntPtr hWnd, SLR_FLAGS flags, TimeSpan timeOut)
+
    {
+
      Load(file, hWnd, flags,;
+
    }
 

        

        
~
    [CLSCompliant(false)]
        void SetShowCmd( int iShowCmd );
+
    public void Load(string file, IntPtr hWnd, SLR_FLAGS flags, int timeoutMilliseconds)
+
    {
+
      CheckDisposed();
 

        

        
~
      if
        void GetIconLocation
~
        throw new FileNotFoundException("file not found", file);
            (
-
            [Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszIconPath,
-
            int cch,
-
            out int piIcon
-
            );
 

        

        
~
      PersistFile.Load(file, 0x00000000);
        void SetIconLocation
-
            (
-
            [MarshalAs(UnmanagedType.LPStr)] string pszIconPath,
-
            int iIcon
-
            );
 

        

        
~
      if
        void SetRelativePath
~
        flags |=;
            (
-
            [MarshalAs(UnmanagedType.LPStr)] string pszPathRel,
-
            uint dwReserved
-
            );
 

        

        
~
      if
        void Resolve
~
        shellLinkW.Resolve(hWnd, flags);
            (
~
      else
            IntPtr hwnd,
~
        shellLinkA.Resolve(hWnd, flags);
            uint fFlags
~
    }
            );
 

        

        
~
    private static StringBuilder CreatePathStringBuffer()
        void SetPath( [MarshalAs(UnmanagedType.LPStr)] string pszFile );
+
    {
+
      return new StringBuilder(Consts.MAX_PATH, Consts.MAX_PATH);
 
    }
    }
 

        

        
~
    private static ushort TranslateKeyCode(Keys key)
    /// <summary>
-
    /// WIN32_FIND_DATAA 構造体
-
    /// </summary>
-
    [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Ansi)]
-
    internal struct WIN32_FIND_DATAA
 
    {
    {
~
      // IShellLink::SetHotkey Method
        public const int MAX_PATH = 260;
+
      //   wHotkey
+
      //     The new keyboard shortcut. The virtual key code is in the low-order byte, and the modifier flags are in the high-order byte.
+
      //     The modifier flags can be a combination of the values specified in the description of the IShellLink::GetHotkey method.
+
      var virtKey  =;
+
      var modifier =;
 

        

        
~
      return;
        public uint     dwFileAttributes;
-
        public System.Runtime.InteropServices.FILETIME ftCreationTime;
-
        public System.Runtime.InteropServices.FILETIME ftLastAccessTime;
-
        public System.Runtime.InteropServices.FILETIME ftLastWriteTime;
-
        public uint     nFileSizeHigh;
-
        public uint     nFileSizeLow;
-
        public uint     dwReserved0;
-
        public uint     dwReserved1;
-
        
-
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
-
        public string cFileName;
-
        
-
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
-
        public string cAlternateFileName;
 
    }
    }
 

        

        
~
    private static Keys TranslateKeyCode(ushort key)
    #endregion
+
    {
+
      // IShellLink::GetHotkey Method
+
      //   pwHotkey
+
      //     The address of the keyboard shortcut. The virtual key code is in the low-order byte, 
+
      //     and the modifier flags are in the high-order byte. The modifier flags can be a combination of the following values.
+
      var virtKey =;
+
      var modifier =;
 

        

        
~
      return virtKey | modifier;
    #endregion
+
    }
 

        

        
~
    private void CheckDisposed()
    /// <summary>
-
    /// ショートカットに関する処理を行うためのクラスです。
-
    /// </summary>
-
    public sealed class ShellLink : IDisposable
 
    {
    {
~
      if
        // IShellLinkインターフェイス
~
        throw new ObjectDisposedException(GetType().FullName);
        private IShellLinkW shellLinkW;
~
    }
        private IShellLinkA shellLinkA;
-

          
-
        // カレントファイル
-
        private string currentFile;
 

        

        
~
    private IShellLinkW shellLinkW = null;
        // 実行環境
~
    private IShellLinkA shellLinkA = null;
        private bool isUnicodeEnvironment;
+
  }
 

        

        
~
  // ShellLink コクラス
        // 各種定数
~
  [CLSCompliant(false), ComImport, ClassInterface(ClassInterfaceType.None), Guid("00021401-0000-0000-C000-000000000046")]
        internal const int MAX_PATH = 260;
+
  public class ShellLinkObject {}
 

        

        
~
  // IShellLinkWインターフェイス
        internal const uint SLGP_SHORTPATH   = 0x0001; // 短い形式(8.3形式)のファイル名を取得する
~
  [CLSCompliant(false), ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("000214F9-0000-0000-C000-000000000046")]
        internal const uint SLGP_UNCPRIORITY = 0x0002; // UNCパス名を取得する
~
  public interface IShellLinkW { // cannot list any base interfaces here
        internal const uint SLGP_RAWPATH     = 0x0004; // 環境変数などが変換されていないパス名を取得する
+
    //HRESULT GetPath([out, size_is(cch)] LPWSTR pszFile, [in] int cch, [in, out, ptr] WIN32_FIND_DATAW *pfd, [in] DWORD fFlags);
+
    void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cch, ref WIN32_FIND_DATAW pfd, SLGP_FLAGS fFlags);
 

        

        
~
    //HRESULT GetIDList([out] LPITEMIDLIST * ppidl);
        #region "[型] ShellLinkDisplayMode列挙型"
+
    void GetIDList(out IntPtr ppidl);
 

        

        
~
    //HRESULT SetIDList([in] LPCITEMIDLIST pidl);
        /// <summary>
~
    void SetIDList(IntPtr pidl);
        /// 実行時のウィンドウの表示方法を表す列挙型です。
-
        /// </summary>
-
        public enum ShellLinkDisplayMode : int
-
        {
-
            /// <summary>通常の大きさのウィンドウで起動します。</summary>
-
            Normal = 1,
 

        

        
~
    //HRESULT GetDescription([out, size_is(cch)] LPWSTR pszName, int cch);
            /// <summary>最大化された状態で起動します。</summary>
~
    void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cch);
            Maximized = 3,
 

        

        
~
    //HRESULT SetDescription([in] LPCWSTR pszName);
            /// <summary>最小化された状態で起動します。</summary>
~
    void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName);
            Minimized = 7,
-
        }
 

        

        
~
    //HRESULT GetWorkingDirectory([out, size_is(cch)] LPWSTR pszDir, int cch);
        #endregion
+
    void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cch);
 

        

        
~
    //HRESULT SetWorkingDirectory([in] LPCWSTR pszDir);
        #region "[型] ShellLinkResolveFlags列挙型"
+
    void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir);
 

        

        
~
    //HRESULT GetArguments([out, size_is(cch)] LPWSTR pszArgs, int cch);
        /// <summary></summary>
~
    void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cch);
        [Flags]
-
        public enum ShellLinkResolveFlags : int
-
        {
-
            /// <summary></summary>
-
            SLR_ANY_MATCH = 0x2,
 

        

        
~
    //HRESULT SetArguments([in] LPCWSTR pszArgs);
            /// <summary></summary>
~
    void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs);
            SLR_INVOKE_MSI = 0x80,
 

        

        
~
    //HRESULT GetHotkey([out] WORD *pwHotkey);
            /// <summary></summary>
~
    void GetHotkey(out ushort pwHotkey);
            SLR_NOLINKINFO = 0x40,
 

        

        
~
    //HRESULT SetHotkey([in] WORD wHotkey);
            /// <summary></summary>
~
    void SetHotkey(ushort wHotkey);
            SLR_NO_UI = 0x1,
 

        

        
~
    //HRESULT GetShowCmd([out] int *piShowCmd);
            /// <summary></summary>
~
    void GetShowCmd(out SW piShowCmd);
            SLR_NO_UI_WITH_MSG_PUMP = 0x101,
 

        

        
~
    //HRESULT SetShowCmd([in] int iShowCmd);
            /// <summary></summary>
~
    void SetShowCmd(SW iShowCmd);
            SLR_NOUPDATE = 0x8,
 

        

        
~
    //HRESULT GetIconLocation([out, size_is(cch)] LPWSTR pszIconPath, [in] int cch, [out] int *piIcon);
            /// <summary></summary>
~
    void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cch, out int piIcon);
            SLR_NOSEARCH = 0x10,
 

        

        
~
    //HRESULT SetIconLocation([in] LPCWSTR pszIconPath, [in] int iIcon);
            /// <summary></summary>
~
    void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon);
            SLR_NOTRACK = 0x20,
 

        

        
~
    //HRESULT SetRelativePath([in] LPCWSTR pszPathRel, [in] DWORD dwReserved);
            /// <summary></summary>
~
    void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, uint dwReserved);
            SLR_UPDATE  = 0x4
-
        }
 

        

        
~
    //HRESULT Resolve([in] HWND hwnd, [in] DWORD fFlags);
        #endregion
+
    void Resolve(IntPtr hwnd, SLR_FLAGS fFlags);
 

        

        
~
    //HRESULT SetPath([in] LPCWSTR pszFile);
        #region "コンストラクション・デストラクション"
+
    void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile);
+
  }
 

        

        
~
  // IShellLinkAインターフェイス
        /// <summary>
~
  [CLSCompliant(false), ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("000214EE-0000-0000-C000-000000000046")]
        /// コンストラクタ
~
  public interface IShellLinkA { // cannot list any base interfaces here
        /// </summary>
~
    //HRESULT GetPath([out, size_is(cch)] LPSTR pszFile, [in] int cch, [in, out, ptr] WIN32_FIND_DATAW *pfd, [in] DWORD fFlags);
        /// <exception cref="COMException">IShellLinkインターフェイスを取得できませんでした。</exception>
~
    void GetPath([Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszFile, int cch, ref WIN32_FIND_DATAA pfd, SLGP_FLAGS fFlags);
        public ShellLink()
-
        {
-
            currentFile = "";
-

          
-
            shellLinkW = null;
-
            shellLinkA = null;
-

          
-
            try
-
            {
-
                if
-
                {
-
                    // Unicode環境
-
                    shellLinkW =;
-

          
-
                    isUnicodeEnvironment = true;
-
                }
-
                else
-
                {
-
                    // Ansi環境
-
                    shellLinkA =;
-

          
-
                    isUnicodeEnvironment = false;
-
                }
-
            }
-
            catch
-
            {
-
                throw new COMException( "IShellLinkインターフェイスを取得できませんでした。" );
-
            }
-
        }
 

        

        
~
    //HRESULT GetIDList([out] LPITEMIDLIST * ppidl);
        /// <summary>
~
    void GetIDList(out IntPtr ppidl);
        /// コンストラクタ
-
        /// </summary>
-
        /// <param name="linkFile">ショートカットファイル</param>
-
        public ShellLink( string linkFile ) : this()
-
        {
-
            Load( linkFile );
-
        }
 

        

        
~
    //HRESULT SetIDList([in] LPCITEMIDLIST pidl);
        /// <summary>
~
    void SetIDList(IntPtr pidl);
        /// デストラクタ
-
        /// </summary>
-
        ~ShellLink()
-
        {
-
            Dispose();            
-
        }
 

        

        
~
    //HRESULT GetDescription([out, size_is(cch)] LPSTR pszName, int cch);
        /// <summary>
~
    void GetDescription([Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszName, int cch);
        /// このインスタンスが使用しているリソースを解放します。
-
        /// </summary>
-
        public void Dispose()
-
        {
-
            if 
-
            {
-
                Marshal.ReleaseComObject( shellLinkW );
-
                shellLinkW = null;
-
            }
-

          
-
            if
-
            {
-
                Marshal.ReleaseComObject( shellLinkA );
-
                shellLinkA = null;
-
            }
-
        }
 

        

        
~
    //HRESULT SetDescription([in] LPCSTR pszName);
        #endregion
+
    void SetDescription([MarshalAs(UnmanagedType.LPStr)] string pszName);
 

        

        
~
    //HRESULT GetWorkingDirectory([out, size_is(cch)] LPSTR pszDir, int cch);
        #region "プロパティ"
+
    void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszDir, int cch);
 

        

        
~
    //HRESULT SetWorkingDirectory([in] LPCSTR pszDir);
        /// <summary>
~
    void SetWorkingDirectory([MarshalAs(UnmanagedType.LPStr)] string pszDir);
        /// カレントファイル。
-
        /// </summary>
-
        public string CurrentFile
-
        {
-
            get { return currentFile; }
-
        }
 

        

        
~
    //HRESULT GetArguments([out, size_is(cch)] LPSTR pszArgs, int cch);
        /// <summary>
~
    void GetArguments([Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszArgs, int cch);
        /// ショートカットのリンク先。
-
        /// </summary>
-
        public string TargetPath
-
        {
-
            get
-
            {        
-
                StringBuilder targetPath = new StringBuilder( MAX_PATH, MAX_PATH );
-
                
-
                if
-
                {
-
                    WIN32_FIND_DATAW data = new WIN32_FIND_DATAW();
-

          
-
                    shellLinkW.GetPath( targetPath, targetPath.Capacity, ref data, SLGP_UNCPRIORITY );
-
                }
-
                else
-
                {
-
                    WIN32_FIND_DATAA data = new WIN32_FIND_DATAA();
-

          
-
                    shellLinkA.GetPath( targetPath, targetPath.Capacity, ref data, SLGP_UNCPRIORITY );
-
                }
-
                
-
                return targetPath.ToString();
-
            }
-
            set
-
            {
-
                if
-
                {
-
                    shellLinkW.SetPath( value );
-
                }
-
                else
-
                {
-
                    shellLinkA.SetPath( value );
-
                }
-
            }
-
        }
 

        

        
~
    //HRESULT SetArguments([in] LPCSTR pszArgs);
        /// <summary>
~
    void SetArguments([MarshalAs(UnmanagedType.LPStr)] string pszArgs);
        /// 作業ディレクトリ。
-
        /// </summary>
-
        public string WorkingDirectory
-
        {
-
            get
-
            {
-
                StringBuilder workingDirectory = new StringBuilder( MAX_PATH, MAX_PATH );
-

          
-
                if
-
                {
-
                    shellLinkW.GetWorkingDirectory( workingDirectory, workingDirectory.Capacity );
-
                }
-
                else
-
                {
-
                    shellLinkA.GetWorkingDirectory( workingDirectory, workingDirectory.Capacity );
-
                }
-

          
-
                return workingDirectory.ToString();
-
            }
-
            set
-
            {
-
                if
-
                {
-
                    shellLinkW.SetWorkingDirectory( value );    
-
                }
-
                else
-
                {
-
                    shellLinkA.SetWorkingDirectory( value );
-
                }
-
            }
-
        }
 

        

        
~
    //HRESULT GetHotkey([out] WORD *pwHotkey);
        /// <summary>
~
    void GetHotkey(out ushort pwHotkey);
        /// コマンドライン引数。
-
        /// </summary>
-
        public string Arguments
-
        {
-
            get
-
            {
-
                StringBuilder arguments = new StringBuilder( MAX_PATH, MAX_PATH );
-

          
-
                if
-
                {
-
                    shellLinkW.GetArguments( arguments, arguments.Capacity );
-
                }
-
                else
-
                {
-
                    shellLinkA.GetArguments( arguments, arguments.Capacity );
-
                }
-

          
-
                return arguments.ToString();
-
            }
-
            set
-
            {
-
                if
-
                {
-
                    shellLinkW.SetArguments( value );    
-
                }
-
                else
-
                {
-
                    shellLinkA.SetArguments( value );
-
                }
-
            }
-
        }
 

        

        
~
    //HRESULT SetHotkey([in] WORD wHotkey);
        /// <summary>
~
    void SetHotkey(ushort wHotkey);
        /// ショートカットの説明。
-
        /// </summary>
-
        public string Description
-
        {
-
            get
-
            {
-
                StringBuilder description = new StringBuilder( MAX_PATH, MAX_PATH );
-

          
-
                if
-
                {
-
                    shellLinkW.GetDescription( description, description.Capacity );
-
                }
-
                else
-
                {
-
                    shellLinkA.GetDescription( description, description.Capacity );
-
                }
-

          
-
                return description.ToString();
-
            }
-
            set
-
            {
-
                if
-
                {
-
                    shellLinkW.SetDescription( value );    
-
                }
-
                else
-
                {
-
                    shellLinkA.SetDescription( value );
-
                }
-
            }
-
        }
 

        

        
~
    //HRESULT GetShowCmd([out] int *piShowCmd);
        /// <summary>
~
    void GetShowCmd(out SW piShowCmd);
        /// アイコンのファイル。
-
        /// </summary>
-
        public string IconFile
-
        {
-
            get
-
            {
-
                int iconIndex = 0;
-
                string iconFile = "";
-

          
-
                GetIconLocation( out iconFile, out iconIndex );
-
                
-
                return iconFile;
-
            }
-
            set
-
            {
-
                int iconIndex = 0;
-
                string iconFile = "";
-

          
-
                GetIconLocation( out iconFile, out iconIndex );
-
                
-
                SetIconLocation( value, iconIndex );
-
            }
-
        }
 

        

        
~
    //HRESULT SetShowCmd([in] int iShowCmd);
        /// <summary>
~
    void SetShowCmd(SW iShowCmd);
        /// アイコンのインデックス。
-
        /// </summary>
-
        public int IconIndex
-
        {
-
            get
-
            {
-
                int iconIndex = 0;
-
                string iconPath = "";
-

          
-
                GetIconLocation( out iconPath, out iconIndex );
-
                
-
                return iconIndex;
-
            }
-
            set
-
            {
-
                int iconIndex = 0;
-
                string iconPath = "";
-

          
-
                GetIconLocation( out iconPath, out iconIndex );
-
                
-
                SetIconLocation( iconPath, value );
-
            }
-
        }
 

        

        
~
    //HRESULT GetIconLocation([out, size_is(cch)] LPSTR pszIconPath, [in] int cch, [out] int *piIcon);
        /// <summary>
~
    void GetIconLocation([Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszIconPath, int cch, out int piIcon);
        /// アイコンのファイルとインデックスを取得する
-
        /// </summary>
-
        /// <param name="iconFile">アイコンのファイル</param>
-
        /// <param name="iconIndex">アイコンのインデックス</param>
-
        private void GetIconLocation( out string iconFile, out int iconIndex )
-
        {
-
            StringBuilder iconFileBuffer = new StringBuilder( MAX_PATH, MAX_PATH );
-
                
-
            if
-
            {
-
                shellLinkW.GetIconLocation( iconFileBuffer, iconFileBuffer.Capacity, out iconIndex );
-
            }
-
            else
-
            {
-
                shellLinkA.GetIconLocation( iconFileBuffer, iconFileBuffer.Capacity, out iconIndex );
-
            }
 

        

        
~
    //HRESULT SetIconLocation([in] LPCSTR pszIconPath, [in] int iIcon);
            iconFile = iconFileBuffer.ToString();
~
    void SetIconLocation([MarshalAs(UnmanagedType.LPStr)] string pszIconPath, int iIcon);
        }
 

        

        
~
    //HRESULT SetRelativePath([in] LPCSTR pszPathRel, [in] DWORD dwReserved);
        /// <summary>
~
    void SetRelativePath([MarshalAs(UnmanagedType.LPStr)] string pszPathRel, uint dwReserved);
        /// アイコンのファイルとインデックスを設定する
-
        /// </summary>
-
        /// <param name="iconFile">アイコンのファイル</param>
-
        /// <param name="iconIndex">アイコンのインデックス</param>
-
        private void SetIconLocation( string iconFile, int iconIndex )
-
        {
-
            if
-
            {
-
                shellLinkW.SetIconLocation( iconFile, iconIndex );
-
            }
-
            else
-
            {
-
                shellLinkA.SetIconLocation( iconFile, iconIndex );
-
            }
-
        }
 

        

        
~
    //HRESULT Resolve([in] HWND hwnd, [in] DWORD fFlags);
        /// <summary>
~
    void Resolve(IntPtr hwnd, SLR_FLAGS fFlags);
        /// 実行時のウィンドウの大きさ。
-
        /// </summary>
-
        public ShellLinkDisplayMode DisplayMode
-
        {
-
            get
-
            {
-
                int showCmd = 0;
-

          
-
                if
-
                {
-
                    shellLinkW.GetShowCmd( out showCmd );    
-
                }
-
                else
-
                {
-
                    shellLinkA.GetShowCmd( out showCmd );
-
                }
-

          
-
                returnshowCmd;
-
            }
-
            set
-
            {
-
                if
-
                {
-
                    shellLinkW.SetShowCmd(;
-
                }
-
                else
-
                {
-
                    shellLinkA.SetShowCmd(;
-
                }
-
            }
-
        }
 

        

        
~
    //HRESULT SetPath([in] LPCSTR pszFile);
        /// <summary>
~
    void SetPath([MarshalAs(UnmanagedType.LPStr)] string pszFile);
        /// ホットキー。
~
  }
        /// </summary>
-
        public Keys HotKey
-
        {
-
            get
-
            {
-
                ushort hotKey = 0;
-

          
-
                if
-
                {
-
                    shellLinkW.GetHotkey( out hotKey );
-
                }
-
                else
-
                {
-
                    shellLinkA.GetHotkey( out hotKey );
-
                }
-

          
-
                returnhotKey;
-
            }
-
            set
-
            {
-
                if
-
                {
-
                    shellLinkW.SetHotkey(;
-
                }
-
                else
-
                {
-
                    shellLinkA.SetHotkey(;
-
                }
-
            }
-
        }
 

        

        
~
  public partial class Consts {
        #endregion
+
    public const int MAX_PATH = 260;
+
  }
 

        

        
~
  [CLSCompliant(false), StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
        #region "保存と読み込み"
+
  public struct WIN32_FIND_DATAW {
+
    public uint dwFileAttributes;
+
    public ComTypes.FILETIME ftCreationTime;
+
    public ComTypes.FILETIME ftLastAccessTime;
+
    public ComTypes.FILETIME ftLastWriteTime;
+
    public uint nFileSizeHigh;
+
    public uint nFileSizeLow;
+
    public uint dwReserved0;
+
    public uint dwReserved1;
+
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = Consts.MAX_PATH)] public string cFileName;
+
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] public string cAlternateFileName;
+
  }
 

        

        
~
  [CLSCompliant(false), StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Ansi)]
        /// <summary>
~
  public struct WIN32_FIND_DATAA {
        /// IShellLinkインターフェイスからキャストされたIPersistFileインターフェイスを取得します。
~
    public uint dwFileAttributes;
        /// </summary>
~
    public ComTypes.FILETIME ftCreationTime;
        /// <returns>IPersistFileインターフェイス。 取得できなかった場合はnull。</returns>
~
    public ComTypes.FILETIME ftLastAccessTime;
        private UCOMIPersistFile GetIPersistFile()
~
    public ComTypes.FILETIME ftLastWriteTime;
        {
~
    public uint nFileSizeHigh;
            if
~
    public uint nFileSizeLow;
            {
~
    public uint dwReserved0;
                return shellLinkW as UCOMIPersistFile;
~
    public uint dwReserved1;
            }
~
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = Consts.MAX_PATH)] public string cFileName;
            else
~
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] public string cAlternateFileName;
            {
~
  }
                return shellLinkA as UCOMIPersistFile;
-
            }
-
        }
 

        

        
~
  // SW_XXX
        /// <summary>
~
  public enum SW : int {
        /// カレントファイルにショートカットを保存します。
~
    HIDE            = 0,
        /// </summary>
~
    NORMAL          = 1,
        /// <exception cref="COMException">IPersistFileインターフェイスを取得できませんでした。</exception>
~
    SHOWNORMAL      = 1,
        public void Save()
~
    SHOWMINIMIZED   = 2,
        {
~
    MAXIMIZE        = 3,
            Save( currentFile );
~
    SHOWMAXIMIZED   = 3,
        }
+
    SHOWNOACTIVATE  = 4,
+
    SHOW            = 5,
+
    MINIMIZE        = 6,
+
    SHOWMINNOACTIVE = 7,
+
    SHOWNA          = 8,
+
    RESTORE         = 9,
+
    SHOWDEFAULT     = 10,
+
    FORCEMINIMIZE   = 11,
+
  }
 

        

        
~
  [CLSCompliant(false), Flags]
        /// <summary>
~
  public enum SLGP_FLAGS : uint {
        /// 指定したファイルにショートカットを保存します。
~
    SHORTPATH   = 1,
        /// </summary>
~
    UNCPRIORITY = 2,
        /// <param name="linkFile">ショートカットを保存するファイル</param>
~
    RAWPATH     = 4,
        /// <exception cref="COMException">IPersistFileインターフェイスを取得できませんでした。</exception>
~
  }
        public void Save( string linkFile )
-
        {
-
            // IPersistFileインターフェイスを取得して保存
-
            UCOMIPersistFile persistFile = GetIPersistFile();
 

        

        
~
  /// <summary>Flags determining how the links with missing targets are resolved.</summary>
            if;
+
  [CLSCompliant(false), Flags]
+
  public enum SLR_FLAGS : uint {
+
    /// <summary>
+
    /// Do not display a dialog box if the link cannot be resolved. 
+
    /// When SLR_NO_UI is set, a time-out value that specifies the 
+
    /// maximum amount of time to be spent resolving the link can 
+
    /// be specified in milliseconds. The function returns if the 
+
    /// link cannot be resolved within the time-out duration. 
+
    /// If the timeout is not set, the time-out duration will be 
+
    /// set to the default value of 3,000 milliseconds. 
+
    /// </summary>
+
    NO_UI       = 1,
+
    /// <summary>
+
    /// Allow any match during resolution.  Has no effect
+
    /// on ME/2000 or above, use the other flags instead.
+
    /// </summary>
+
    ANY_MATCH   = 2,
+
    /// <summary>
+
    /// If the link object has changed, update its path and list 
+
    /// of identifiers. If SLR_UPDATE is set, you do not need to 
+
    /// call IPersistFile::IsDirty to determine whether or not 
+
    /// the link object has changed. 
+
    /// </summary>
+
    UPDATE      = 4,
+
    /// <summary>Do not update the link information.</summary>
+
    NOUPDATE    = 8,
+
    /// <summary>Do not execute the search heuristics.</summary>
+
    NOSEARCH    = 16,
+
    /// <summary>Do not use distributed link tracking.</summary>
+
    NOTRACK     = 32,
+
    /// <summary>
+
    /// Disable distributed link tracking. By default, 
+
    /// distributed link tracking tracks removable media 
+
    /// across multiple devices based on the volume name. 
+
    /// It also uses the UNC path to track remote file 
+
    /// systems whose drive letter has changed. Setting 
+
    /// SLR_NOLINKINFO disables both types of tracking.
+
    /// </summary>
+
    NOLINKINFO  = 64,
+
    /// <summary>Call the Microsoft Windows Installer.</summary>
+
    INVOKE_MSI  = 128,
 

        

        
~
    /// <summary>
            persistFile.Save( linkFile, true );
+
    /// Not documented in SDK.  Assume same as SLR_NO_UI but 
+
    /// intended for applications without a hWnd.
+
    /// </summary>
+
    UI_WITH_MSG_PUMP = 0x101,
+
  }
 

        

        
~
  public struct IconLocation {
            // カレントファイルを保存
~
    public static readonly IconLocation Empty = new IconLocation();
            currentFile = linkFile;
-
        }
 

        

        
~
    public string File {
        /// <summary>
~
      get { return file; }
        /// 指定したファイルからショートカットを読み込みます。
~
      set { file = value; }
        /// </summary>
~
    }
        /// <param name="linkFile">ショートカットを読み込むファイル</param>
-
        /// <exception cref="FileNotFoundException">ファイルが見つかりません。</exception>
-
        /// <exception cref="COMException">IPersistFileインターフェイスを取得できませんでした。</exception>
-
        public void Load( string linkFile )
-
        {
-
            Load( linkFile, IntPtr.Zero, ShellLinkResolveFlags.SLR_ANY_MATCH | ShellLinkResolveFlags.SLR_NO_UI, 1 );
-
        }
 

        

        
~
    public int Index {
        /// <summary>
~
      get { return index; }
        /// 指定したファイルからショートカットを読み込みます。
~
      set { index = CheckIndex(value); }
        /// </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 );
-
        }
 

        

        
~
    public IconLocation(string file, int index)
        /// <summary>
~
      : this()
        /// 指定したファイルからショートカットを読み込みます。
~
    {
        /// </summary>
~
      this.file = file;
        /// <param name="linkFile">ショートカットを読み込むファイル</param>
~
      this.index = CheckIndex(index);
        /// <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,;
-
        }
-
        
-
        /// <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;
-

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

          
-
            if;
-

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

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

          
-
            if
-
            {
-
                flags |=;
-
            }
-

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

        

        
~
    private int CheckIndex(int val)
            // カレントファイルを指定
~
    {
            currentFile = linkFile;
~
      if
        }
+
        throw new ArgumentOutOfRangeException("val", "must be zero or positive number");
 

        

        
~
      return val;
        #endregion
 
    }
    }
+

          
+
    private string file;
+
    private int index;
+
  }
 
}
}
 
}}
}}