aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Installer/Code
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Installer/Code')
-rw-r--r--MediaBrowser.Installer/Code/DownloadAnimation.xaml39
-rw-r--r--MediaBrowser.Installer/Code/DownloadAnimation.xaml.cs68
-rw-r--r--MediaBrowser.Installer/Code/Images/computer_256.pngbin15143 -> 0 bytes
-rw-r--r--MediaBrowser.Installer/Code/Images/internet-globe.jpgbin9125 -> 0 bytes
-rw-r--r--MediaBrowser.Installer/Code/Images/mb3logo800.pngbin35600 -> 0 bytes
-rw-r--r--MediaBrowser.Installer/Code/ModelExtensions.cs43
-rw-r--r--MediaBrowser.Installer/Code/PackageInfo.cs119
-rw-r--r--MediaBrowser.Installer/Code/PackageType.cs21
-rw-r--r--MediaBrowser.Installer/Code/PackageVersionClass.cs21
-rw-r--r--MediaBrowser.Installer/Code/PackageVersionInfo.cs73
-rw-r--r--MediaBrowser.Installer/Code/ShellLinkNative.cs277
-rw-r--r--MediaBrowser.Installer/Code/ShellShortcut.cs348
12 files changed, 0 insertions, 1009 deletions
diff --git a/MediaBrowser.Installer/Code/DownloadAnimation.xaml b/MediaBrowser.Installer/Code/DownloadAnimation.xaml
deleted file mode 100644
index 26a0ca677..000000000
--- a/MediaBrowser.Installer/Code/DownloadAnimation.xaml
+++ /dev/null
@@ -1,39 +0,0 @@
-<UserControl x:Class="MediaBrowser.Installer.Code.DownloadAnimation"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- mc:Ignorable="d" Height="129.167" Width="421.27">
- <UserControl.Resources>
- <Style TargetType="Ellipse">
- <Setter Property="Fill" Value="LightGray" />
- <Setter Property="Width" Value="8" />
- <Setter Property="Height" Value="8" />
- </Style>
- </UserControl.Resources>
- <Canvas Height="58" Width="275">
- <Ellipse Canvas.Left="63" Canvas.Top="23" />
- <Ellipse Canvas.Left="77" Canvas.Top="23" />
- <Ellipse Canvas.Left="91" Canvas.Top="23" />
- <Ellipse Canvas.Left="105" Canvas.Top="23" />
- <Ellipse Canvas.Left="119" Canvas.Top="23" />
- <Ellipse Canvas.Left="133" Canvas.Top="23" />
- <Ellipse Canvas.Left="147" Canvas.Top="23" />
- <Ellipse Canvas.Left="161" Canvas.Top="23" />
- <Ellipse Canvas.Left="175" Canvas.Top="23" />
- <Ellipse Canvas.Left="189" Canvas.Top="23" />
- <Ellipse Canvas.Left="203" Canvas.Top="23" />
- <Ellipse Canvas.Left="217" Canvas.Top="23" />
- <Canvas Canvas.Left="17" Canvas.Top="19"
- Name="SlidingCanvas" Height="17" Width="46">
- <Ellipse Canvas.Left="4" Canvas.Top="4" Fill="Orange" />
- <Ellipse Canvas.Left="18" Canvas.Top="4" Fill="Orange" />
- <Ellipse Canvas.Left="32" Canvas.Top="4" Fill="Orange" />
- </Canvas>
- <Image Canvas.Left="-42" Canvas.Top="-19"
- Source="Images\internet-globe.jpg" Stretch="None" Height="94" Width="100" RenderTransformOrigin="0.341,0.403" />
- <Image Canvas.Left="231" Canvas.Top="-25"
- Source="Images\computer_256.png" Height="100" Width="100" Stretch="None" />
- </Canvas>
-
-</UserControl>
diff --git a/MediaBrowser.Installer/Code/DownloadAnimation.xaml.cs b/MediaBrowser.Installer/Code/DownloadAnimation.xaml.cs
deleted file mode 100644
index 8fa890816..000000000
--- a/MediaBrowser.Installer/Code/DownloadAnimation.xaml.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
-using System.Windows.Threading;
-
-namespace MediaBrowser.Installer.Code
-{
- /// <summary>
- /// Interaction logic for DownloadAnimation.xaml
- /// </summary>
- public partial class DownloadAnimation : UserControl
- {
- private int _i;
- private readonly double _startPos;
- private readonly DispatcherTimer _timer;
-
- public DownloadAnimation()
- {
- _i = 0;
- InitializeComponent();
-
- // Store start position of sliding canvas
- _startPos = Canvas.GetLeft(SlidingCanvas);
-
- // Create animation timer
- _timer = new DispatcherTimer {Interval = TimeSpan.FromMilliseconds(100)};
- _timer.Tick += TimerTick;
- }
-
- public void StartAnimation()
- {
- _timer.Start();
- }
-
- public void StopAnimation()
- {
- _timer.Stop();
- }
-
- private void TimerTick(object sender, EventArgs e)
- {
- _i++;
-
- if (_i < 16)
- {
- // Move SlidingCanvas containing the three colored dots 14 units to the right
- Canvas.SetLeft(SlidingCanvas, Canvas.GetLeft(SlidingCanvas) + 14);
- }
- else
- {
- // Move SlidingCanvas back to its starting position and reset counter
- _i = 0;
- Canvas.SetLeft(SlidingCanvas, _startPos);
- }
- }
- }
-}
diff --git a/MediaBrowser.Installer/Code/Images/computer_256.png b/MediaBrowser.Installer/Code/Images/computer_256.png
deleted file mode 100644
index 42f3c22fa..000000000
--- a/MediaBrowser.Installer/Code/Images/computer_256.png
+++ /dev/null
Binary files differ
diff --git a/MediaBrowser.Installer/Code/Images/internet-globe.jpg b/MediaBrowser.Installer/Code/Images/internet-globe.jpg
deleted file mode 100644
index 26d064d7b..000000000
--- a/MediaBrowser.Installer/Code/Images/internet-globe.jpg
+++ /dev/null
Binary files differ
diff --git a/MediaBrowser.Installer/Code/Images/mb3logo800.png b/MediaBrowser.Installer/Code/Images/mb3logo800.png
deleted file mode 100644
index fbc769a6f..000000000
--- a/MediaBrowser.Installer/Code/Images/mb3logo800.png
+++ /dev/null
Binary files differ
diff --git a/MediaBrowser.Installer/Code/ModelExtensions.cs b/MediaBrowser.Installer/Code/ModelExtensions.cs
deleted file mode 100644
index 66e51ec11..000000000
--- a/MediaBrowser.Installer/Code/ModelExtensions.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-
-using System.Collections.Generic;
-
-namespace MediaBrowser.Installer.Code
-{
- /// <summary>
- /// Class ModelExtensions
- /// </summary>
- static class ModelExtensions
- {
- /// <summary>
- /// Values the or default.
- /// </summary>
- /// <param name="str">The STR.</param>
- /// <param name="def">The def.</param>
- /// <returns>System.String.</returns>
- public static string ValueOrDefault(this string str, string def = "")
- {
- return string.IsNullOrEmpty(str) ? def : str;
- }
-
- /// <summary>
- /// Helper method for Dictionaries since they throw on not-found keys
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <typeparam name="U"></typeparam>
- /// <param name="dictionary">The dictionary.</param>
- /// <param name="key">The key.</param>
- /// <param name="defaultValue">The default value.</param>
- /// <returns>``1.</returns>
- public static U GetValueOrDefault<T, U>(this Dictionary<T, U> dictionary, T key, U defaultValue)
- {
- U val;
- if (!dictionary.TryGetValue(key, out val))
- {
- val = defaultValue;
- }
- return val;
-
- }
-
- }
-}
diff --git a/MediaBrowser.Installer/Code/PackageInfo.cs b/MediaBrowser.Installer/Code/PackageInfo.cs
deleted file mode 100644
index adfe54dd6..000000000
--- a/MediaBrowser.Installer/Code/PackageInfo.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace MediaBrowser.Installer.Code
-{
- /// <summary>
- /// Class PackageInfo
- /// </summary>
- public class PackageInfo
- {
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- /// <value>The name.</value>
- public string name { get; set; }
-
- /// <summary>
- /// Gets or sets the short description.
- /// </summary>
- /// <value>The short description.</value>
- public string shortDescription { get; set; }
-
- /// <summary>
- /// Gets or sets the overview.
- /// </summary>
- /// <value>The overview.</value>
- public string overview { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether this instance is premium.
- /// </summary>
- /// <value><c>true</c> if this instance is premium; otherwise, <c>false</c>.</value>
- public bool isPremium { get; set; }
-
- /// <summary>
- /// Gets or sets the rich desc URL.
- /// </summary>
- /// <value>The rich desc URL.</value>
- public string richDescUrl { get; set; }
-
- /// <summary>
- /// Gets or sets the thumb image.
- /// </summary>
- /// <value>The thumb image.</value>
- public string thumbImage { get; set; }
-
- /// <summary>
- /// Gets or sets the preview image.
- /// </summary>
- /// <value>The preview image.</value>
- public string previewImage { get; set; }
-
- /// <summary>
- /// Gets or sets the type.
- /// </summary>
- /// <value>The type.</value>
- public PackageType type { get; set; }
-
- /// <summary>
- /// Gets or sets the target filename.
- /// </summary>
- /// <value>The target filename.</value>
- public string targetFilename { get; set; }
-
- /// <summary>
- /// Gets or sets the owner.
- /// </summary>
- /// <value>The owner.</value>
- public string owner { get; set; }
-
- /// <summary>
- /// Gets or sets the category.
- /// </summary>
- /// <value>The category.</value>
- public string category { get; set; }
-
- /// <summary>
- /// Gets or sets the catalog tile color.
- /// </summary>
- /// <value>The owner.</value>
- public string tileColor { get; set; }
-
- /// <summary>
- /// Gets or sets the feature id of this package (if premium).
- /// </summary>
- /// <value>The feature id.</value>
- public string featureId { get; set; }
-
- /// <summary>
- /// Gets or sets the registration info for this package (if premium).
- /// </summary>
- /// <value>The registration info.</value>
- public string regInfo { get; set; }
-
- /// <summary>
- /// Gets or sets the price for this package (if premium).
- /// </summary>
- /// <value>The price.</value>
- public float price { get; set; }
-
- /// <summary>
- /// Gets or sets whether or not this package is registered.
- /// </summary>
- /// <value>True if registered.</value>
- public bool isRegistered { get; set; }
-
- /// <summary>
- /// Gets or sets the expiration date for this package.
- /// </summary>
- /// <value>Expiration Date.</value>
- public DateTime expDate { get; set; }
-
- /// <summary>
- /// Gets or sets the versions.
- /// </summary>
- /// <value>The versions.</value>
- public List<PackageVersionInfo> versions { get; set; }
- }
-}
diff --git a/MediaBrowser.Installer/Code/PackageType.cs b/MediaBrowser.Installer/Code/PackageType.cs
deleted file mode 100644
index 964025a73..000000000
--- a/MediaBrowser.Installer/Code/PackageType.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-namespace MediaBrowser.Installer.Code
-{
- /// <summary>
- /// Enum PackageType
- /// </summary>
- public enum PackageType
- {
- /// <summary>
- /// All
- /// </summary>
- All,
- /// <summary>
- /// The system
- /// </summary>
- System,
- /// <summary>
- /// The user installed
- /// </summary>
- UserInstalled
- }
-} \ No newline at end of file
diff --git a/MediaBrowser.Installer/Code/PackageVersionClass.cs b/MediaBrowser.Installer/Code/PackageVersionClass.cs
deleted file mode 100644
index d046e5c60..000000000
--- a/MediaBrowser.Installer/Code/PackageVersionClass.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-namespace MediaBrowser.Installer.Code
-{
- /// <summary>
- /// Enum PackageVersionClass
- /// </summary>
- public enum PackageVersionClass
- {
- /// <summary>
- /// The release
- /// </summary>
- Release = 0,
- /// <summary>
- /// The beta
- /// </summary>
- Beta = 1,
- /// <summary>
- /// The dev
- /// </summary>
- Dev = 2
- }
-} \ No newline at end of file
diff --git a/MediaBrowser.Installer/Code/PackageVersionInfo.cs b/MediaBrowser.Installer/Code/PackageVersionInfo.cs
deleted file mode 100644
index d26c217ca..000000000
--- a/MediaBrowser.Installer/Code/PackageVersionInfo.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-using System;
-using System.Runtime.Serialization;
-
-namespace MediaBrowser.Installer.Code
-{
- /// <summary>
- /// Class PackageVersionInfo
- /// </summary>
- public class PackageVersionInfo
- {
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- /// <value>The name.</value>
- public string name { get; set; }
-
- /// <summary>
- /// Gets or sets the version STR.
- /// </summary>
- /// <value>The version STR.</value>
- public string versionStr { get; set; }
-
- /// <summary>
- /// The _version
- /// </summary>
- private Version _version;
- /// <summary>
- /// Gets or sets the version.
- /// Had to make this an interpreted property since Protobuf can't handle Version
- /// </summary>
- /// <value>The version.</value>
- public Version version
- {
- get { return _version ?? (_version = new Version(versionStr.ValueOrDefault("0.0.0.1"))); }
- }
-
- /// <summary>
- /// Gets or sets the classification.
- /// </summary>
- /// <value>The classification.</value>
- public PackageVersionClass classification { get; set; }
-
- /// <summary>
- /// Gets or sets the description.
- /// </summary>
- /// <value>The description.</value>
- public string description { get; set; }
-
- /// <summary>
- /// Gets or sets the required version STR.
- /// </summary>
- /// <value>The required version STR.</value>
- public string requiredVersionStr { get; set; }
-
- /// <summary>
- /// Gets or sets the source URL.
- /// </summary>
- /// <value>The source URL.</value>
- public string sourceUrl { get; set; }
-
- /// <summary>
- /// Gets or sets the source URL.
- /// </summary>
- /// <value>The source URL.</value>
- public Guid checksum { get; set; }
-
- /// <summary>
- /// Gets or sets the target filename.
- /// </summary>
- /// <value>The target filename.</value>
- public string targetFilename { get; set; }
- }
-}
diff --git a/MediaBrowser.Installer/Code/ShellLinkNative.cs b/MediaBrowser.Installer/Code/ShellLinkNative.cs
deleted file mode 100644
index d603fe3a5..000000000
--- a/MediaBrowser.Installer/Code/ShellLinkNative.cs
+++ /dev/null
@@ -1,277 +0,0 @@
-/**************************************************************************
-*
-* Filename: ShellLinkNative.cs
-* Author: Mattias Sjögren (mattias@mvps.org)
-* http://www.msjogren.net/dotnet/
-*
-* Description: Defines the native types used to manipulate shell shortcuts.
-*
-* Public types: enum SLR_FLAGS
-* enum SLGP_FLAGS
-* struct WIN32_FIND_DATA[A|W]
-* interface IPersistFile
-* interface IShellLink[A|W]
-* class ShellLink
-*
-*
-* Copyright ©2001-2002, Mattias Sjögren
-*
-**************************************************************************/
-
-using System;
-using System.Runtime.InteropServices;
-using System.Text;
-using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME;
-
-namespace MediaBrowser.Installer.Code
-{
- // IShellLink.Resolve fFlags
- [Flags()]
- public enum SLR_FLAGS
- {
- SLR_NO_UI = 0x1,
- SLR_ANY_MATCH = 0x2,
- SLR_UPDATE = 0x4,
- SLR_NOUPDATE = 0x8,
- SLR_NOSEARCH = 0x10,
- SLR_NOTRACK = 0x20,
- SLR_NOLINKINFO = 0x40,
- SLR_INVOKE_MSI = 0x80
- }
-
- // IShellLink.GetPath fFlags
- [Flags()]
- public enum SLGP_FLAGS
- {
- SLGP_SHORTPATH = 0x1,
- SLGP_UNCPRIORITY = 0x2,
- SLGP_RAWPATH = 0x4
- }
-
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
- public struct WIN32_FIND_DATAA
- {
- public int dwFileAttributes;
- public FILETIME ftCreationTime;
- public FILETIME ftLastAccessTime;
- public FILETIME ftLastWriteTime;
- public int nFileSizeHigh;
- public int nFileSizeLow;
- public int dwReserved0;
- public int dwReserved1;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=MAX_PATH)]
- public string cFileName;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=14)]
- public string cAlternateFileName;
- private const int MAX_PATH = 260;
- }
-
- [StructLayoutAttribute(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
- public struct WIN32_FIND_DATAW
- {
- public int dwFileAttributes;
- public FILETIME ftCreationTime;
- public FILETIME ftLastAccessTime;
- public FILETIME ftLastWriteTime;
- public int nFileSizeHigh;
- public int nFileSizeLow;
- public int dwReserved0;
- public int dwReserved1;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=MAX_PATH)]
- public string cFileName;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=14)]
- public string cAlternateFileName;
- private const int MAX_PATH = 260;
- }
-
- [
- ComImport(),
- InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
- Guid("0000010B-0000-0000-C000-000000000046")
- ]
- public interface IPersistFile
- {
- #region Methods inherited from IPersist
-
- void GetClassID(
- out Guid pClassID);
-
- #endregion
-
- [PreserveSig()]
- int IsDirty();
-
- void Load(
- [MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
- int dwMode);
-
- void Save(
- [MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
- [MarshalAs(UnmanagedType.Bool)] bool fRemember);
-
- void SaveCompleted(
- [MarshalAs(UnmanagedType.LPWStr)] string pszFileName);
-
- void GetCurFile(
- out IntPtr ppszFileName);
-
- }
-
- [
- ComImport(),
- InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
- Guid("000214EE-0000-0000-C000-000000000046")
- ]
- public interface IShellLinkA
- {
- void GetPath(
- [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszFile,
- int cchMaxPath,
- out WIN32_FIND_DATAA pfd,
- SLGP_FLAGS fFlags);
-
- void GetIDList(
- out IntPtr ppidl);
-
- void SetIDList(
- IntPtr pidl);
-
- void GetDescription(
- [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszName,
- int cchMaxName);
-
- void SetDescription(
- [MarshalAs(UnmanagedType.LPStr)] string pszName);
-
- void GetWorkingDirectory(
- [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszDir,
- int cchMaxPath);
-
- void SetWorkingDirectory(
- [MarshalAs(UnmanagedType.LPStr)] string pszDir);
-
- void GetArguments(
- [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszArgs,
- int cchMaxPath);
-
- void SetArguments(
- [MarshalAs(UnmanagedType.LPStr)] string pszArgs);
-
- void GetHotkey(
- out short pwHotkey);
-
- void SetHotkey(
- short wHotkey);
-
- void GetShowCmd(
- out int piShowCmd);
-
- void SetShowCmd(
- int iShowCmd);
-
- void GetIconLocation(
- [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszIconPath,
- int cchIconPath,
- out int piIcon);
-
- void SetIconLocation(
- [MarshalAs(UnmanagedType.LPStr)] string pszIconPath,
- int iIcon);
-
- void SetRelativePath(
- [MarshalAs(UnmanagedType.LPStr)] string pszPathRel,
- int dwReserved);
-
- void Resolve(
- IntPtr hwnd,
- SLR_FLAGS fFlags);
-
- void SetPath(
- [MarshalAs(UnmanagedType.LPStr)] string pszFile);
-
- }
-
- [
- ComImport(),
- InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
- Guid("000214F9-0000-0000-C000-000000000046")
- ]
- public interface IShellLinkW
- {
- void GetPath(
- [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile,
- int cchMaxPath,
- out WIN32_FIND_DATAW pfd,
- SLGP_FLAGS fFlags);
-
- void GetIDList(
- out IntPtr ppidl);
-
- void SetIDList(
- IntPtr pidl);
-
- void GetDescription(
- [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName,
- int cchMaxName);
-
- void SetDescription(
- [MarshalAs(UnmanagedType.LPWStr)] string pszName);
-
- void GetWorkingDirectory(
- [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir,
- int cchMaxPath);
-
- void SetWorkingDirectory(
- [MarshalAs(UnmanagedType.LPWStr)] string pszDir);
-
- void GetArguments(
- [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs,
- int cchMaxPath);
-
- void SetArguments(
- [MarshalAs(UnmanagedType.LPWStr)] string pszArgs);
-
- void GetHotkey(
- out short pwHotkey);
-
- void SetHotkey(
- short wHotkey);
-
- void GetShowCmd(
- out int piShowCmd);
-
- void SetShowCmd(
- int iShowCmd);
-
- void GetIconLocation(
- [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath,
- int cchIconPath,
- out int piIcon);
-
- void SetIconLocation(
- [MarshalAs(UnmanagedType.LPWStr)] string pszIconPath,
- int iIcon);
-
- void SetRelativePath(
- [MarshalAs(UnmanagedType.LPWStr)] string pszPathRel,
- int dwReserved);
-
- void Resolve(
- IntPtr hwnd,
- SLR_FLAGS fFlags);
-
- void SetPath(
- [MarshalAs(UnmanagedType.LPWStr)] string pszFile);
-
- }
-
-
- [
- ComImport(),
- Guid("00021401-0000-0000-C000-000000000046")
- ]
- public class ShellLink // : IPersistFile, IShellLinkA, IShellLinkW
- {
- }
-
-}
diff --git a/MediaBrowser.Installer/Code/ShellShortcut.cs b/MediaBrowser.Installer/Code/ShellShortcut.cs
deleted file mode 100644
index 33b60732c..000000000
--- a/MediaBrowser.Installer/Code/ShellShortcut.cs
+++ /dev/null
@@ -1,348 +0,0 @@
-/**************************************************************************
-*
-* 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
-
- }
-}