| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 | 
							- /**************************************************************************
 
- *
 
- * Filename:     ShellShortcut.cs
 
- * Author:       Mattias Sjögren (mattias@mvps.org)
 
- *               http://www.msjogren.net/dotnet/
 
- *
 
- * Description:  Defines a .NET friendly class, ShellShortcut, for reading
 
- *               and writing shortcuts.
 
- *               Define the conditional compilation symbol UNICODE to use
 
- *               IShellLinkW internally.
 
- *
 
- * Public types: class ShellShortcut
 
- *
 
- *
 
- * Dependencies: ShellLinkNative.cs
 
- *
 
- *
 
- * Copyright ©2001-2002, Mattias Sjögren
 
- * 
 
- **************************************************************************/
 
- using System;
 
- using System.Diagnostics;
 
- using System.Drawing;
 
- using System.IO;
 
- using System.Runtime.InteropServices;
 
- using System.Text;
 
- using System.Windows.Forms;
 
- namespace MediaBrowser.Installer.Code
 
- {
 
- 	/// <remarks>
 
- 	///   .NET friendly wrapper for the ShellLink class
 
- 	/// </remarks>
 
- 	public class ShellShortcut : IDisposable
 
- 	{
 
-     private const int INFOTIPSIZE = 1024;
 
-     private const int MAX_PATH = 260;
 
-     private const int SW_SHOWNORMAL = 1;
 
-     private const int SW_SHOWMINIMIZED = 2;
 
-     private const int SW_SHOWMAXIMIZED = 3;
 
-     private const int SW_SHOWMINNOACTIVE = 7;
 
-   #if UNICODE
 
-     private IShellLinkW m_Link;
 
-   #else
 
-     private IShellLinkA m_Link;
 
-   #endif
 
-     private string m_sPath;
 
-     ///
 
-     /// <param name='linkPath'>
 
-     ///   Path to new or existing shortcut file (.lnk).
 
-     /// </param>
 
-     ///
 
-     public ShellShortcut(string linkPath)
 
-     {
 
-       IPersistFile pf;
 
-       m_sPath = linkPath;
 
-     #if UNICODE
 
-       m_Link = (IShellLinkW) new ShellLink();
 
-     #else
 
-       m_Link = (IShellLinkA) new ShellLink();
 
-     #endif
 
-       if ( File.Exists( linkPath ) ) {
 
-         pf = (IPersistFile)m_Link;
 
-         pf.Load( linkPath, 0 );
 
-       }
 
-     }
 
-     //
 
-     //  IDisplosable implementation
 
-     //
 
-     public void Dispose()
 
-     {
 
-       if ( m_Link != null ) {
 
-         Marshal.ReleaseComObject( m_Link );
 
-         m_Link = null;
 
-       }
 
-     }
 
-     /// <value>
 
-     ///   Gets or sets the argument list of the shortcut.
 
-     /// </value>
 
-     public string Arguments
 
-     {
 
-       get
 
-       {
 
-         StringBuilder sb = new StringBuilder( INFOTIPSIZE );
 
-         m_Link.GetArguments( sb, sb.Capacity );
 
-         return sb.ToString();
 
-       }
 
-       set { m_Link.SetArguments( value ); }
 
-     }
 
-     /// <value>
 
-     ///   Gets or sets a description of the shortcut.
 
-     /// </value>
 
-     public string Description
 
-     {
 
-       get
 
-       {
 
-         StringBuilder sb = new StringBuilder( INFOTIPSIZE );
 
-         m_Link.GetDescription( sb, sb.Capacity );
 
-         return sb.ToString();
 
-       }
 
-       set { m_Link.SetDescription( value ); }
 
-     }
 
-     /// <value>
 
-     ///   Gets or sets the working directory (aka start in directory) of the shortcut.
 
-     /// </value>
 
-     public string WorkingDirectory
 
-     {
 
-       get
 
-       {
 
-         StringBuilder sb = new StringBuilder( MAX_PATH );
 
-         m_Link.GetWorkingDirectory( sb, sb.Capacity );
 
-         return sb.ToString();
 
-       }
 
-       set { m_Link.SetWorkingDirectory( value ); }
 
-     }
 
-     //
 
-     // If Path returns an empty string, the shortcut is associated with
 
-     // a PIDL instead, which can be retrieved with IShellLink.GetIDList().
 
-     // This is beyond the scope of this wrapper class.
 
-     //
 
-     /// <value>
 
-     ///   Gets or sets the target path of the shortcut.
 
-     /// </value>
 
-     public string Path
 
-     {
 
-       get
 
-       {
 
-       #if UNICODE
 
-         WIN32_FIND_DATAW wfd = new WIN32_FIND_DATAW();
 
-       #else
 
-         WIN32_FIND_DATAA wfd = new WIN32_FIND_DATAA();
 
-       #endif
 
-         StringBuilder sb = new StringBuilder( MAX_PATH );
 
-         m_Link.GetPath( sb, sb.Capacity, out wfd, SLGP_FLAGS.SLGP_UNCPRIORITY );
 
-         return sb.ToString();
 
-       }
 
-       set { m_Link.SetPath( value ); }
 
-     }
 
-     /// <value>
 
-     ///   Gets or sets the path of the <see cref="Icon"/> assigned to the shortcut.
 
-     /// </value>
 
-     /// <summary>
 
-     ///   <seealso cref="IconIndex"/>
 
-     /// </summary>
 
-     public string IconPath
 
-     {
 
-       get
 
-       {
 
-         StringBuilder sb = new StringBuilder( MAX_PATH );
 
-         int nIconIdx;
 
-         m_Link.GetIconLocation( sb, sb.Capacity, out nIconIdx );
 
-         return sb.ToString();
 
-       }
 
-       set { m_Link.SetIconLocation( value, IconIndex ); }
 
-     }
 
-     /// <value>
 
-     ///   Gets or sets the index of the <see cref="Icon"/> assigned to the shortcut.
 
-     ///   Set to zero when the <see cref="IconPath"/> property specifies a .ICO file.
 
-     /// </value>
 
-     /// <summary>
 
-     ///   <seealso cref="IconPath"/>
 
-     /// </summary>
 
-     public int IconIndex
 
-     {
 
-       get
 
-       {
 
-         StringBuilder sb = new StringBuilder( MAX_PATH );
 
-         int nIconIdx;
 
-         m_Link.GetIconLocation( sb, sb.Capacity, out nIconIdx );
 
-         return nIconIdx;
 
-       }
 
-       set { m_Link.SetIconLocation( IconPath, value ); }
 
-     }
 
-     /// <value>
 
-     ///   Retrieves the Icon of the shortcut as it will appear in Explorer.
 
-     ///   Use the <see cref="IconPath"/> and <see cref="IconIndex"/>
 
-     ///   properties to change it.
 
-     /// </value>
 
-     public Icon Icon
 
-     {
 
-       get
 
-       {
 
-         StringBuilder sb = new StringBuilder( MAX_PATH );
 
-         int nIconIdx;
 
-         IntPtr hIcon, hInst;
 
-         Icon ico, clone;
 
-         m_Link.GetIconLocation( sb, sb.Capacity, out nIconIdx );
 
-         hInst = Marshal.GetHINSTANCE( this.GetType().Module );
 
-         hIcon = Native.ExtractIcon( hInst, sb.ToString(), nIconIdx );
 
-         if ( hIcon == IntPtr.Zero )
 
-           return null;
 
-         // Return a cloned Icon, because we have to free the original ourselves.
 
-         ico = Icon.FromHandle( hIcon );
 
-         clone = (Icon)ico.Clone();
 
-         ico.Dispose();
 
-         Native.DestroyIcon( hIcon );
 
-         return clone;
 
-       }
 
-     }
 
-     /// <value>
 
-     ///   Gets or sets the System.Diagnostics.ProcessWindowStyle value
 
-     ///   that decides the initial show state of the shortcut target. Note that
 
-     ///   ProcessWindowStyle.Hidden is not a valid property value.
 
-     /// </value>
 
-     public ProcessWindowStyle WindowStyle
 
-     {
 
-       get
 
-       {
 
-         int nWS;
 
-         m_Link.GetShowCmd( out nWS );
 
-         switch ( nWS ) {
 
-           case SW_SHOWMINIMIZED:
 
-           case SW_SHOWMINNOACTIVE:
 
-             return ProcessWindowStyle.Minimized;
 
-           
 
-           case SW_SHOWMAXIMIZED:
 
-             return ProcessWindowStyle.Maximized;
 
-           default:
 
-             return ProcessWindowStyle.Normal;
 
-         }
 
-       }
 
-       set
 
-       {
 
-         int nWS;
 
-         switch ( value ) {
 
-           case ProcessWindowStyle.Normal:
 
-             nWS = SW_SHOWNORMAL;
 
-             break;
 
-           case ProcessWindowStyle.Minimized:
 
-             nWS = SW_SHOWMINNOACTIVE;
 
-             break;
 
-           case ProcessWindowStyle.Maximized:
 
-             nWS = SW_SHOWMAXIMIZED;
 
-             break;
 
-           default: // ProcessWindowStyle.Hidden
 
-             throw new ArgumentException("Unsupported ProcessWindowStyle value.");
 
-         }
 
-         m_Link.SetShowCmd( nWS );
 
-       
 
-       }
 
-     }
 
-     /// <value>
 
-     ///   Gets or sets the hotkey for the shortcut.
 
-     /// </value>
 
-     public Keys Hotkey
 
-     {
 
-       get
 
-       {
 
-         short wHotkey;
 
-         int dwHotkey;
 
-         m_Link.GetHotkey( out wHotkey );
 
-         //
 
-         // Convert from IShellLink 16-bit format to Keys enumeration 32-bit value
 
-         // IShellLink: 0xMMVK
 
-         // Keys:  0x00MM00VK        
 
-         //   MM = Modifier (Alt, Control, Shift)
 
-         //   VK = Virtual key code
 
-         //       
 
-         dwHotkey = ((wHotkey & 0xFF00) << 8) | (wHotkey & 0xFF);
 
-         return (Keys) dwHotkey;
 
-       }
 
-       set
 
-       {
 
-         short wHotkey;
 
-         if ( (value & Keys.Modifiers) == 0 )
 
-           throw new ArgumentException("Hotkey must include a modifier key.");
 
-         //    
 
-         // Convert from Keys enumeration 32-bit value to IShellLink 16-bit format
 
-         // IShellLink: 0xMMVK
 
-         // Keys:  0x00MM00VK        
 
-         //   MM = Modifier (Alt, Control, Shift)
 
-         //   VK = Virtual key code
 
-         //       
 
-         wHotkey = unchecked((short) ( ((int) (value & Keys.Modifiers) >> 8) | (int) (value & Keys.KeyCode) ));
 
-         m_Link.SetHotkey( wHotkey );
 
-       }
 
-     }
 
-     /// <summary>
 
-     ///   Saves the shortcut to disk.
 
-     /// </summary>
 
-     public void Save()
 
-     {
 
-       IPersistFile pf = (IPersistFile) m_Link;
 
-       pf.Save( m_sPath, true );
 
-     }
 
-     /// <summary>
 
-     ///   Returns a reference to the internal ShellLink object,
 
-     ///   which can be used to perform more advanced operations
 
-     ///   not supported by this wrapper class, by using the
 
-     ///   IShellLink interface directly.
 
-     /// </summary>
 
-     public object ShellLink
 
-     {
 
-       get { return m_Link; }
 
-     }
 
-   #region Native Win32 API functions
 
-     private class Native
 
-     {
 
-       [DllImport("shell32.dll", CharSet=CharSet.Auto)]
 
-       public static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex);
 
-       [DllImport("user32.dll")]
 
-       public static extern bool DestroyIcon(IntPtr hIcon);
 
-     }
 
-   #endregion
 
- 	}
 
- }
 
 
  |