Помогите найти статью описания код, которая была опубликована в RSDN , незнаю когда и в каком номере журнала.
вот код создания ярлыка.
Ну можно и без неё:Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114 // Основные классы
using System.Runtime.InteropServices;
...
static class ShellLink
{
[ComImport,
Guid("000214F9-0000-0000-C000-000000000046"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IShellLinkW
{
[PreserveSig]
int GetPath(
[Out, MarshalAs(UnmanagedType.LPWStr)]
StringBuilder pszFile,
int cch, ref IntPtr pfd, uint fFlags);
[PreserveSig]
int GetIDList(out IntPtr ppidl);
[PreserveSig]
int SetIDList(IntPtr pidl);
[PreserveSig]
int GetDescription(
[Out, MarshalAs(UnmanagedType.LPWStr)]
StringBuilder pszName, int cch);
[PreserveSig]
int SetDescription(
[MarshalAs(UnmanagedType.LPWStr)]
string pszName);
[PreserveSig]
int GetWorkingDirectory(
[Out, MarshalAs(UnmanagedType.LPWStr)]
StringBuilder pszDir, int cch);
[PreserveSig]
int SetWorkingDirectory(
[MarshalAs(UnmanagedType.LPWStr)]
string pszDir);
[PreserveSig]
int GetArguments(
[Out, MarshalAs(UnmanagedType.LPWStr)]
StringBuilder pszArgs, int cch);
[PreserveSig]
int SetArguments(
[MarshalAs(UnmanagedType.LPWStr)]
string pszArgs);
[PreserveSig]
int GetHotkey(out ushort pwHotkey);
[PreserveSig]
int SetHotkey(ushort wHotkey);
[PreserveSig]
int GetShowCmd(out int piShowCmd);
[PreserveSig]
int SetShowCmd(int iShowCmd);
[PreserveSig]
int GetIconLocation(
[Out, MarshalAs(UnmanagedType.LPWStr)]
StringBuilder pszIconPath, int cch, out int piIcon);
[PreserveSig]
int SetIconLocation(
[MarshalAs(UnmanagedType.LPWStr)]
string pszIconPath, int iIcon);
[PreserveSig]
int SetRelativePath(
[MarshalAs(UnmanagedType.LPWStr)]
string pszPathRel, uint dwReserved);
[PreserveSig]
int Resolve(IntPtr hwnd, uint fFlags);
[PreserveSig]
int SetPath(
[MarshalAs(UnmanagedType.LPWStr)]
string pszFile);
}
[ComImport,
Guid("00021401-0000-0000-C000-000000000046"),
ClassInterface( ClassInterfaceType.None)]
private class shl_link {}
internal static IShellLinkW CreateShellLink()
{
return (IShellLinkW)(new shl_link());
}
}
public static class ShortCut
{
public static void Create(
string PathToFile, string PathToLink,
string Arguments, string Description)
{
ShellLink.IShellLinkW shlLink = ShellLink.CreateShellLink();
Marshal.ThrowExceptionForHR(shlLink.SetDescription(Description));
Marshal.ThrowExceptionForHR(shlLink.SetPath(PathToFile));
Marshal.ThrowExceptionForHR(shlLink.SetArguments(Arguments));
((System.Runtime.InteropServices.ComTypes.IPersistFile)shlLink).Save(PathToLink, false);
}
}
использование:Код C#
1
2
3
4
5 ShortCut.Create(
<путь_к_файлу>,
<путь_к_ярлыку>,
<аргументы_командной_строки>,
<описание>);
p.s. Код основан на коде из RSDN.
здесь