root / trunk / Pithos.ShellExtensions / ShellExtLib.cs @ 96f88218
History | View | Annotate | Download (33.4 kB)
1 | 255f5f86 | Panagiotis Kanavos | #region |
---|---|---|---|
2 | 255f5f86 | Panagiotis Kanavos | /* ----------------------------------------------------------------------- |
3 | 255f5f86 | Panagiotis Kanavos | * <copyright file="ShellExtLib.cs" company="GRNet"> |
4 | 255f5f86 | Panagiotis Kanavos | * |
5 | 255f5f86 | Panagiotis Kanavos | * Copyright 2011-2012 GRNET S.A. All rights reserved. |
6 | 255f5f86 | Panagiotis Kanavos | * |
7 | 255f5f86 | Panagiotis Kanavos | * Redistribution and use in source and binary forms, with or |
8 | 255f5f86 | Panagiotis Kanavos | * without modification, are permitted provided that the following |
9 | 255f5f86 | Panagiotis Kanavos | * conditions are met: |
10 | 255f5f86 | Panagiotis Kanavos | * |
11 | 255f5f86 | Panagiotis Kanavos | * 1. Redistributions of source code must retain the above |
12 | 255f5f86 | Panagiotis Kanavos | * copyright notice, this list of conditions and the following |
13 | 255f5f86 | Panagiotis Kanavos | * disclaimer. |
14 | 255f5f86 | Panagiotis Kanavos | * |
15 | 255f5f86 | Panagiotis Kanavos | * 2. Redistributions in binary form must reproduce the above |
16 | 255f5f86 | Panagiotis Kanavos | * copyright notice, this list of conditions and the following |
17 | 255f5f86 | Panagiotis Kanavos | * disclaimer in the documentation and/or other materials |
18 | 255f5f86 | Panagiotis Kanavos | * provided with the distribution. |
19 | 255f5f86 | Panagiotis Kanavos | * |
20 | 255f5f86 | Panagiotis Kanavos | * |
21 | 255f5f86 | Panagiotis Kanavos | * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
22 | 255f5f86 | Panagiotis Kanavos | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
23 | 255f5f86 | Panagiotis Kanavos | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
24 | 255f5f86 | Panagiotis Kanavos | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
25 | 255f5f86 | Panagiotis Kanavos | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
26 | 255f5f86 | Panagiotis Kanavos | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
27 | 255f5f86 | Panagiotis Kanavos | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
28 | 255f5f86 | Panagiotis Kanavos | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
29 | 255f5f86 | Panagiotis Kanavos | * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
30 | 255f5f86 | Panagiotis Kanavos | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
31 | 255f5f86 | Panagiotis Kanavos | * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
32 | 255f5f86 | Panagiotis Kanavos | * POSSIBILITY OF SUCH DAMAGE. |
33 | 255f5f86 | Panagiotis Kanavos | * |
34 | 255f5f86 | Panagiotis Kanavos | * The views and conclusions contained in the software and |
35 | 255f5f86 | Panagiotis Kanavos | * documentation are those of the authors and should not be |
36 | 255f5f86 | Panagiotis Kanavos | * interpreted as representing official policies, either expressed |
37 | 255f5f86 | Panagiotis Kanavos | * or implied, of GRNET S.A. |
38 | 255f5f86 | Panagiotis Kanavos | * </copyright> |
39 | 255f5f86 | Panagiotis Kanavos | * ----------------------------------------------------------------------- |
40 | 255f5f86 | Panagiotis Kanavos | */ |
41 | 255f5f86 | Panagiotis Kanavos | #endregion |
42 | 255f5f86 | Panagiotis Kanavos | using System; |
43 | d78cbf09 | Panagiotis Kanavos | using System.Diagnostics; |
44 | d78cbf09 | Panagiotis Kanavos | using System.Text; |
45 | d78cbf09 | Panagiotis Kanavos | using Microsoft.Win32; |
46 | d78cbf09 | Panagiotis Kanavos | using System.Runtime.InteropServices; |
47 | d78cbf09 | Panagiotis Kanavos | using System.Runtime.InteropServices.ComTypes; |
48 | d78cbf09 | Panagiotis Kanavos | |
49 | d78cbf09 | Panagiotis Kanavos | |
50 | d78cbf09 | Panagiotis Kanavos | namespace Pithos.ShellExtensions |
51 | d78cbf09 | Panagiotis Kanavos | { |
52 | d78cbf09 | Panagiotis Kanavos | #region Shell Interfaces |
53 | d78cbf09 | Panagiotis Kanavos | [Flags] |
54 | d78cbf09 | Panagiotis Kanavos | public enum ISIOI |
55 | d78cbf09 | Panagiotis Kanavos | { |
56 | d78cbf09 | Panagiotis Kanavos | ISIOI_ICONFILE = 1, |
57 | d78cbf09 | Panagiotis Kanavos | ISIOI_ICONINDEX = 2 |
58 | d78cbf09 | Panagiotis Kanavos | } |
59 | d78cbf09 | Panagiotis Kanavos | |
60 | d78cbf09 | Panagiotis Kanavos | [ComVisible(false)] |
61 | d78cbf09 | Panagiotis Kanavos | [ComImport] |
62 | d78cbf09 | Panagiotis Kanavos | [Guid("0C6C4200-C589-11D0-999A-00C04FD655E1")] |
63 | d78cbf09 | Panagiotis Kanavos | [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] |
64 | d78cbf09 | Panagiotis Kanavos | public interface IShellIconOverlayIdentifier |
65 | d78cbf09 | Panagiotis Kanavos | { |
66 | d78cbf09 | Panagiotis Kanavos | |
67 | d78cbf09 | Panagiotis Kanavos | [PreserveSig] |
68 | d78cbf09 | Panagiotis Kanavos | int IsMemberOf( |
69 | d78cbf09 | Panagiotis Kanavos | [MarshalAs(UnmanagedType.LPWStr)] string path, |
70 | d78cbf09 | Panagiotis Kanavos | |
71 | d78cbf09 | Panagiotis Kanavos | uint attributes); |
72 | d78cbf09 | Panagiotis Kanavos | |
73 | d78cbf09 | Panagiotis Kanavos | [PreserveSig] |
74 | d78cbf09 | Panagiotis Kanavos | int GetOverlayInfo( |
75 | d78cbf09 | Panagiotis Kanavos | IntPtr iconFileBuffer, |
76 | d78cbf09 | Panagiotis Kanavos | int iconFileBufferSize, |
77 | d78cbf09 | Panagiotis Kanavos | out int iconIndex, |
78 | d78cbf09 | Panagiotis Kanavos | out uint flags); |
79 | d78cbf09 | Panagiotis Kanavos | |
80 | d78cbf09 | Panagiotis Kanavos | [PreserveSig] |
81 | d78cbf09 | Panagiotis Kanavos | int GetPriority( |
82 | d78cbf09 | Panagiotis Kanavos | out int priority); |
83 | d78cbf09 | Panagiotis Kanavos | |
84 | d78cbf09 | Panagiotis Kanavos | } |
85 | d78cbf09 | Panagiotis Kanavos | |
86 | d78cbf09 | Panagiotis Kanavos | |
87 | d78cbf09 | Panagiotis Kanavos | |
88 | d78cbf09 | Panagiotis Kanavos | [ComImport(), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] |
89 | d78cbf09 | Panagiotis Kanavos | [Guid("000214e8-0000-0000-c000-000000000046")] |
90 | d78cbf09 | Panagiotis Kanavos | internal interface IShellExtInit |
91 | d78cbf09 | Panagiotis Kanavos | { |
92 | d78cbf09 | Panagiotis Kanavos | void Initialize( |
93 | d78cbf09 | Panagiotis Kanavos | IntPtr /*LPCITEMIDLIST*/ pidlFolder, |
94 | d78cbf09 | Panagiotis Kanavos | IntPtr /*LPDATAOBJECT*/ pDataObj, |
95 | d78cbf09 | Panagiotis Kanavos | IntPtr /*HKEY*/ hKeyProgID); |
96 | d78cbf09 | Panagiotis Kanavos | } |
97 | d78cbf09 | Panagiotis Kanavos | |
98 | d78cbf09 | Panagiotis Kanavos | |
99 | d78cbf09 | Panagiotis Kanavos | [ComImport(), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] |
100 | d78cbf09 | Panagiotis Kanavos | [Guid("000214e4-0000-0000-c000-000000000046")] |
101 | d78cbf09 | Panagiotis Kanavos | internal interface IContextMenu |
102 | d78cbf09 | Panagiotis Kanavos | { |
103 | d78cbf09 | Panagiotis Kanavos | [PreserveSig] |
104 | d78cbf09 | Panagiotis Kanavos | int QueryContextMenu( |
105 | d78cbf09 | Panagiotis Kanavos | IntPtr /*HMENU*/ hMenu, |
106 | d78cbf09 | Panagiotis Kanavos | uint iMenu, |
107 | d78cbf09 | Panagiotis Kanavos | uint idCmdFirst, |
108 | d78cbf09 | Panagiotis Kanavos | uint idCmdLast, |
109 | d78cbf09 | Panagiotis Kanavos | uint uFlags); |
110 | d78cbf09 | Panagiotis Kanavos | |
111 | d78cbf09 | Panagiotis Kanavos | void InvokeCommand(IntPtr pici); |
112 | d78cbf09 | Panagiotis Kanavos | |
113 | d78cbf09 | Panagiotis Kanavos | void GetCommandString( |
114 | d78cbf09 | Panagiotis Kanavos | UIntPtr idCmd, |
115 | d78cbf09 | Panagiotis Kanavos | uint uFlags, |
116 | d78cbf09 | Panagiotis Kanavos | IntPtr pReserved, |
117 | d78cbf09 | Panagiotis Kanavos | StringBuilder pszName, |
118 | d78cbf09 | Panagiotis Kanavos | uint cchMax); |
119 | d78cbf09 | Panagiotis Kanavos | } |
120 | d78cbf09 | Panagiotis Kanavos | |
121 | d78cbf09 | Panagiotis Kanavos | #endregion |
122 | d78cbf09 | Panagiotis Kanavos | |
123 | d78cbf09 | Panagiotis Kanavos | |
124 | d78cbf09 | Panagiotis Kanavos | #region Shell Registration |
125 | d78cbf09 | Panagiotis Kanavos | |
126 | d78cbf09 | Panagiotis Kanavos | internal class ShellExtReg |
127 | d78cbf09 | Panagiotis Kanavos | { |
128 | d78cbf09 | Panagiotis Kanavos | private const string _approvedKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved"; |
129 | d78cbf09 | Panagiotis Kanavos | |
130 | d78cbf09 | Panagiotis Kanavos | public static void RegisterIconOverlayIdentifier(Guid clsid, |
131 | d78cbf09 | Panagiotis Kanavos | string friendlyName) |
132 | d78cbf09 | Panagiotis Kanavos | { |
133 | d78cbf09 | Panagiotis Kanavos | if (clsid == Guid.Empty) |
134 | d78cbf09 | Panagiotis Kanavos | { |
135 | d78cbf09 | Panagiotis Kanavos | throw new ArgumentException("clsid must not be empty"); |
136 | d78cbf09 | Panagiotis Kanavos | } |
137 | d78cbf09 | Panagiotis Kanavos | if (string.IsNullOrEmpty(friendlyName)) |
138 | d78cbf09 | Panagiotis Kanavos | { |
139 | d78cbf09 | Panagiotis Kanavos | throw new ArgumentException("friendlyName must not be null or empty"); |
140 | d78cbf09 | Panagiotis Kanavos | } |
141 | d78cbf09 | Panagiotis Kanavos | |
142 | 29672672 | Panagiotis Kanavos | // Create the key HKLM\SOFTWARE\TortoiseOverlays\<IconName>\Pithos={<CLSID>}. |
143 | 29672672 | Panagiotis Kanavos | string keyName = string.Format(@"SOFTWARE\TortoiseOverlays\{0}", |
144 | d78cbf09 | Panagiotis Kanavos | friendlyName); |
145 | 29672672 | Panagiotis Kanavos | using (RegistryKey key = Registry.LocalMachine.OpenSubKey(keyName,true)) |
146 | d78cbf09 | Panagiotis Kanavos | { |
147 | d78cbf09 | Panagiotis Kanavos | // Set the default value of the key. |
148 | d78cbf09 | Panagiotis Kanavos | if (key != null)//&& !string.IsNullOrEmpty(clsid.ToString("B"))) |
149 | d78cbf09 | Panagiotis Kanavos | { |
150 | 29672672 | Panagiotis Kanavos | key.SetValue("Pithos", clsid.ToString("B"),RegistryValueKind.String); |
151 | d78cbf09 | Panagiotis Kanavos | } |
152 | d78cbf09 | Panagiotis Kanavos | } |
153 | d78cbf09 | Panagiotis Kanavos | } |
154 | d78cbf09 | Panagiotis Kanavos | |
155 | d78cbf09 | Panagiotis Kanavos | internal static void UnregisterIconOverlayIdentifier(Guid clsid, |
156 | d78cbf09 | Panagiotis Kanavos | string friendlyName) |
157 | d78cbf09 | Panagiotis Kanavos | { |
158 | d78cbf09 | Panagiotis Kanavos | if (clsid == null) |
159 | d78cbf09 | Panagiotis Kanavos | { |
160 | d78cbf09 | Panagiotis Kanavos | throw new ArgumentException("clsid must not be null"); |
161 | d78cbf09 | Panagiotis Kanavos | } |
162 | d78cbf09 | Panagiotis Kanavos | if (string.IsNullOrEmpty(friendlyName)) |
163 | d78cbf09 | Panagiotis Kanavos | { |
164 | d78cbf09 | Panagiotis Kanavos | throw new ArgumentException("friendlyName must not be null or empty"); |
165 | d78cbf09 | Panagiotis Kanavos | } |
166 | d78cbf09 | Panagiotis Kanavos | |
167 | d78cbf09 | Panagiotis Kanavos | |
168 | 29672672 | Panagiotis Kanavos | string keyName = string.Format(@"SOFTWARE\TortoiseOverlays\{0}", |
169 | d78cbf09 | Panagiotis Kanavos | friendlyName); |
170 | 29672672 | Panagiotis Kanavos | using (RegistryKey key = Registry.LocalMachine.OpenSubKey(keyName, true)) |
171 | 29672672 | Panagiotis Kanavos | { |
172 | 29672672 | Panagiotis Kanavos | // Set the default value of the key. |
173 | 29672672 | Panagiotis Kanavos | if (key != null)//&& !string.IsNullOrEmpty(clsid.ToString("B"))) |
174 | 29672672 | Panagiotis Kanavos | { |
175 | 29672672 | Panagiotis Kanavos | key.DeleteValue("Pithos"); |
176 | 29672672 | Panagiotis Kanavos | } |
177 | 29672672 | Panagiotis Kanavos | } |
178 | d78cbf09 | Panagiotis Kanavos | } |
179 | d78cbf09 | Panagiotis Kanavos | |
180 | d78cbf09 | Panagiotis Kanavos | |
181 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
182 | d78cbf09 | Panagiotis Kanavos | /// Register the context menu handler. |
183 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
184 | d78cbf09 | Panagiotis Kanavos | /// <param name="clsid">The CLSID of the component.</param> |
185 | d78cbf09 | Panagiotis Kanavos | /// <param name="fileType"> |
186 | d78cbf09 | Panagiotis Kanavos | /// The file type that the context menu handler is associated with. For |
187 | d78cbf09 | Panagiotis Kanavos | /// example, '*' means all file types; '.txt' means all .txt files. The |
188 | d78cbf09 | Panagiotis Kanavos | /// parameter must not be NULL or an empty string. |
189 | d78cbf09 | Panagiotis Kanavos | /// </param> |
190 | d78cbf09 | Panagiotis Kanavos | /// <param name="friendlyName">The friendly name of the component.</param> |
191 | d78cbf09 | Panagiotis Kanavos | public static void RegisterShellExtContextMenuHandler(Guid clsid, |
192 | d78cbf09 | Panagiotis Kanavos | string fileType, string friendlyName) |
193 | d78cbf09 | Panagiotis Kanavos | { |
194 | d78cbf09 | Panagiotis Kanavos | if (clsid == Guid.Empty) |
195 | d78cbf09 | Panagiotis Kanavos | { |
196 | d78cbf09 | Panagiotis Kanavos | throw new ArgumentException("clsid must not be empty"); |
197 | d78cbf09 | Panagiotis Kanavos | } |
198 | d78cbf09 | Panagiotis Kanavos | if (string.IsNullOrEmpty(fileType)) |
199 | d78cbf09 | Panagiotis Kanavos | { |
200 | d78cbf09 | Panagiotis Kanavos | throw new ArgumentException("fileType must not be null or empty"); |
201 | d78cbf09 | Panagiotis Kanavos | } |
202 | d78cbf09 | Panagiotis Kanavos | |
203 | d78cbf09 | Panagiotis Kanavos | // If fileType starts with '.', try to read the default value of the |
204 | d78cbf09 | Panagiotis Kanavos | // HKCR\<File Type> key which contains the ProgID to which the file type |
205 | d78cbf09 | Panagiotis Kanavos | // is linked. |
206 | d78cbf09 | Panagiotis Kanavos | if (fileType.StartsWith(".")) |
207 | aba9e6d9 | Panagiotis Kanavos | { |
208 | d78cbf09 | Panagiotis Kanavos | using (RegistryKey key = Registry.ClassesRoot.OpenSubKey(fileType)) |
209 | d78cbf09 | Panagiotis Kanavos | { |
210 | d78cbf09 | Panagiotis Kanavos | if (key != null) |
211 | d78cbf09 | Panagiotis Kanavos | { |
212 | d78cbf09 | Panagiotis Kanavos | // If the key exists and its default value is not empty, use |
213 | d78cbf09 | Panagiotis Kanavos | // the ProgID as the file type. |
214 | d78cbf09 | Panagiotis Kanavos | string defaultVal = key.GetValue(null) as string; |
215 | d78cbf09 | Panagiotis Kanavos | if (!string.IsNullOrEmpty(defaultVal)) |
216 | d78cbf09 | Panagiotis Kanavos | { |
217 | d78cbf09 | Panagiotis Kanavos | fileType = defaultVal; |
218 | d78cbf09 | Panagiotis Kanavos | } |
219 | d78cbf09 | Panagiotis Kanavos | } |
220 | d78cbf09 | Panagiotis Kanavos | } |
221 | d78cbf09 | Panagiotis Kanavos | } |
222 | d78cbf09 | Panagiotis Kanavos | |
223 | d78cbf09 | Panagiotis Kanavos | // Create the key HKCR\<File Type>\shellex\ContextMenuHandlers\{<CLSID>}. |
224 | d78cbf09 | Panagiotis Kanavos | string keyName = string.Format(@"{0}\shellex\ContextMenuHandlers\{1}", |
225 | d78cbf09 | Panagiotis Kanavos | fileType, friendlyName); |
226 | d78cbf09 | Panagiotis Kanavos | using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(keyName)) |
227 | d78cbf09 | Panagiotis Kanavos | { |
228 | d78cbf09 | Panagiotis Kanavos | // Set the default value of the key. |
229 | d78cbf09 | Panagiotis Kanavos | if (key != null)//&& !string.IsNullOrEmpty(clsid.ToString("B"))) |
230 | d78cbf09 | Panagiotis Kanavos | { |
231 | d78cbf09 | Panagiotis Kanavos | key.SetValue(null, clsid.ToString("B")); |
232 | d78cbf09 | Panagiotis Kanavos | } |
233 | d78cbf09 | Panagiotis Kanavos | } |
234 | d78cbf09 | Panagiotis Kanavos | } |
235 | d78cbf09 | Panagiotis Kanavos | |
236 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
237 | d78cbf09 | Panagiotis Kanavos | /// Unregister the context menu handler. |
238 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
239 | d78cbf09 | Panagiotis Kanavos | /// <param name="clsid">The CLSID of the component.</param> |
240 | d78cbf09 | Panagiotis Kanavos | /// <param name="fileType"> |
241 | d78cbf09 | Panagiotis Kanavos | /// The file type that the context menu handler is associated with. For |
242 | d78cbf09 | Panagiotis Kanavos | /// example, '*' means all file types; '.txt' means all .txt files. The |
243 | d78cbf09 | Panagiotis Kanavos | /// parameter must not be NULL or an empty string. |
244 | d78cbf09 | Panagiotis Kanavos | /// </param> |
245 | d78cbf09 | Panagiotis Kanavos | public static void UnregisterShellExtContextMenuHandler(Guid clsid, |
246 | d78cbf09 | Panagiotis Kanavos | string fileType, string friendlyName) |
247 | d78cbf09 | Panagiotis Kanavos | { |
248 | d78cbf09 | Panagiotis Kanavos | if (clsid == null) |
249 | d78cbf09 | Panagiotis Kanavos | { |
250 | d78cbf09 | Panagiotis Kanavos | throw new ArgumentException("clsid must not be null"); |
251 | d78cbf09 | Panagiotis Kanavos | } |
252 | d78cbf09 | Panagiotis Kanavos | if (string.IsNullOrEmpty(fileType)) |
253 | d78cbf09 | Panagiotis Kanavos | { |
254 | d78cbf09 | Panagiotis Kanavos | throw new ArgumentException("fileType must not be null or empty"); |
255 | d78cbf09 | Panagiotis Kanavos | } |
256 | d78cbf09 | Panagiotis Kanavos | |
257 | d78cbf09 | Panagiotis Kanavos | // If fileType starts with '.', try to read the default value of the |
258 | d78cbf09 | Panagiotis Kanavos | // HKCR\<File Type> key which contains the ProgID to which the file type |
259 | d78cbf09 | Panagiotis Kanavos | // is linked. |
260 | d78cbf09 | Panagiotis Kanavos | if (fileType.StartsWith(".")) |
261 | d78cbf09 | Panagiotis Kanavos | { |
262 | d78cbf09 | Panagiotis Kanavos | using (RegistryKey key = Registry.ClassesRoot.OpenSubKey(fileType)) |
263 | d78cbf09 | Panagiotis Kanavos | { |
264 | d78cbf09 | Panagiotis Kanavos | if (key != null) |
265 | d78cbf09 | Panagiotis Kanavos | { |
266 | d78cbf09 | Panagiotis Kanavos | // If the key exists and its default value is not empty, use |
267 | d78cbf09 | Panagiotis Kanavos | // the ProgID as the file type. |
268 | d78cbf09 | Panagiotis Kanavos | string defaultVal = key.GetValue(null) as string; |
269 | d78cbf09 | Panagiotis Kanavos | if (!string.IsNullOrEmpty(defaultVal)) |
270 | d78cbf09 | Panagiotis Kanavos | { |
271 | d78cbf09 | Panagiotis Kanavos | fileType = defaultVal; |
272 | d78cbf09 | Panagiotis Kanavos | } |
273 | d78cbf09 | Panagiotis Kanavos | } |
274 | d78cbf09 | Panagiotis Kanavos | } |
275 | d78cbf09 | Panagiotis Kanavos | } |
276 | d78cbf09 | Panagiotis Kanavos | |
277 | d78cbf09 | Panagiotis Kanavos | // Remove the key HKCR\<File Type>\shellex\ContextMenuHandlers\{<CLSID>}. |
278 | d78cbf09 | Panagiotis Kanavos | string keyName = string.Format(@"{0}\shellex\ContextMenuHandlers\{1}", |
279 | d78cbf09 | Panagiotis Kanavos | fileType, friendlyName); |
280 | d78cbf09 | Panagiotis Kanavos | Registry.ClassesRoot.DeleteSubKeyTree(keyName, false); |
281 | d78cbf09 | Panagiotis Kanavos | } |
282 | d78cbf09 | Panagiotis Kanavos | |
283 | d78cbf09 | Panagiotis Kanavos | public static void MarkApproved(Guid guid, string friendlyName) |
284 | d78cbf09 | Panagiotis Kanavos | { |
285 | 0eea575a | Panagiotis Kanavos | Debug.WriteLine(String.Format("Marking approved {0} {1}", guid, friendlyName), LogCategories.Shell); |
286 | d78cbf09 | Panagiotis Kanavos | using (RegistryKey key = Registry.LocalMachine.OpenSubKey(_approvedKey)) |
287 | d78cbf09 | Panagiotis Kanavos | { |
288 | d78cbf09 | Panagiotis Kanavos | // Set the default value of the key. |
289 | d78cbf09 | Panagiotis Kanavos | if (key != null)//&& !string.IsNullOrEmpty(clsid.ToString("B"))) |
290 | d78cbf09 | Panagiotis Kanavos | { |
291 | d78cbf09 | Panagiotis Kanavos | key.SetValue(guid.ToString("B"), friendlyName, RegistryValueKind.String); |
292 | d78cbf09 | Panagiotis Kanavos | } |
293 | d78cbf09 | Panagiotis Kanavos | else |
294 | d78cbf09 | Panagiotis Kanavos | { |
295 | 0eea575a | Panagiotis Kanavos | Debug.WriteLine("Error - failed to open key " + _approvedKey,LogCategories.Shell); |
296 | d78cbf09 | Panagiotis Kanavos | } |
297 | d78cbf09 | Panagiotis Kanavos | } |
298 | d78cbf09 | Panagiotis Kanavos | } |
299 | d78cbf09 | Panagiotis Kanavos | |
300 | 7e26c075 | Panagiotis Kanavos | public static void RemoveApproved(Guid guid) |
301 | d78cbf09 | Panagiotis Kanavos | { |
302 | d78cbf09 | Panagiotis Kanavos | using (RegistryKey key = Registry.LocalMachine.OpenSubKey(_approvedKey)) |
303 | d78cbf09 | Panagiotis Kanavos | { |
304 | d78cbf09 | Panagiotis Kanavos | // Set the default value of the key. |
305 | d78cbf09 | Panagiotis Kanavos | if (key != null)//&& !string.IsNullOrEmpty(clsid.ToString("B"))) |
306 | d78cbf09 | Panagiotis Kanavos | { |
307 | d78cbf09 | Panagiotis Kanavos | key.DeleteValue(guid.ToString("B"), false); |
308 | d78cbf09 | Panagiotis Kanavos | } |
309 | d78cbf09 | Panagiotis Kanavos | else |
310 | d78cbf09 | Panagiotis Kanavos | { |
311 | 0eea575a | Panagiotis Kanavos | Debug.WriteLine("Error - failed to open key " + _approvedKey, LogCategories.Shell); |
312 | d78cbf09 | Panagiotis Kanavos | } |
313 | d78cbf09 | Panagiotis Kanavos | } |
314 | d78cbf09 | Panagiotis Kanavos | } |
315 | d78cbf09 | Panagiotis Kanavos | } |
316 | d78cbf09 | Panagiotis Kanavos | |
317 | d78cbf09 | Panagiotis Kanavos | #endregion |
318 | d78cbf09 | Panagiotis Kanavos | |
319 | d78cbf09 | Panagiotis Kanavos | |
320 | d78cbf09 | Panagiotis Kanavos | #region Enums & Structs |
321 | d78cbf09 | Panagiotis Kanavos | |
322 | d78cbf09 | Panagiotis Kanavos | #region enum HChangeNotifyEventID |
323 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
324 | d78cbf09 | Panagiotis Kanavos | /// Describes the event that has occurred. |
325 | d78cbf09 | Panagiotis Kanavos | /// Typically, only one event is specified at a time. |
326 | d78cbf09 | Panagiotis Kanavos | /// If more than one event is specified, the values contained |
327 | d78cbf09 | Panagiotis Kanavos | /// in the <i>dwItem1</i> and <i>dwItem2</i> |
328 | d78cbf09 | Panagiotis Kanavos | /// parameters must be the same, respectively, for all specified events. |
329 | d78cbf09 | Panagiotis Kanavos | /// This parameter can be one or more of the following values. |
330 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
331 | d78cbf09 | Panagiotis Kanavos | /// <remarks> |
332 | d78cbf09 | Panagiotis Kanavos | /// <para><b>Windows NT/2000/XP:</b> <i>dwItem2</i> contains the index |
333 | d78cbf09 | Panagiotis Kanavos | /// in the system image list that has changed. |
334 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> is not used and should be <see langword="null"/>.</para> |
335 | d78cbf09 | Panagiotis Kanavos | /// <para><b>Windows 95/98:</b> <i>dwItem1</i> contains the index |
336 | d78cbf09 | Panagiotis Kanavos | /// in the system image list that has changed. |
337 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>.</para> |
338 | d78cbf09 | Panagiotis Kanavos | /// </remarks> |
339 | d78cbf09 | Panagiotis Kanavos | [Flags] |
340 | d78cbf09 | Panagiotis Kanavos | enum HChangeNotifyEventID |
341 | d78cbf09 | Panagiotis Kanavos | { |
342 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
343 | d78cbf09 | Panagiotis Kanavos | /// All events have occurred. |
344 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
345 | d78cbf09 | Panagiotis Kanavos | SHCNE_ALLEVENTS = 0x7FFFFFFF, |
346 | d78cbf09 | Panagiotis Kanavos | |
347 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
348 | d78cbf09 | Panagiotis Kanavos | /// A file type association has changed. <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> |
349 | d78cbf09 | Panagiotis Kanavos | /// must be specified in the <i>uFlags</i> parameter. |
350 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> and <i>dwItem2</i> are not used and must be <see langword="null"/>. |
351 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
352 | d78cbf09 | Panagiotis Kanavos | SHCNE_ASSOCCHANGED = 0x08000000, |
353 | d78cbf09 | Panagiotis Kanavos | |
354 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
355 | d78cbf09 | Panagiotis Kanavos | /// The attributes of an item or folder have changed. |
356 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
357 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
358 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the item or folder that has changed. |
359 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
360 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
361 | d78cbf09 | Panagiotis Kanavos | SHCNE_ATTRIBUTES = 0x00000800, |
362 | d78cbf09 | Panagiotis Kanavos | |
363 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
364 | d78cbf09 | Panagiotis Kanavos | /// A nonfolder item has been created. |
365 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
366 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
367 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the item that was created. |
368 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
369 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
370 | d78cbf09 | Panagiotis Kanavos | SHCNE_CREATE = 0x00000002, |
371 | d78cbf09 | Panagiotis Kanavos | |
372 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
373 | d78cbf09 | Panagiotis Kanavos | /// A nonfolder item has been deleted. |
374 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
375 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
376 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the item that was deleted. |
377 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
378 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
379 | d78cbf09 | Panagiotis Kanavos | SHCNE_DELETE = 0x00000004, |
380 | d78cbf09 | Panagiotis Kanavos | |
381 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
382 | d78cbf09 | Panagiotis Kanavos | /// A drive has been added. |
383 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
384 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
385 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the root of the drive that was added. |
386 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
387 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
388 | d78cbf09 | Panagiotis Kanavos | SHCNE_DRIVEADD = 0x00000100, |
389 | d78cbf09 | Panagiotis Kanavos | |
390 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
391 | d78cbf09 | Panagiotis Kanavos | /// A drive has been added and the Shell should create a new window for the drive. |
392 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
393 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
394 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the root of the drive that was added. |
395 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
396 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
397 | d78cbf09 | Panagiotis Kanavos | SHCNE_DRIVEADDGUI = 0x00010000, |
398 | d78cbf09 | Panagiotis Kanavos | |
399 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
400 | d78cbf09 | Panagiotis Kanavos | /// A drive has been removed. <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
401 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
402 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the root of the drive that was removed. |
403 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
404 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
405 | d78cbf09 | Panagiotis Kanavos | SHCNE_DRIVEREMOVED = 0x00000080, |
406 | d78cbf09 | Panagiotis Kanavos | |
407 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
408 | d78cbf09 | Panagiotis Kanavos | /// Not currently used. |
409 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
410 | d78cbf09 | Panagiotis Kanavos | SHCNE_EXTENDED_EVENT = 0x04000000, |
411 | d78cbf09 | Panagiotis Kanavos | |
412 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
413 | d78cbf09 | Panagiotis Kanavos | /// The amount of free space on a drive has changed. |
414 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
415 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
416 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the root of the drive on which the free space changed. |
417 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
418 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
419 | d78cbf09 | Panagiotis Kanavos | SHCNE_FREESPACE = 0x00040000, |
420 | d78cbf09 | Panagiotis Kanavos | |
421 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
422 | d78cbf09 | Panagiotis Kanavos | /// Storage media has been inserted into a drive. |
423 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
424 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
425 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the root of the drive that contains the new media. |
426 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
427 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
428 | d78cbf09 | Panagiotis Kanavos | SHCNE_MEDIAINSERTED = 0x00000020, |
429 | d78cbf09 | Panagiotis Kanavos | |
430 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
431 | d78cbf09 | Panagiotis Kanavos | /// Storage media has been removed from a drive. |
432 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
433 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
434 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the root of the drive from which the media was removed. |
435 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
436 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
437 | d78cbf09 | Panagiotis Kanavos | SHCNE_MEDIAREMOVED = 0x00000040, |
438 | d78cbf09 | Panagiotis Kanavos | |
439 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
440 | d78cbf09 | Panagiotis Kanavos | /// A folder has been created. <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> |
441 | d78cbf09 | Panagiotis Kanavos | /// or <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
442 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the folder that was created. |
443 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
444 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
445 | d78cbf09 | Panagiotis Kanavos | SHCNE_MKDIR = 0x00000008, |
446 | d78cbf09 | Panagiotis Kanavos | |
447 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
448 | d78cbf09 | Panagiotis Kanavos | /// A folder on the local computer is being shared via the network. |
449 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
450 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
451 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the folder that is being shared. |
452 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
453 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
454 | d78cbf09 | Panagiotis Kanavos | SHCNE_NETSHARE = 0x00000200, |
455 | d78cbf09 | Panagiotis Kanavos | |
456 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
457 | d78cbf09 | Panagiotis Kanavos | /// A folder on the local computer is no longer being shared via the network. |
458 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
459 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
460 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the folder that is no longer being shared. |
461 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
462 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
463 | d78cbf09 | Panagiotis Kanavos | SHCNE_NETUNSHARE = 0x00000400, |
464 | d78cbf09 | Panagiotis Kanavos | |
465 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
466 | d78cbf09 | Panagiotis Kanavos | /// The name of a folder has changed. |
467 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
468 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
469 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the previous pointer to an item identifier list (PIDL) or name of the folder. |
470 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> contains the new PIDL or name of the folder. |
471 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
472 | d78cbf09 | Panagiotis Kanavos | SHCNE_RENAMEFOLDER = 0x00020000, |
473 | d78cbf09 | Panagiotis Kanavos | |
474 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
475 | d78cbf09 | Panagiotis Kanavos | /// The name of a nonfolder item has changed. |
476 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
477 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
478 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the previous PIDL or name of the item. |
479 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> contains the new PIDL or name of the item. |
480 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
481 | d78cbf09 | Panagiotis Kanavos | SHCNE_RENAMEITEM = 0x00000001, |
482 | d78cbf09 | Panagiotis Kanavos | |
483 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
484 | d78cbf09 | Panagiotis Kanavos | /// A folder has been removed. |
485 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
486 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
487 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the folder that was removed. |
488 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
489 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
490 | d78cbf09 | Panagiotis Kanavos | SHCNE_RMDIR = 0x00000010, |
491 | d78cbf09 | Panagiotis Kanavos | |
492 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
493 | d78cbf09 | Panagiotis Kanavos | /// The computer has disconnected from a server. |
494 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
495 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
496 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the server from which the computer was disconnected. |
497 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
498 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
499 | d78cbf09 | Panagiotis Kanavos | SHCNE_SERVERDISCONNECT = 0x00004000, |
500 | d78cbf09 | Panagiotis Kanavos | |
501 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
502 | d78cbf09 | Panagiotis Kanavos | /// The contents of an existing folder have changed, |
503 | d78cbf09 | Panagiotis Kanavos | /// but the folder still exists and has not been renamed. |
504 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_IDLIST"/> or |
505 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_PATH"/> must be specified in <i>uFlags</i>. |
506 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> contains the folder that has changed. |
507 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem2</i> is not used and should be <see langword="null"/>. |
508 | d78cbf09 | Panagiotis Kanavos | /// If a folder has been created, deleted, or renamed, use SHCNE_MKDIR, SHCNE_RMDIR, or |
509 | d78cbf09 | Panagiotis Kanavos | /// SHCNE_RENAMEFOLDER, respectively, instead. |
510 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
511 | d78cbf09 | Panagiotis Kanavos | SHCNE_UPDATEDIR = 0x00001000, |
512 | d78cbf09 | Panagiotis Kanavos | |
513 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
514 | d78cbf09 | Panagiotis Kanavos | /// An image in the system image list has changed. |
515 | d78cbf09 | Panagiotis Kanavos | /// <see cref="HChangeNotifyFlags.SHCNF_DWORD"/> must be specified in <i>uFlags</i>. |
516 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
517 | d78cbf09 | Panagiotis Kanavos | SHCNE_UPDATEIMAGE = 0x00008000, |
518 | d78cbf09 | Panagiotis Kanavos | |
519 | d78cbf09 | Panagiotis Kanavos | } |
520 | d78cbf09 | Panagiotis Kanavos | #endregion // enum HChangeNotifyEventID |
521 | d78cbf09 | Panagiotis Kanavos | |
522 | d78cbf09 | Panagiotis Kanavos | #region public enum HChangeNotifyFlags |
523 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
524 | d78cbf09 | Panagiotis Kanavos | /// Flags that indicate the meaning of the <i>dwItem1</i> and <i>dwItem2</i> parameters. |
525 | d78cbf09 | Panagiotis Kanavos | /// The uFlags parameter must be one of the following values. |
526 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
527 | d78cbf09 | Panagiotis Kanavos | [Flags] |
528 | d78cbf09 | Panagiotis Kanavos | public enum HChangeNotifyFlags |
529 | d78cbf09 | Panagiotis Kanavos | { |
530 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
531 | d78cbf09 | Panagiotis Kanavos | /// The <i>dwItem1</i> and <i>dwItem2</i> parameters are DWORD values. |
532 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
533 | d78cbf09 | Panagiotis Kanavos | SHCNF_DWORD = 0x0003, |
534 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
535 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> and <i>dwItem2</i> are the addresses of ITEMIDLIST structures that |
536 | d78cbf09 | Panagiotis Kanavos | /// represent the item(s) affected by the change. |
537 | d78cbf09 | Panagiotis Kanavos | /// Each ITEMIDLIST must be relative to the desktop folder. |
538 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
539 | d78cbf09 | Panagiotis Kanavos | SHCNF_IDLIST = 0x0000, |
540 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
541 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> and <i>dwItem2</i> are the addresses of null-terminated strings of |
542 | d78cbf09 | Panagiotis Kanavos | /// maximum length MAX_PATH that contain the full path names |
543 | d78cbf09 | Panagiotis Kanavos | /// of the items affected by the change. |
544 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
545 | d78cbf09 | Panagiotis Kanavos | SHCNF_PATHA = 0x0001, |
546 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
547 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> and <i>dwItem2</i> are the addresses of null-terminated strings of |
548 | d78cbf09 | Panagiotis Kanavos | /// maximum length MAX_PATH that contain the full path names |
549 | d78cbf09 | Panagiotis Kanavos | /// of the items affected by the change. |
550 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
551 | d78cbf09 | Panagiotis Kanavos | SHCNF_PATHW = 0x0005, |
552 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
553 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> and <i>dwItem2</i> are the addresses of null-terminated strings that |
554 | d78cbf09 | Panagiotis Kanavos | /// represent the friendly names of the printer(s) affected by the change. |
555 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
556 | d78cbf09 | Panagiotis Kanavos | SHCNF_PRINTERA = 0x0002, |
557 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
558 | d78cbf09 | Panagiotis Kanavos | /// <i>dwItem1</i> and <i>dwItem2</i> are the addresses of null-terminated strings that |
559 | d78cbf09 | Panagiotis Kanavos | /// represent the friendly names of the printer(s) affected by the change. |
560 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
561 | d78cbf09 | Panagiotis Kanavos | SHCNF_PRINTERW = 0x0006, |
562 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
563 | d78cbf09 | Panagiotis Kanavos | /// The function should not return until the notification |
564 | d78cbf09 | Panagiotis Kanavos | /// has been delivered to all affected components. |
565 | d78cbf09 | Panagiotis Kanavos | /// As this flag modifies other data-type flags, it cannot by used by itself. |
566 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
567 | d78cbf09 | Panagiotis Kanavos | SHCNF_FLUSH = 0x1000, |
568 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
569 | d78cbf09 | Panagiotis Kanavos | /// The function should begin delivering notifications to all affected components |
570 | d78cbf09 | Panagiotis Kanavos | /// but should return as soon as the notification process has begun. |
571 | d78cbf09 | Panagiotis Kanavos | /// As this flag modifies other data-type flags, it cannot by used by itself. |
572 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
573 | d78cbf09 | Panagiotis Kanavos | SHCNF_FLUSHNOWAIT = 0x2000 |
574 | d78cbf09 | Panagiotis Kanavos | } |
575 | d78cbf09 | Panagiotis Kanavos | #endregion // enum HChangeNotifyFlags |
576 | d78cbf09 | Panagiotis Kanavos | |
577 | d78cbf09 | Panagiotis Kanavos | internal enum GCS : uint |
578 | d78cbf09 | Panagiotis Kanavos | { |
579 | d78cbf09 | Panagiotis Kanavos | GCS_VERBA = 0x00000000, |
580 | d78cbf09 | Panagiotis Kanavos | GCS_HELPTEXTA = 0x00000001, |
581 | d78cbf09 | Panagiotis Kanavos | GCS_VALIDATEA = 0x00000002, |
582 | d78cbf09 | Panagiotis Kanavos | GCS_VERBW = 0x00000004, |
583 | d78cbf09 | Panagiotis Kanavos | GCS_HELPTEXTW = 0x00000005, |
584 | d78cbf09 | Panagiotis Kanavos | GCS_VALIDATEW = 0x00000006, |
585 | d78cbf09 | Panagiotis Kanavos | GCS_VERBICONW = 0x00000014, |
586 | d78cbf09 | Panagiotis Kanavos | GCS_UNICODE = 0x00000004 |
587 | d78cbf09 | Panagiotis Kanavos | } |
588 | d78cbf09 | Panagiotis Kanavos | |
589 | d78cbf09 | Panagiotis Kanavos | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] |
590 | d78cbf09 | Panagiotis Kanavos | internal struct CMINVOKECOMMANDINFO |
591 | d78cbf09 | Panagiotis Kanavos | { |
592 | d78cbf09 | Panagiotis Kanavos | public uint cbSize; |
593 | d78cbf09 | Panagiotis Kanavos | public CMIC fMask; |
594 | d78cbf09 | Panagiotis Kanavos | public IntPtr hwnd; |
595 | d78cbf09 | Panagiotis Kanavos | public IntPtr verb; |
596 | d78cbf09 | Panagiotis Kanavos | [MarshalAs(UnmanagedType.LPStr)] |
597 | d78cbf09 | Panagiotis Kanavos | public string parameters; |
598 | d78cbf09 | Panagiotis Kanavos | [MarshalAs(UnmanagedType.LPStr)] |
599 | d78cbf09 | Panagiotis Kanavos | public string directory; |
600 | d78cbf09 | Panagiotis Kanavos | public int nShow; |
601 | d78cbf09 | Panagiotis Kanavos | public uint dwHotKey; |
602 | d78cbf09 | Panagiotis Kanavos | public IntPtr hIcon; |
603 | d78cbf09 | Panagiotis Kanavos | } |
604 | d78cbf09 | Panagiotis Kanavos | |
605 | d78cbf09 | Panagiotis Kanavos | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] |
606 | d78cbf09 | Panagiotis Kanavos | internal struct CMINVOKECOMMANDINFOEX |
607 | d78cbf09 | Panagiotis Kanavos | { |
608 | d78cbf09 | Panagiotis Kanavos | public uint cbSize; |
609 | d78cbf09 | Panagiotis Kanavos | public CMIC fMask; |
610 | d78cbf09 | Panagiotis Kanavos | public IntPtr hwnd; |
611 | d78cbf09 | Panagiotis Kanavos | public IntPtr verb; |
612 | d78cbf09 | Panagiotis Kanavos | [MarshalAs(UnmanagedType.LPStr)] |
613 | d78cbf09 | Panagiotis Kanavos | public string parameters; |
614 | d78cbf09 | Panagiotis Kanavos | [MarshalAs(UnmanagedType.LPStr)] |
615 | d78cbf09 | Panagiotis Kanavos | public string directory; |
616 | d78cbf09 | Panagiotis Kanavos | public int nShow; |
617 | d78cbf09 | Panagiotis Kanavos | public uint dwHotKey; |
618 | d78cbf09 | Panagiotis Kanavos | public IntPtr hIcon; |
619 | d78cbf09 | Panagiotis Kanavos | [MarshalAs(UnmanagedType.LPStr)] |
620 | d78cbf09 | Panagiotis Kanavos | public string title; |
621 | d78cbf09 | Panagiotis Kanavos | public IntPtr verbW; |
622 | d78cbf09 | Panagiotis Kanavos | public string parametersW; |
623 | d78cbf09 | Panagiotis Kanavos | public string directoryW; |
624 | d78cbf09 | Panagiotis Kanavos | public string titleW; |
625 | d78cbf09 | Panagiotis Kanavos | POINT ptInvoke; |
626 | d78cbf09 | Panagiotis Kanavos | } |
627 | d78cbf09 | Panagiotis Kanavos | |
628 | d78cbf09 | Panagiotis Kanavos | [Flags] |
629 | d78cbf09 | Panagiotis Kanavos | internal enum CMIC : uint |
630 | d78cbf09 | Panagiotis Kanavos | { |
631 | d78cbf09 | Panagiotis Kanavos | CMIC_MASK_ICON = 0x00000010, |
632 | d78cbf09 | Panagiotis Kanavos | CMIC_MASK_HOTKEY = 0x00000020, |
633 | d78cbf09 | Panagiotis Kanavos | CMIC_MASK_NOASYNC = 0x00000100, |
634 | d78cbf09 | Panagiotis Kanavos | CMIC_MASK_FLAG_NO_UI = 0x00000400, |
635 | d78cbf09 | Panagiotis Kanavos | CMIC_MASK_UNICODE = 0x00004000, |
636 | d78cbf09 | Panagiotis Kanavos | CMIC_MASK_NO_CONSOLE = 0x00008000, |
637 | d78cbf09 | Panagiotis Kanavos | CMIC_MASK_ASYNCOK = 0x00100000, |
638 | d78cbf09 | Panagiotis Kanavos | CMIC_MASK_NOZONECHECKS = 0x00800000, |
639 | d78cbf09 | Panagiotis Kanavos | CMIC_MASK_FLAG_LOG_USAGE = 0x04000000, |
640 | d78cbf09 | Panagiotis Kanavos | CMIC_MASK_SHIFT_DOWN = 0x10000000, |
641 | d78cbf09 | Panagiotis Kanavos | CMIC_MASK_PTINVOKE = 0x20000000, |
642 | d78cbf09 | Panagiotis Kanavos | CMIC_MASK_CONTROL_DOWN = 0x40000000 |
643 | d78cbf09 | Panagiotis Kanavos | } |
644 | d78cbf09 | Panagiotis Kanavos | |
645 | d78cbf09 | Panagiotis Kanavos | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] |
646 | d78cbf09 | Panagiotis Kanavos | public struct POINT |
647 | d78cbf09 | Panagiotis Kanavos | { |
648 | d78cbf09 | Panagiotis Kanavos | public int X; |
649 | d78cbf09 | Panagiotis Kanavos | public int Y; |
650 | d78cbf09 | Panagiotis Kanavos | } |
651 | d78cbf09 | Panagiotis Kanavos | |
652 | d78cbf09 | Panagiotis Kanavos | internal enum CLIPFORMAT : uint |
653 | d78cbf09 | Panagiotis Kanavos | { |
654 | d78cbf09 | Panagiotis Kanavos | CF_TEXT = 1, |
655 | d78cbf09 | Panagiotis Kanavos | CF_BITMAP = 2, |
656 | d78cbf09 | Panagiotis Kanavos | CF_METAFILEPICT = 3, |
657 | d78cbf09 | Panagiotis Kanavos | CF_SYLK = 4, |
658 | d78cbf09 | Panagiotis Kanavos | CF_DIF = 5, |
659 | d78cbf09 | Panagiotis Kanavos | CF_TIFF = 6, |
660 | d78cbf09 | Panagiotis Kanavos | CF_OEMTEXT = 7, |
661 | d78cbf09 | Panagiotis Kanavos | CF_DIB = 8, |
662 | d78cbf09 | Panagiotis Kanavos | CF_PALETTE = 9, |
663 | d78cbf09 | Panagiotis Kanavos | CF_PENDATA = 10, |
664 | d78cbf09 | Panagiotis Kanavos | CF_RIFF = 11, |
665 | d78cbf09 | Panagiotis Kanavos | CF_WAVE = 12, |
666 | d78cbf09 | Panagiotis Kanavos | CF_UNICODETEXT = 13, |
667 | d78cbf09 | Panagiotis Kanavos | CF_ENHMETAFILE = 14, |
668 | d78cbf09 | Panagiotis Kanavos | CF_HDROP = 15, |
669 | d78cbf09 | Panagiotis Kanavos | CF_LOCALE = 16, |
670 | d78cbf09 | Panagiotis Kanavos | CF_MAX = 17, |
671 | d78cbf09 | Panagiotis Kanavos | |
672 | d78cbf09 | Panagiotis Kanavos | CF_OWNERDISPLAY = 0x0080, |
673 | d78cbf09 | Panagiotis Kanavos | CF_DSPTEXT = 0x0081, |
674 | d78cbf09 | Panagiotis Kanavos | CF_DSPBITMAP = 0x0082, |
675 | d78cbf09 | Panagiotis Kanavos | CF_DSPMETAFILEPICT = 0x0083, |
676 | d78cbf09 | Panagiotis Kanavos | CF_DSPENHMETAFILE = 0x008E, |
677 | d78cbf09 | Panagiotis Kanavos | |
678 | d78cbf09 | Panagiotis Kanavos | CF_PRIVATEFIRST = 0x0200, |
679 | d78cbf09 | Panagiotis Kanavos | CF_PRIVATELAST = 0x02FF, |
680 | d78cbf09 | Panagiotis Kanavos | |
681 | d78cbf09 | Panagiotis Kanavos | CF_GDIOBJFIRST = 0x0300, |
682 | d78cbf09 | Panagiotis Kanavos | CF_GDIOBJLAST = 0x03FF |
683 | d78cbf09 | Panagiotis Kanavos | } |
684 | d78cbf09 | Panagiotis Kanavos | |
685 | d78cbf09 | Panagiotis Kanavos | [Flags] |
686 | d78cbf09 | Panagiotis Kanavos | internal enum CMF : uint |
687 | d78cbf09 | Panagiotis Kanavos | { |
688 | d78cbf09 | Panagiotis Kanavos | CMF_NORMAL = 0x00000000, |
689 | d78cbf09 | Panagiotis Kanavos | CMF_DEFAULTONLY = 0x00000001, |
690 | d78cbf09 | Panagiotis Kanavos | CMF_VERBSONLY = 0x00000002, |
691 | d78cbf09 | Panagiotis Kanavos | CMF_EXPLORE = 0x00000004, |
692 | d78cbf09 | Panagiotis Kanavos | CMF_NOVERBS = 0x00000008, |
693 | d78cbf09 | Panagiotis Kanavos | CMF_CANRENAME = 0x00000010, |
694 | d78cbf09 | Panagiotis Kanavos | CMF_NODEFAULT = 0x00000020, |
695 | d78cbf09 | Panagiotis Kanavos | CMF_INCLUDESTATIC = 0x00000040, |
696 | d78cbf09 | Panagiotis Kanavos | CMF_ITEMMENU = 0x00000080, |
697 | d78cbf09 | Panagiotis Kanavos | CMF_EXTENDEDVERBS = 0x00000100, |
698 | d78cbf09 | Panagiotis Kanavos | CMF_DISABLEDVERBS = 0x00000200, |
699 | d78cbf09 | Panagiotis Kanavos | CMF_ASYNCVERBSTATE = 0x00000400, |
700 | d78cbf09 | Panagiotis Kanavos | CMF_OPTIMIZEFORINVOKE = 0x00000800, |
701 | d78cbf09 | Panagiotis Kanavos | CMF_SYNCCASCADEMENU = 0x00001000, |
702 | d78cbf09 | Panagiotis Kanavos | CMF_DONOTPICKDEFAULT = 0x00002000, |
703 | d78cbf09 | Panagiotis Kanavos | CMF_RESERVED = 0xFFFF0000 |
704 | d78cbf09 | Panagiotis Kanavos | } |
705 | d78cbf09 | Panagiotis Kanavos | |
706 | d78cbf09 | Panagiotis Kanavos | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] |
707 | d78cbf09 | Panagiotis Kanavos | internal struct MENUITEMINFO |
708 | d78cbf09 | Panagiotis Kanavos | { |
709 | d78cbf09 | Panagiotis Kanavos | public uint cbSize; |
710 | d78cbf09 | Panagiotis Kanavos | public MIIM fMask; |
711 | d78cbf09 | Panagiotis Kanavos | public MFT fType; |
712 | d78cbf09 | Panagiotis Kanavos | public MFS fState; |
713 | d78cbf09 | Panagiotis Kanavos | public uint wID; |
714 | d78cbf09 | Panagiotis Kanavos | public IntPtr hSubMenu; |
715 | d78cbf09 | Panagiotis Kanavos | public IntPtr hbmpChecked; |
716 | d78cbf09 | Panagiotis Kanavos | public IntPtr hbmpUnchecked; |
717 | d78cbf09 | Panagiotis Kanavos | public UIntPtr dwItemData; |
718 | d78cbf09 | Panagiotis Kanavos | public string dwTypeData; |
719 | d78cbf09 | Panagiotis Kanavos | public uint cch; |
720 | d78cbf09 | Panagiotis Kanavos | public IntPtr hbmpItem; |
721 | d78cbf09 | Panagiotis Kanavos | } |
722 | d78cbf09 | Panagiotis Kanavos | |
723 | d78cbf09 | Panagiotis Kanavos | [Flags] |
724 | d78cbf09 | Panagiotis Kanavos | internal enum MIIM : uint |
725 | d78cbf09 | Panagiotis Kanavos | { |
726 | d78cbf09 | Panagiotis Kanavos | MIIM_STATE = 0x00000001, |
727 | d78cbf09 | Panagiotis Kanavos | MIIM_ID = 0x00000002, |
728 | d78cbf09 | Panagiotis Kanavos | MIIM_SUBMENU = 0x00000004, |
729 | d78cbf09 | Panagiotis Kanavos | MIIM_CHECKMARKS = 0x00000008, |
730 | d78cbf09 | Panagiotis Kanavos | MIIM_TYPE = 0x00000010, |
731 | d78cbf09 | Panagiotis Kanavos | MIIM_DATA = 0x00000020, |
732 | d78cbf09 | Panagiotis Kanavos | MIIM_STRING = 0x00000040, |
733 | d78cbf09 | Panagiotis Kanavos | MIIM_BITMAP = 0x00000080, |
734 | d78cbf09 | Panagiotis Kanavos | MIIM_FTYPE = 0x00000100 |
735 | d78cbf09 | Panagiotis Kanavos | } |
736 | 4d301e8e | Panagiotis Kanavos | [Flags] |
737 | d78cbf09 | Panagiotis Kanavos | internal enum MFT : uint |
738 | d78cbf09 | Panagiotis Kanavos | { |
739 | d78cbf09 | Panagiotis Kanavos | MFT_STRING = 0x00000000, |
740 | d78cbf09 | Panagiotis Kanavos | MFT_BITMAP = 0x00000004, |
741 | d78cbf09 | Panagiotis Kanavos | MFT_MENUBARBREAK = 0x00000020, |
742 | d78cbf09 | Panagiotis Kanavos | MFT_MENUBREAK = 0x00000040, |
743 | d78cbf09 | Panagiotis Kanavos | MFT_OWNERDRAW = 0x00000100, |
744 | d78cbf09 | Panagiotis Kanavos | MFT_RADIOCHECK = 0x00000200, |
745 | d78cbf09 | Panagiotis Kanavos | MFT_SEPARATOR = 0x00000800, |
746 | d78cbf09 | Panagiotis Kanavos | MFT_RIGHTORDER = 0x00002000, |
747 | d78cbf09 | Panagiotis Kanavos | MFT_RIGHTJUSTIFY = 0x00004000 |
748 | d78cbf09 | Panagiotis Kanavos | } |
749 | d78cbf09 | Panagiotis Kanavos | |
750 | 4d301e8e | Panagiotis Kanavos | [Flags] |
751 | d78cbf09 | Panagiotis Kanavos | internal enum MFS : uint |
752 | d78cbf09 | Panagiotis Kanavos | { |
753 | d78cbf09 | Panagiotis Kanavos | MFS_ENABLED = 0x00000000, |
754 | d78cbf09 | Panagiotis Kanavos | MFS_UNCHECKED = 0x00000000, |
755 | d78cbf09 | Panagiotis Kanavos | MFS_UNHILITE = 0x00000000, |
756 | d78cbf09 | Panagiotis Kanavos | MFS_GRAYED = 0x00000003, |
757 | d78cbf09 | Panagiotis Kanavos | MFS_DISABLED = 0x00000003, |
758 | d78cbf09 | Panagiotis Kanavos | MFS_CHECKED = 0x00000008, |
759 | d78cbf09 | Panagiotis Kanavos | MFS_HILITE = 0x00000080, |
760 | d78cbf09 | Panagiotis Kanavos | MFS_DEFAULT = 0x00001000 |
761 | d78cbf09 | Panagiotis Kanavos | } |
762 | d78cbf09 | Panagiotis Kanavos | |
763 | 4d301e8e | Panagiotis Kanavos | [Flags] |
764 | 4d301e8e | Panagiotis Kanavos | internal enum MF: uint |
765 | 4d301e8e | Panagiotis Kanavos | { |
766 | 4d301e8e | Panagiotis Kanavos | MF_BYCOMMAND = 0x00000000, |
767 | 4d301e8e | Panagiotis Kanavos | MF_ENABLED = 0x00000000, |
768 | 4d301e8e | Panagiotis Kanavos | MF_DISABLED = 0x00000002, |
769 | 4d301e8e | Panagiotis Kanavos | MF_BITMAP = 0x00000004, |
770 | 4d301e8e | Panagiotis Kanavos | MF_CHECKED = 0x00000008, |
771 | 4d301e8e | Panagiotis Kanavos | MF_BYPOSITION = 0x00000400, |
772 | 4d301e8e | Panagiotis Kanavos | MF_SEPARATOR = 0x00000800 |
773 | 4d301e8e | Panagiotis Kanavos | } |
774 | 4d301e8e | Panagiotis Kanavos | |
775 | d78cbf09 | Panagiotis Kanavos | #endregion |
776 | d78cbf09 | Panagiotis Kanavos | |
777 | d78cbf09 | Panagiotis Kanavos | |
778 | d78cbf09 | Panagiotis Kanavos | internal class NativeMethods |
779 | d78cbf09 | Panagiotis Kanavos | { |
780 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
781 | d78cbf09 | Panagiotis Kanavos | /// Retrieve the names of dropped files that result from a successful drag- |
782 | d78cbf09 | Panagiotis Kanavos | /// and-drop operation. |
783 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
784 | d78cbf09 | Panagiotis Kanavos | /// <param name="hDrop"> |
785 | d78cbf09 | Panagiotis Kanavos | /// Identifier of the structure that contains the file names of the dropped |
786 | d78cbf09 | Panagiotis Kanavos | /// files. |
787 | d78cbf09 | Panagiotis Kanavos | /// </param> |
788 | d78cbf09 | Panagiotis Kanavos | /// <param name="iFile"> |
789 | d78cbf09 | Panagiotis Kanavos | /// Index of the file to query. If the value of this parameter is 0xFFFFFFFF, |
790 | d78cbf09 | Panagiotis Kanavos | /// DragQueryFile returns a count of the files dropped. |
791 | d78cbf09 | Panagiotis Kanavos | /// </param> |
792 | d78cbf09 | Panagiotis Kanavos | /// <param name="pszFile"> |
793 | d78cbf09 | Panagiotis Kanavos | /// The address of a buffer that receives the file name of a dropped file |
794 | d78cbf09 | Panagiotis Kanavos | /// when the function returns. |
795 | d78cbf09 | Panagiotis Kanavos | /// </param> |
796 | d78cbf09 | Panagiotis Kanavos | /// <param name="cch"> |
797 | d78cbf09 | Panagiotis Kanavos | /// The size, in characters, of the pszFile buffer. |
798 | d78cbf09 | Panagiotis Kanavos | /// </param> |
799 | d78cbf09 | Panagiotis Kanavos | /// <returns>A non-zero value indicates a successful call.</returns> |
800 | d78cbf09 | Panagiotis Kanavos | [DllImport("shell32", CharSet = CharSet.Unicode)] |
801 | d78cbf09 | Panagiotis Kanavos | public static extern uint DragQueryFile( |
802 | d78cbf09 | Panagiotis Kanavos | IntPtr hDrop, |
803 | d78cbf09 | Panagiotis Kanavos | uint iFile, |
804 | d78cbf09 | Panagiotis Kanavos | StringBuilder pszFile, |
805 | d78cbf09 | Panagiotis Kanavos | int cch); |
806 | d78cbf09 | Panagiotis Kanavos | |
807 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
808 | d78cbf09 | Panagiotis Kanavos | /// Free the specified storage medium. |
809 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
810 | d78cbf09 | Panagiotis Kanavos | /// <param name="pmedium"> |
811 | d78cbf09 | Panagiotis Kanavos | /// Reference of the storage medium that is to be freed. |
812 | d78cbf09 | Panagiotis Kanavos | /// </param> |
813 | d78cbf09 | Panagiotis Kanavos | [DllImport("ole32.dll", CharSet = CharSet.Unicode)] |
814 | d78cbf09 | Panagiotis Kanavos | public static extern void ReleaseStgMedium(ref STGMEDIUM pmedium); |
815 | d78cbf09 | Panagiotis Kanavos | |
816 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
817 | d78cbf09 | Panagiotis Kanavos | /// Insert a new menu item at the specified position in a menu. |
818 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
819 | d78cbf09 | Panagiotis Kanavos | /// <param name="hMenu"> |
820 | d78cbf09 | Panagiotis Kanavos | /// A handle to the menu in which the new menu item is inserted. |
821 | d78cbf09 | Panagiotis Kanavos | /// </param> |
822 | d78cbf09 | Panagiotis Kanavos | /// <param name="uItem"> |
823 | d78cbf09 | Panagiotis Kanavos | /// The identifier or position of the menu item before which to insert the |
824 | d78cbf09 | Panagiotis Kanavos | /// new item. The meaning of this parameter depends on the value of |
825 | d78cbf09 | Panagiotis Kanavos | /// fByPosition. |
826 | d78cbf09 | Panagiotis Kanavos | /// </param> |
827 | d78cbf09 | Panagiotis Kanavos | /// <param name="fByPosition"> |
828 | d78cbf09 | Panagiotis Kanavos | /// Controls the meaning of uItem. If this parameter is false, uItem is a |
829 | d78cbf09 | Panagiotis Kanavos | /// menu item identifier. Otherwise, it is a menu item position. |
830 | d78cbf09 | Panagiotis Kanavos | /// </param> |
831 | d78cbf09 | Panagiotis Kanavos | /// <param name="mii"> |
832 | d78cbf09 | Panagiotis Kanavos | /// A reference of a MENUITEMINFO structure that contains information about |
833 | d78cbf09 | Panagiotis Kanavos | /// the new menu item. |
834 | d78cbf09 | Panagiotis Kanavos | /// </param> |
835 | d78cbf09 | Panagiotis Kanavos | /// <returns> |
836 | d78cbf09 | Panagiotis Kanavos | /// If the function succeeds, the return value is true. |
837 | d78cbf09 | Panagiotis Kanavos | /// </returns> |
838 | d78cbf09 | Panagiotis Kanavos | [DllImport("user32", CharSet = CharSet.Unicode, SetLastError = true)] |
839 | d78cbf09 | Panagiotis Kanavos | [return: MarshalAs(UnmanagedType.Bool)] |
840 | d78cbf09 | Panagiotis Kanavos | public static extern bool InsertMenuItem( |
841 | d78cbf09 | Panagiotis Kanavos | IntPtr hMenu, |
842 | d78cbf09 | Panagiotis Kanavos | uint uItem, |
843 | d78cbf09 | Panagiotis Kanavos | [MarshalAs(UnmanagedType.Bool)]bool fByPosition, |
844 | d78cbf09 | Panagiotis Kanavos | ref MENUITEMINFO mii); |
845 | 4d301e8e | Panagiotis Kanavos | |
846 | 4d301e8e | Panagiotis Kanavos | [DllImport("user32", CharSet = CharSet.Unicode, SetLastError = true)] |
847 | 4d301e8e | Panagiotis Kanavos | [return: MarshalAs(UnmanagedType.Bool)] |
848 | 4d301e8e | Panagiotis Kanavos | public static extern bool InsertMenu( |
849 | 4d301e8e | Panagiotis Kanavos | IntPtr hMenu, |
850 | 4d301e8e | Panagiotis Kanavos | uint uPosition, |
851 | 4d301e8e | Panagiotis Kanavos | MF uFlags, |
852 | 4d301e8e | Panagiotis Kanavos | uint uIDNewItem, |
853 | 4d301e8e | Panagiotis Kanavos | string lpNewItem); |
854 | 4d301e8e | Panagiotis Kanavos | |
855 | d78cbf09 | Panagiotis Kanavos | |
856 | d78cbf09 | Panagiotis Kanavos | [DllImport("shell32", CharSet = CharSet.Unicode, SetLastError = true)] |
857 | d78cbf09 | Panagiotis Kanavos | [return: MarshalAs(UnmanagedType.Bool)] |
858 | d78cbf09 | Panagiotis Kanavos | public static extern bool SHGetPathFromIDList( |
859 | d78cbf09 | Panagiotis Kanavos | IntPtr pidl, |
860 | d78cbf09 | Panagiotis Kanavos | StringBuilder pszpath); |
861 | d78cbf09 | Panagiotis Kanavos | |
862 | d78cbf09 | Panagiotis Kanavos | [DllImport("shell32.dll")] |
863 | d78cbf09 | Panagiotis Kanavos | public static extern void SHChangeNotify(HChangeNotifyEventID wEventId, |
864 | d78cbf09 | Panagiotis Kanavos | HChangeNotifyFlags uFlags, |
865 | d78cbf09 | Panagiotis Kanavos | IntPtr dwItem1, |
866 | d78cbf09 | Panagiotis Kanavos | IntPtr dwItem2); |
867 | d78cbf09 | Panagiotis Kanavos | |
868 | 5bcf6d70 | Panagiotis Kanavos | [DllImport("gdi32.dll")] |
869 | 5bcf6d70 | Panagiotis Kanavos | public static extern bool DeleteObject(IntPtr hObject); |
870 | 5bcf6d70 | Panagiotis Kanavos | |
871 | 5bcf6d70 | Panagiotis Kanavos | |
872 | 5bcf6d70 | Panagiotis Kanavos | |
873 | d78cbf09 | Panagiotis Kanavos | public static int HighWord(int number) |
874 | d78cbf09 | Panagiotis Kanavos | { |
875 | d78cbf09 | Panagiotis Kanavos | return ((number & 0x80000000) == 0x80000000) ? |
876 | d78cbf09 | Panagiotis Kanavos | (number >> 16) : ((number >> 16) & 0xffff); |
877 | d78cbf09 | Panagiotis Kanavos | } |
878 | d78cbf09 | Panagiotis Kanavos | |
879 | d78cbf09 | Panagiotis Kanavos | public static int LowWord(int number) |
880 | d78cbf09 | Panagiotis Kanavos | { |
881 | d78cbf09 | Panagiotis Kanavos | return number & 0xffff; |
882 | d78cbf09 | Panagiotis Kanavos | } |
883 | d78cbf09 | Panagiotis Kanavos | } |
884 | d78cbf09 | Panagiotis Kanavos | |
885 | d78cbf09 | Panagiotis Kanavos | internal static class WinError |
886 | d78cbf09 | Panagiotis Kanavos | { |
887 | d78cbf09 | Panagiotis Kanavos | public const int S_OK = 0x0000; |
888 | d78cbf09 | Panagiotis Kanavos | public const int S_FALSE = 0x0001; |
889 | d78cbf09 | Panagiotis Kanavos | public const int E_FAIL = -2147467259; |
890 | d78cbf09 | Panagiotis Kanavos | public const int E_INVALIDARG = -2147024809; |
891 | d78cbf09 | Panagiotis Kanavos | public const int E_OUTOFMEMORY = -2147024882; |
892 | d78cbf09 | Panagiotis Kanavos | public const int STRSAFE_E_INSUFFICIENT_BUFFER = -2147024774; |
893 | d78cbf09 | Panagiotis Kanavos | |
894 | d78cbf09 | Panagiotis Kanavos | public const uint SEVERITY_SUCCESS = 0; |
895 | d78cbf09 | Panagiotis Kanavos | public const uint SEVERITY_ERROR = 1; |
896 | d78cbf09 | Panagiotis Kanavos | |
897 | d78cbf09 | Panagiotis Kanavos | /// <summary> |
898 | d78cbf09 | Panagiotis Kanavos | /// Create an HRESULT value from component pieces. |
899 | d78cbf09 | Panagiotis Kanavos | /// </summary> |
900 | d78cbf09 | Panagiotis Kanavos | /// <param name="sev">The severity to be used</param> |
901 | d78cbf09 | Panagiotis Kanavos | /// <param name="fac">The facility to be used</param> |
902 | d78cbf09 | Panagiotis Kanavos | /// <param name="code">The error number</param> |
903 | d78cbf09 | Panagiotis Kanavos | /// <returns>A HRESULT constructed from the above 3 values</returns> |
904 | d78cbf09 | Panagiotis Kanavos | public static int MAKE_HRESULT(uint sev, uint fac, uint code) |
905 | d78cbf09 | Panagiotis Kanavos | { |
906 | d78cbf09 | Panagiotis Kanavos | return (int)((sev << 31) | (fac << 16) | code); |
907 | d78cbf09 | Panagiotis Kanavos | } |
908 | d78cbf09 | Panagiotis Kanavos | } |
909 | d78cbf09 | Panagiotis Kanavos | } |