mirror of
https://github.com/modernw/App-Installer-For-Windows-8.x-Reset.git
synced 2026-06-18 05:10:09 +10:00
Update about Manager.
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
namespace Manager
|
||||
{
|
||||
public static class ShortcutHelper
|
||||
{
|
||||
public static void CreateShortcut (
|
||||
string shortcutPath,
|
||||
string targetPath,
|
||||
string arguments,
|
||||
string workingDirectory,
|
||||
string iconPath,
|
||||
string description,
|
||||
string appUserModelID)
|
||||
{
|
||||
IShellLinkW link = (IShellLinkW)new CShellLink ();
|
||||
|
||||
link.SetPath (targetPath);
|
||||
|
||||
if (!string.IsNullOrEmpty (arguments))
|
||||
link.SetArguments (arguments);
|
||||
|
||||
if (!string.IsNullOrEmpty (workingDirectory))
|
||||
link.SetWorkingDirectory (workingDirectory);
|
||||
|
||||
if (!string.IsNullOrEmpty (description))
|
||||
link.SetDescription (description);
|
||||
|
||||
if (!string.IsNullOrEmpty (iconPath))
|
||||
link.SetIconLocation (iconPath, 0);
|
||||
|
||||
if (!string.IsNullOrEmpty (appUserModelID))
|
||||
{
|
||||
IPropertyStore propertyStore = (IPropertyStore)link;
|
||||
|
||||
PROPERTYKEY key = PROPERTYKEY.AppUserModel_ID;
|
||||
|
||||
using (PropVariant pv = new PropVariant (appUserModelID))
|
||||
{
|
||||
propertyStore.SetValue (ref key, pv);
|
||||
propertyStore.Commit ();
|
||||
}
|
||||
}
|
||||
|
||||
IPersistFile file = (IPersistFile)link;
|
||||
file.Save (shortcutPath, false);
|
||||
|
||||
Marshal.ReleaseComObject (link);
|
||||
}
|
||||
|
||||
#region COM 定义(全部放进类内部)
|
||||
|
||||
[ComImport]
|
||||
[Guid ("00021401-0000-0000-C000-000000000046")]
|
||||
internal class CShellLink
|
||||
{
|
||||
}
|
||||
|
||||
[ComImport]
|
||||
[InterfaceType (ComInterfaceType.InterfaceIsIUnknown)]
|
||||
[Guid ("000214F9-0000-0000-C000-000000000046")]
|
||||
internal interface IShellLinkW
|
||||
{
|
||||
void GetPath ([Out, MarshalAs (UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, IntPtr pfd, int 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, int fFlags);
|
||||
void SetPath ([MarshalAs (UnmanagedType.LPWStr)] string pszFile);
|
||||
}
|
||||
|
||||
[ComImport]
|
||||
[InterfaceType (ComInterfaceType.InterfaceIsIUnknown)]
|
||||
[Guid ("0000010b-0000-0000-C000-000000000046")]
|
||||
internal interface IPersistFile
|
||||
{
|
||||
void GetClassID (out Guid pClassID);
|
||||
void IsDirty ();
|
||||
void Load ([MarshalAs (UnmanagedType.LPWStr)] string pszFileName, uint dwMode);
|
||||
void Save ([MarshalAs (UnmanagedType.LPWStr)] string pszFileName, bool fRemember);
|
||||
void SaveCompleted ([MarshalAs (UnmanagedType.LPWStr)] string pszFileName);
|
||||
void GetCurFile ([MarshalAs (UnmanagedType.LPWStr)] out string ppszFileName);
|
||||
}
|
||||
|
||||
[ComImport]
|
||||
[InterfaceType (ComInterfaceType.InterfaceIsIUnknown)]
|
||||
[Guid ("886D8EEB-8CF2-4446-8D02-CDBA1DBDCF99")]
|
||||
internal interface IPropertyStore
|
||||
{
|
||||
uint GetCount (out uint cProps);
|
||||
uint GetAt (uint iProp, out PROPERTYKEY pkey);
|
||||
uint GetValue (ref PROPERTYKEY key, out PropVariant pv);
|
||||
uint SetValue (ref PROPERTYKEY key, PropVariant pv);
|
||||
uint Commit ();
|
||||
}
|
||||
|
||||
[StructLayout (LayoutKind.Sequential, Pack = 4)]
|
||||
internal struct PROPERTYKEY
|
||||
{
|
||||
public Guid fmtid;
|
||||
public uint pid;
|
||||
|
||||
public static PROPERTYKEY AppUserModel_ID =
|
||||
new PROPERTYKEY
|
||||
{
|
||||
fmtid = new Guid ("9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3"),
|
||||
pid = 5
|
||||
};
|
||||
}
|
||||
|
||||
[StructLayout (LayoutKind.Sequential)]
|
||||
internal sealed class PropVariant: IDisposable
|
||||
{
|
||||
short vt;
|
||||
short wReserved1;
|
||||
short wReserved2;
|
||||
short wReserved3;
|
||||
IntPtr ptr;
|
||||
int int32;
|
||||
|
||||
private const short VT_LPWSTR = 31;
|
||||
|
||||
public PropVariant (string value)
|
||||
{
|
||||
vt = VT_LPWSTR;
|
||||
ptr = Marshal.StringToCoTaskMemUni (value);
|
||||
}
|
||||
|
||||
public void Dispose ()
|
||||
{
|
||||
if (ptr != IntPtr.Zero)
|
||||
{
|
||||
Marshal.FreeCoTaskMem (ptr);
|
||||
ptr = IntPtr.Zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user