added some development tools
[windows-sources.git] / developer / VSSDK / VisualStudioIntegration / Common / IDL / vsshell80.idl
blobb4c1da95bbf92d9cb927e284e34913c3c2087e92
1 /*****************************************************************************
2 * The VSSHELL Interfaces
3 * Copyright (c) 2002-2003, Microsoft Corporation, All Rights Reserved
4 *****************************************************************************/
6 #ifndef INTEROPLIB
8 // Imports - all imports should go here (inside the ifndef)
9 import "oaidl.idl";
10 import "vsshell.idl";
11 import "vsshell2.idl";
12 import "context.idl";
14 #endif
16 cpp_quote("#if 0")
17 typedef DWORD_PTR DLGPROC;
18 typedef DWORD_PTR LPFNPSPCALLBACKA;
19 typedef DWORD_PTR HINSTANCE;
20 cpp_quote("#endif")
21 cpp_quote("#include <prsht.h>")
23 #include "winerror.h"
25 /****************************************************************************
26 ******** IMPORTANT!! *********
28 All guids for interfaces and co-creatable objects in this file should be defined
29 in vsshelluuids.h
31 Do NOT derive from interfaces defined in vshell.idl because:
33 1. We want to be able to independently implement the new interfaces without having
34 to implement all the methods in the old interfaces.
35 2. This creates dependencies which causes complications for the build process.
37 ****************************************************************************/
39 #include "vsshelluuids.h"
41 /****************************************************************************
42 PLEASE READ THE FOLLOWING NOTES:
44 ***** Note on enumerators and bitwise flags passed as parameters:
46 When a parameter must be exactly one of a set of values (a true enumerator),
47 the values should be defined and used as follows:
49 typedef enum __tagVSSAMPLETYPE
51 ST_THISTYPE = 0, // first value should be zero or one, except
52 ST_THATTYPE = 1, // in special cases, and following values
53 ST_THEOTHERTYPE = 2, // should use consecutive numbers
54 } VSSAMPLETYPE;
56 interface IVsSample : IUnknown
58 HRESULT SampleMethod([in] VSSAMPLETYPE stType);
61 When a parameter must be exactly one of a set of values (a true enumerator),
62 and is considered a PROPID, the values should be defined and used as follows:
64 enum __VSSAMPLEPROPID
66 VSSAMPPROPID_LAST = -7000, // first value should be a unique
67 VSSAMPPROPID_This = -7000, // number not used by any other
68 VSSAMPPROPID_That = -7001, // PROPID, and following values
69 VSSAMPPROPID_FIRST = -7001, // should use consecutive numbers
71 typedef LONG VSSAMPLEPROPID;
73 interface IVsSample : IUnknown
75 HRESULT GetProperty([in] VSSAMPLEPROPID propid, [out] VARIANT *pvar);
76 HRESULT SetProperty([in] VSSAMPLEPROPID propid, [in] VARIANT var);
79 When a parameter can be none of or a combination of values (bitwise),
80 the values should be defined and used as follows:
82 enum __VSSAMPLEOPTS
84 SO_THISOPTION = 0x00000001, // first value should be one,
85 SO_THATOPTION = 0x00000002, // following values should use
86 SO_THEOTHEROPTION = 0x00000004, // consecutive powers of two
88 typedef DWORD VSSAMPLEOPTS;
90 interface IVsSample : IUnknown
92 HRESULT SampleMethod([in] VSSAMPLEOPTS grfOptions);
95 ***** Defining properties
97 Define properties as follows:
99 interface IVsSample : IUnknown
101 HRESULT get_Foo([out] BSTR *pbstrFoo);
102 HRESULT put_Foo([in] BSTR bstrFoo);
105 DO NOT use [propget], [propput] or [propputref] to define properties!!!
107 ***** Array typed args
109 Pass array type arguments (both in and out) using [] and size_is when the corresponding
110 size argument is present. You must have the array size as an argument for interop to
111 work correctly.
113 interface IVsSample : IUnknown
115 HRESULT MethodPassesInArray([in] int cItems, [in, size_is(cItems)] int prgiItems[]);
118 DO NOT use [in] int piItems[].
120 ****************************************************************************/
123 #ifdef INTEROPLIB
125 // define GUID's here to be exposed to managed code
126 module ShellGuids80
128 const LPSTR SolutionFolderProject = "{2150E333-8FDC-42A3-9474-1A3956D46DE8}";
131 // define tool window GUID's here to be exposed to managed code
132 module ToolWindowGuids80
134 const LPSTR Autos = "{F2E84780-2AF1-11D1-A7FA-00A0C9110051}";
135 const LPSTR BookmarkWindow = "{A0C5197D-0AC7-4B63-97CD-8872A789D233}";
136 const LPSTR Breakpoints = "{BE4D7042-BA3F-11D2-840E-00C04F9902C1}";
137 const LPSTR BrowserDoc = "{6B8E94B4-0949-4D9C-A81F-C1B9B744185C}";
138 const LPSTR CallBrowserWindow = "{5415EA3A-D813-4948-B51E-562082CE0887}";
139 const LPSTR CallBrowserSecondaryWindow= "{F78BCC56-71F7-4E7D-8215-F690CAE4F452}";
140 const LPSTR CallStack = "{0504FF91-9D61-11D0-A794-00A0C9110051}";
141 const LPSTR ClassDetails = "{778B5376-AD77-4751-ACDC-F3D18343F8DD}";
142 const LPSTR ClassView = "{C9C0AE26-AA77-11D2-B3F0-0000F87570EE}";
143 const LPSTR CodedefinitionWindow = "{588470CC-84F8-4A57-9AC4-86BCA0625FF4}";
144 const LPSTR CommandWindow = "{28836128-FC2C-11D2-A433-00C04F72D18A}";
145 const LPSTR ConsoleIO = "{FC29E0C0-C1AB-4B30-B5DF-24AA452B9661}";
146 const LPSTR DataSourceWindow = "{873151D0-CF2E-48CC-B4BF-AD0394F6A3C3}";
147 const LPSTR DefinitionWindow = "{5B6781C0-E99D-11D0-9954-00A0C91BC8E6}";
148 const LPSTR Disassembly = "{CF577B8C-4134-11D2-83E5-00C04F9902C1}";
149 const LPSTR DocumentOutline = "{25F7E850-FFA1-11D0-B63F-00A0C922E851}";
150 const LPSTR ContextWindow = "{66DBA47C-61DF-11D2-AA79-00C04F990343}";
151 const LPSTR ErrorList = "{D78612C7-9962-4B83-95D9-268046DAD23A}";
152 const LPSTR Find1 = "{0F887920-C2B6-11D2-9375-0080C747D9A0}";
153 const LPSTR Find2 = "{0F887921-C2B6-11D2-9375-0080C747D9A0}";
154 const LPSTR FindInFiles = "{E830EC50-C2B5-11D2-9375-0080C747D9A0}";
155 const LPSTR FindAdvanced = "{E830EC50-C2B5-11D2-9375-0080C747D9A0}";
156 const LPSTR ObjectSearchResultsWindow = "{68487888-204A-11D3-87EB-00C04F7971A5}";
157 const LPSTR ObjectSearchWindow = "{53024D34-0EF5-11D3-87E0-00C04F7971A5}";
158 const LPSTR FindReplace = "{CF2DDC32-8CAD-11D2-9302-005345000000}";
159 const LPSTR HelpFavorites = "{57DC5D59-11C2-4955-A7B4-D7699D677E93}";
160 const LPSTR HelpHowDoI = "{4A78E230-DCCB-44DF-95CF-22EE6E2459BB}";
161 const LPSTR Helpindex = "{73F6DD58-437E-11D3-B88E-00C04F79F802}";
162 const LPSTR HelpIndexResults = "{73F6DD5B-437E-11D3-B88E-00C04F79F802}";
163 const LPSTR HelpSearch = "{46C87F81-5A06-43A8-9E25-85D33BAC49F8}";
164 const LPSTR ImmediateWindow = "{ECB7191A-597B-41F5-9843-03A4CF275DDE}";
165 const LPSTR IVSMDPropertyBrowser = "{74946810-37A0-11D2-A273-00C04F8EF4FF}";
166 const LPSTR LocalChanges = "{53544C4D-5C18-11D3-AB71-0050040AE094}";
167 const LPSTR Locals = "{4A18F9D0-B838-11D0-93EB-00A0C90F2734}";
168 const LPSTR MacroExplorer = "{07CD18B4-3BA1-11D2-890A-0060083196C6}";
169 const LPSTR Memory = "{350F9856-A72B-11D2-8AD0-00C04F79E479}";
170 const LPSTR Modules = "{37ABA9BE-445A-11D3-9949-00C04F68FD0A}";
171 const LPSTR ObjectBrowser = "{269A02DC-6AF8-11D3-BDC4-00C04F688E50}";
172 const LPSTR ObjectTestBench = "{FDFFCCF2-5F63-404F-86AD-33693F544948}";
173 const LPSTR Outputwindow = "{34E76E81-EE4A-11D0-AE2E-00A0C90FFFC3}";
174 const LPSTR PortDetails = "{B869198C-F673-46D2-83AE-64F515277716}";
175 const LPSTR Processes = "{51C76317-9037-4CF2-A20A-6206FD30B4A1}";
176 const LPSTR PropertiesWindow = "{EEFA5220-E298-11D0-8F78-00A0C9110057}";
177 const LPSTR PropertySheetManager = "{6B8E94B5-0949-4D9C-A81F-C1B9B744185C}";
178 const LPSTR Registers = "{CA4B8FF5-BFC7-11D2-9929-00C04F68FDAF}";
179 const LPSTR ResourceView = "{2D7728C2-DE0A-45B5-99AA-89B609DFDE73}";
180 const LPSTR RunningDocuments = "{ECDD9EE0-AC6B-11D0-89F9-00A0C9110055}";
181 const LPSTR SdmDesignerTransactions = "{6F409264-641B-46E4-99A8-F6B65654AFF4}";
182 const LPSTR ServerExplorer = "{74946827-37A0-11D2-A273-00C04F8EF4FF}";
183 const LPSTR SettingsandConstraints = "{B8399B49-7330-487B-9235-7D2E969D0A79}";
184 const LPSTR SolutionExplorer = "{3AE79031-E1BC-11D0-8F78-00A0C9110057}";
185 const LPSTR StartPage = "{387CB18D-6153-4156-9257-9AC3F9207BBE}";
186 const LPSTR StyleOrganizerToolWindow = "{A764E899-518D-11D2-9A89-00C04F79EFC3}";
187 const LPSTR SystemView = "{9F3EC988-1174-4746-A66A-3969715D1FC7}";
188 const LPSTR Tableofcontents = "{4A791147-19E4-11D3-B86B-00C04F79F802}";
189 const LPSTR TaskList = "{4A9B7E51-AA16-11D0-A8C5-00A0C921A4D2}";
190 const LPSTR Threads = "{E62CE6A0-B439-11D0-A79D-00A0C9110051}";
191 const LPSTR Toolbox = "{B1E99781-AB81-11D0-B683-00AA00A3EE26}";
192 const LPSTR TrinityDataWindow = "{983CA650-95A7-4A43-822A-2960D4BD0D7D}";
193 const LPSTR UAMSynchronizations = "{A94C758F-EFB0-4975-BF86-C87B59FDB45D}";
194 const LPSTR VCColorPalette = "{5B6781C0-E99D-11D0-9954-00A0C91BC8E5}";
195 const LPSTR VCPropertyManager = "{DE1FC918-F32E-4DD7-A915-1792A051F26B}";
196 const LPSTR Watch = "{90243340-BD7A-11D0-93EF-00A0C90F2734}";
197 const LPSTR WebBrowserPreviewWindow = "{E8B06F53-6D01-11D2-AA7D-00C04F990343}";
198 const LPSTR WebBrowserWindow = "{E8B06F52-6D01-11D2-AA7D-00C04F990343}";
201 // define tool window GUID's here that were not exposed in 7.1
202 module ToolWindowGuids
204 const LPSTR Toolbox = "{B1E99781-AB81-11D0-B683-00AA00A3EE26}";
205 const LPSTR PropertyBrowser = "{EEFA5220-E298-11D0-8F78-00A0C9110057}";
206 const LPSTR SolutionExplorer = "{3AE79031-E1BC-11D0-8F78-00A0C9110057}";
207 const LPSTR OutputWindow = "{34E76E81-EE4A-11D0-AE2E-00A0C90FFFC3}";
208 const LPSTR DocOutline = "{25F7E850-FFA1-11D0-B63F-00A0C922E851}";
209 const LPSTR TaskList = "{4A9B7E51-AA16-11D0-A8C5-00A0C921A4D2}";
210 const LPSTR ServerExplorer = "{74946827-37A0-11D2-A273-00C04F8EF4FF}";
211 const LPSTR MacroExplorer = "{07CD18B4-3BA1-11D2-890A-0060083196C6}";
212 const LPSTR ContextWindow = "{66DBA47C-61DF-11D2-AA79-00C04F990343}";
213 const LPSTR ClassView = "{C9C0AE26-AA77-11D2-B3F0-0000F87570EE}";
214 const LPSTR ResourceView = "{2D7728C2-DE0A-45B5-99AA-89B609DFDE73}";
215 const LPSTR ObjectSearchWindow = "{53024D34-0EF5-11D3-87E0-00C04F7971A5}";
216 const LPSTR CommandWindow = "{28836128-FC2C-11D2-A433-00C04F72D18A}";
217 const LPSTR ObjectSearchResultsWindow = "{68487888-204A-11D3-87EB-00C04F7971A5}";
218 const LPSTR ObjectBrowser = "{269A02DC-6AF8-11D3-BDC4-00C04F688E50}";
219 const LPSTR BrowserDoc = "{6B8E94B4-0949-4D9C-A81F-C1B9B744185C}";
220 const LPSTR FindReplace = "{CF2DDC32-8CAD-11D2-9302-005345000000}";
221 const LPSTR FindAdvanced = "{E830EC50-C2B5-11D2-9375-0080C747D9A0}";
222 const LPSTR FindResults1 = "{0F887920-C2B6-11D2-9375-0080C747D9A0}";
223 const LPSTR FindResults2 = "{0F887921-C2B6-11D2-9375-0080C747D9A0}";
226 // define UI Context GUID's here to be exposed to managed code
227 module UIContextGuids80
229 // from VS 2003
230 const LPSTR SolutionBuilding = "{ADFC4E60-0397-11D1-9F4E-00A0C911004F}";
231 const LPSTR Debugging = "{ADFC4E61-0397-11D1-9F4E-00A0C911004F}";
232 const LPSTR Dragging = "{B706F393-2E5B-49E7-9E2E-B1825F639B63}";
233 const LPSTR FullScreenMode = "{ADFC4E62-0397-11D1-9F4E-00A0C911004F}";
234 const LPSTR DesignMode = "{ADFC4E63-0397-11D1-9F4E-00A0C911004F}";
235 const LPSTR NoSolution = "{ADFC4E64-0397-11D1-9F4E-00A0C911004F}";
236 const LPSTR SolutionExists = "{F1536EF8-92EC-443C-9ED7-FDADF150DA82}";
237 const LPSTR EmptySolution = "{ADFC4E65-0397-11D1-9F4E-00A0C911004F}";
238 const LPSTR SolutionHasSingleProject = "{ADFC4E66-0397-11D1-9F4E-00A0C911004F}";
239 const LPSTR SolutionHasMultipleProjects = "{93694FA0-0397-11D1-9F4E-00A0C911004F}";
240 const LPSTR CodeWindow = "{8FE2DF1D-E0DA-4EBE-9D5C-415D40E487B5}";
242 // new to VS 2005
243 const LPSTR NotBuildingAndNotDebugging = "{48EA4A80-F14E-4107-88FA-8D0016F30B9C}";
244 const LPSTR SolutionOrProjectUpgrading = "{EF4F870B-7B85-4F29-9D15-CE1ABFBE733B}";
245 const LPSTR DataSourceWindowSupported = "{95C314C4-660B-4627-9F82-1BAF1C764BBF}";
246 const LPSTR DataSourceWindowAutoVisible = "{2E78870D-AC7C-4460-A4A1-3FE37D00EF81}";
247 const LPSTR WindowsFormsDesigner = "{BA09E2AF-9DF2-4068-B2F0-4C7E5CC19E2F}";
248 const LPSTR ToolboxInitialized = "{DC5DB425-F0FD-4403-96A1-F475CDBA9EE0}";
249 const LPSTR SolutionExistsAndNotBuildingAndNotDebugging = "{D0E4DEEC-1B53-4cda-8559-D454583AD23B}";
252 // context guids not exposed to the interop assembly in 7.1
253 module UIContextGuids
255 const LPSTR SolutionBuilding = "{ADFC4E60-0397-11D1-9F4E-00A0C911004F}";
256 const LPSTR Debugging = "{ADFC4E61-0397-11D1-9F4E-00A0C911004F}";
257 const LPSTR Dragging = "{B706F393-2E5B-49E7-9E2E-B1825F639B63}";
258 const LPSTR FullScreenMode = "{ADFC4E62-0397-11D1-9F4E-00A0C911004F}";
259 const LPSTR DesignMode = "{ADFC4E63-0397-11D1-9F4E-00A0C911004F}";
260 const LPSTR NoSolution = "{ADFC4E64-0397-11D1-9F4E-00A0C911004F}";
261 const LPSTR SolutionExists = "{F1536EF8-92EC-443C-9ED7-FDADF150DA82}";
262 const LPSTR EmptySolution = "{ADFC4E65-0397-11D1-9F4E-00A0C911004F}";
263 const LPSTR SolutionHasSingleProject = "{ADFC4E66-0397-11D1-9F4E-00A0C911004F}";
264 const LPSTR SolutionHasMultipleProjects = "{93694FA0-0397-11D1-9F4E-00A0C911004F}";
265 const LPSTR CodeWindow = "{8FE2DF1D-E0DA-4EBE-9D5C-415D40E487B5}";
269 module TaskListViews
271 const LPSTR All = "{1880202e-fc20-11d2-8bb1-00c04f8ec28c}";
272 const LPSTR UserTasks = "{1880202f-fc20-11d2-8bb1-00c04f8ec28c}";
273 const LPSTR ShortcutTasks = "{18802030-fc20-11d2-8bb1-00c04f8ec28c}";
274 const LPSTR HTMLTasks = "{36ac1c0d-fe86-11d2-8bb1-00c04f8ec28c}";
275 const LPSTR CompilerTasks = "{18802033-fc20-11d2-8bb1-00c04f8ec28c}";
276 const LPSTR CommentTasks = "{18802034-fc20-11d2-8bb1-00c04f8ec28c}";
277 const LPSTR CurrentFileTasks = "{18802035-fc20-11d2-8bb1-00c04f8ec28c}";
278 const LPSTR CheckedTasks = "{18802036-fc20-11d2-8bb1-00c04f8ec28c}";
279 const LPSTR UncheckedTasks = "{18802037-fc20-11d2-8bb1-00c04f8ec28c}";
282 module LogicalViewID
284 const LPSTR Primary = "{00000000-0000-0000-0000-000000000000}";
285 const LPSTR Any = "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}";
286 //---------------------------------------------------------------------------
287 // The range 7651a700-06e5-11d1-8ebd-00a0c90f26ea to
288 // 7651a750-06e5-11d1-8ebd-00a0c90f26ea has been reserved for LOGVIEWID's
289 //---------------------------------------------------------------------------
290 const LPSTR Debugging = "{7651A700-06E5-11D1-8EBD-00A0C90F26EA}";
291 const LPSTR Code = "{7651A701-06E5-11D1-8EBD-00A0C90F26EA}";
292 const LPSTR Designer = "{7651A702-06E5-11D1-8EBD-00A0C90F26EA}";
293 const LPSTR TextView = "{7651A703-06E5-11D1-8EBD-00A0C90F26EA}";
294 // cmdidOpenWith handlers should pass this LOGVIEWID along to OpenStandardEditor to get the "Open With" dialog
295 const LPSTR UserChooseView = "{7651A704-06E5-11D1-8EBD-00A0C90F26EA}";
296 // LOGVIEWID_ProjectSpecific is passed by the OpenWith dialog to IVsProject::OpenItem when the user chooses the "(Project default editor)"
297 // entry. The project should use its special logic to open the specific editor for the project. If the item supports ViewForm/ViewCode,
298 // then this will be the smart DBLCLK/Open logic where the FormView is opened if appropriate, else the CodeView is opened.
299 const LPSTR ProjectSpecificEditor = "{80A3471A-6B87-433E-A75A-9D461DE0645F}";
302 module BuildOutputGroup
304 const LPSTR SourceFiles = "SourceFiles";
305 const LPSTR Built = "Built";
306 const LPSTR ContentFiles = "ContentFiles";
307 const LPSTR LocalizedResourceDlls = "LocalizedResourceDlls";
308 const LPSTR Documentation = "Documentation";
309 const LPSTR Symbols = "Symbols";
312 #ifndef PROXYSTUB_BUILD
314 // ...Everett DTE service objects
315 [uuid(f1ddc2c2-df76-4ebb-9de8-48ad2557062c)]
316 interface SVsSourceControl : IUnknown
320 [uuid(8d0aa9cc-8465-42f3-ad6e-dfde28ccc75d)]
321 interface SExtensionManager : IUnknown
325 [uuid(04a72314-32e9-48e2-9b87-a63603454f3e)]
326 interface SDTE : IUnknown
330 #endif
332 module DTECatID
334 const LPSTR Solution = "{52AEFF70-BBD8-11d2-8598-006097C68E81}";
335 const LPSTR SolutionBrowseObject = "{A2392464-7C22-11d3-BDCA-00C04F688E50}";
336 const LPSTR MiscFilesProject = "{610d4612-d0d5-11d2-8599-006097c68e81}";
337 const LPSTR MiscFilesProjectItem = "{610d4613-d0d5-11d2-8599-006097c68e81}";
338 const LPSTR GenericProject = "{610d4616-d0d5-11d2-8599-006097c68e81}";
339 const LPSTR Document = "{610d4611-d0d5-11d2-8599-006097c68e81}";
342 // end ...Everett DTE
345 module FontsAndColorsCategory
347 const LPSTR TextOutputToolWindows = "{C34C709B-C855-459e-B38C-3021F162D3B1}";
348 const LPSTR Printer = "{47724E70-AF55-48fb-A928-BB161C1D0C05}";
349 const LPSTR Tooltip = "{A9A5637F-B2A8-422e-8FB5-DFB4625F0111}";
350 const LPSTR StatementCompletion = "{C1614BB1-734F-4a31-BD42-5AE6275E16D2}";
351 const LPSTR OutputWindow = "{9973EFDF-317D-431c-8BC1-5E88CBFD4F7F}";
352 const LPSTR FindResults = "{5C48B2CB-0366-4fbf-9786-0BB37E945687}";
353 const LPSTR CommandWindow = "{EE1BE240-4E81-4beb-8EEA-54322B6B1BF5}";
354 const LPSTR SystemWindow = "{7E50DA68-A928-4d87-BEA4-E9F88AEC218C}";
355 const LPSTR ImmediateWindow = "{6BB65C5A-2F31-4bde-9F48-8A38DC0C63E7}";
356 const LPSTR DialogsAndToolWindows = "{1F987C00-E7C4-4869-8A17-23FD602268B0}";
357 const LPSTR TextEditor = "{A27B4E24-A735-4d1d-B8E7-9716E1E3D8E0}";
362 #endif // def INTEROPLIB
366 // define error codes here
367 enum VSErrorCodes80
369 // VS-specific HRESULT failure codes - start at 0x80041FE0
371 VS_E_MIGRATIONREQUIRESRELOAD = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x1FE6),
372 // The error code is returned when a solution or project file cannot be opened asynchronously.
373 // The caller should attempt to open the file again without passing
374 // SLNOPENOPT_LoadingAsync (for solution) or CPF_OPEN_ASYNCHRONOUSLY (for project).
375 VS_E_SYNCHRONOUSOPENREQUIRED = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x1FE7),
376 // Returned by IVsProfileSettingsFileCollection.AddBrowseFile if the selected file is of the wrong version
377 VS_E_VSSETTINGS_INVALIDVERSION = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x1FE8),
378 // Returned by editor invocation if the document cannot be opened safely (template, editor or logical view is untrusted)
379 VS_E_DOCUMENTOPENNOTTRUSTED = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x1FE9),
382 // These values are standard File Format types that can be passed as "nFormatIndex" to the
383 // IVsStructuredFileIO implementation of the Environment (see SID_SVsStructuredFileIO defined
384 // in vsshell.idl). Projects and Editors/Designers that implement IPersistFileFormat are
385 // allowed to use any values they like for their nFormatIndex values, but they encouraged
386 // to use these VSFORMATINDEX values.
387 enum __VSFORMATINDEX
389 VSFORMATINDEX_UTF8 = 0,
390 VSFORMATINDEX_MBCS = 1, // Multi-Byte Character Set (a.k.a. ANSI)
391 VSFORMATINDEX_UNICODE = 2,
393 typedef ULONG VSFORMATINDEX;
395 //----------------------------------------------------------------------------
396 // interface IVsRegisterProjectDebugTargetProvider
397 //----------------------------------------------------------------------------
398 // Implemented by a project system that offers external influence over launching the debugger.
399 // This interface is retrieved via IServiceProvider::QueryService on the IServiceProvider
400 // returned from IVsProject::GetItemContext(VSITEMID_ROOT, SID_SVsRegisterProjectDebugTargetProvider, …)
401 // The project maintains a linked list of IVsDebugTargetProvider pointers. When a provider
402 // adds itself to the list, it gets the previous provider returned. The new DebugTargetProvider
403 // is responsible to delegate to the next in the list, if it otherwise would not provide a
404 // valid debug target itself.
406 uuid(uuid_IVsProjectDebugTargetProvider),
407 version(1.0),
408 pointer_default(unique)
410 interface IVsProjectDebugTargetProvider : IUnknown
412 HRESULT SupplyDebugTarget([out] BSTR* pbstrTarget, [out] BSTR* pbstrCommandLine);
417 uuid(uuid_IVsRegisterProjectDebugTargetProvider),
418 version(1.0),
419 pointer_default(unique)
421 interface IVsRegisterProjectDebugTargetProvider : IUnknown
423 HRESULT AddDebugTargetProvider ([in] IVsProjectDebugTargetProvider *pNewDbgTrgtProvider, [out] IVsProjectDebugTargetProvider **ppNextDbgTrgtProvider);
424 HRESULT RemoveDebugTargetProvider ([in] IVsProjectDebugTargetProvider *pDbgTrgtProvider);
428 // declare the service type for interop
429 [uuid(uuid_SVsRegisterDebugTargetProvider)]
430 interface SVsRegisterDebugTargetProvider : IUnknown {}
432 cpp_quote("#define SID_SVsRegisterDebugTargetProvider IID_SVsRegisterDebugTargetProvider")
434 cpp_quote("extern const __declspec(selectany) GUID GUID_BookmarkWindow = { 0xa0c5197d, 0xac7, 0x4b63, { 0x97, 0xcd, 0x88, 0x72, 0xa7, 0x89, 0xd2, 0x33 } };")
437 //---------------------------------------------------------------------------
438 // IVsBrowseObject
439 //---------------------------------------------------------------------------
440 // Implemented by browse object of a project /project item. Used to map back to the
441 // object corresponding to the browse object
443 uuid(uuid_IVsBrowseObject),
444 version(1.0),
445 pointer_default(unique)
447 interface IVsBrowseObject : IUnknown
449 HRESULT GetProjectItem([out] IVsHierarchy **pHier, [out] VSITEMID *pItemid);
453 //---------------------------------------------------------------------------
454 // IVsCfgBrowseObject
455 //---------------------------------------------------------------------------
456 // Implemented by browse object of a project configuration. Used to map back to the
457 // configuration corresponding to the browse object
459 uuid(uuid_IVsCfgBrowseObject),
460 version(1.0),
461 pointer_default(unique)
463 interface IVsCfgBrowseObject : IVsBrowseObject
465 HRESULT GetCfg([out] IVsCfg **ppCfg);
468 // project type CLSID for Solution Folder project {2150E333-8FDC-42a3-9474-1A3956D46DE8}
469 // cpp_quote("DEFINE_GUID(CLSID_SolutionFolderProject, 0x2150e333, 0x8fdc, 0x42a3, 0x94, 0x74, 0x1a, 0x39, 0x56, 0xd4, 0x6d, 0xe8);")
470 cpp_quote("extern const __declspec(selectany) CLSID CLSID_SolutionFolderProject = { 0x2150e333, 0x8fdc, 0x42a3, { 0x94, 0x74, 0x1a, 0x39, 0x56, 0xd4, 0x6d, 0xe8 } };")
472 enum __VSHPROPID2
474 /********************************************** defined in vsshell.idl
475 VSHPROPID_NIL = -1,
477 // !!!! NOTE !!!! THIS MUST BE THE SAME AS THE FIRST PROP DEFINED
478 VSHPROPID_LAST = -1000,
479 VSHPROPID_Parent = -1000, // I4 itemid of Parent node (ITEMID_NIL if no parent)
481 // These properties are defined to deterministically walk the entire contents of the Hierarchy
482 // (or project) independent of which view is displayed in a UIHierarchyWindow. Hierarchies
483 // that support special views that either show a subset of items or a superset of member
484 // items and non-member items must implement
485 // VSHPROPID_ FirstVisibleChild/NextVisibleSibling/IsHiddenItem/IsNonMemberItem.
486 VSHPROPID_FirstChild = -1001, // INT_PTR itemid of 1st child node (ITEMID_NIL if no children)
487 VSHPROPID_NextSibling = -1002, // INT_PTR itemid of next sibling node (ITEMID_NIL if no more siblings)
489 VSHPROPID_Root = -1003, // INT_PTR [obsolete] itemid of Root must be VSITEMID_ROOT.
490 VSHPROPID_TypeGuid = -1004, // GUID to identify type of node/hierarchy, search on GUID_ItemType
491 VSHPROPID_SaveName = -2002, // BSTR Needed so Shell (i.e. File.Save menu) can display UI.
492 VSHPROPID_Caption = -2003, // BSTR Needed so Shell (i.e. project window) can display UI.
493 VSHPROPID_IconImgList = -2004, // I4 For icon. Handle to imagelist (Only for itemid==VSITEMID_ROOT)
494 VSHPROPID_IconIndex = -2005, // I4 For icon. If Expandable=TRUE, then IconIndex+1 is used for open icon.
495 // Hierarchy should support IconHandle or IconImageList/IconIndex but not both.
496 VSHPROPID_Expandable = -2006, // BOOL Should Shell display the "open-this-folder" plus sign?
497 VSHPROPID_ExpandByDefault = -2011, // BOOL Should Shell expand this item?
498 VSHPROPID_ProjectName = -2012, // BSTR [obsolete] use VSHPROPID_Name instead
499 VSHPROPID_Name = -2012, // BSTR Name for project (VSITEMID_ROOT) or item
500 VSHPROPID_IconHandle = -2013, // I4 handle of an icon, UIHierarchyWindow will NOT call DestroyIcon on it
501 // Hierarchy should support IconHandle or IconImageList/IconIndex but not both.
502 VSHPROPID_OpenFolderIconHandle = -2014, // I4 [optional] handle of an icon for an open folder, UIHierarchyWindow will NOT call DestroyIcon on it
503 VSHPROPID_OpenFolderIconIndex = -2015, // I4 [optional] for icon
504 VSHPROPID_CmdUIGuid = -2016, // GUID for cmdbars (for root only)
505 VSHPROPID_SelContainer = -2017, // UNK [optional] Returns an ISelectionContainer for property browsing
506 VSHPROPID_BrowseObject = -2018, // DISP [optional] Returns an IDispatch for property browsing
507 // Hierarchy should support SelContainer or BrowseObject but not both.
508 VSHPROPID_AltHierarchy = -2019, // UNK [optional] Returns an IVsHierarchy for SVsTrackSelectionEx
509 VSHPROPID_AltItemid = -2020, // I4 [optional] Returns an itemid for SVsTrackSelectionEx
510 VSHPROPID_ProjectDir = -2021, // BSTR [optional] full path to project directory (for VSITEMID_ROOT only)
511 VSHPROPID_SortPriority = -2022, // I4 [optional] Sort priority in UIHierarchyWindow. Standard projects have priority 0 (default).
512 // MiscFiles project has priority 10000, SolutionItems project has priority 9999.
513 VSHPROPID_UserContext = -2023, // UNK [optional] IVsUserContext for project/item
514 VSHPROPID_EditLabel = -2026, // BSTR [optional] string displayed for in-place editing node caption
515 VSHPROPID_ExtObject = -2027, // DISP [optional] For ITEMID_ROOT this is the ext.object of the project (Project).
516 // For other itemids it is that item's ext object (ProjectItem), if any.
517 VSHPROPID_ExtSelectedItem = -2028, // DISP [optional] Returns a custom SelectedItem object for the given itemid.
518 // If not supported, then a default implementation will be provided.
519 VSHPROPID_StateIconIndex = -2029, // I4 For state icon index. Use VsStateIcon enumeration
520 VSHPROPID_ProjectType = -2030, // BSTR [obsolete] use VSHPROPID_TypeName instead
521 VSHPROPID_TypeName = -2030, // BSTR display name to identify type of node/hierarchy (used in title bar)
522 VSHPROPID_ReloadableProjectFile = -2031, // BOOL [obsolete] use VSHPROPID_HandlesOwnReload
523 VSHPROPID_HandlesOwnReload = -2031, // BOOL [optional] project handles unload/reload itself (otherwise environment handles)
524 // (Defaults to FALSE)
525 VSHPROPID_ParentHierarchy = -2032, // UNK IVsHierarchy that owns this hierarchy. Hold as UNADDREF'ed ptr in SetProperty.
526 VSHPROPID_ParentHierarchyItemid = -2033, // INT_PTR The itemid of this hierarchy in it's parent hierarchy
527 VSHPROPID_ItemDocCookie = -2034, // INT_PTR [optional] the doc cookie (VSCOOKIE) of the hierarchy item
528 VSHPROPID_Expanded = -2035, // BOOL whether the node is currently expanded in the UIHierarchyWindow, start as FALSE
529 // and UIHierarchyWindow will update
530 VSHPROPID_ConfigurationProvider = -2036, // UNK OBSOLETE. Use IVsGetCfgProvider interface instead
531 VSHPROPID_ImplantHierarchy = -2037, // UNK [optional] IVsHierarchy implant for this hierarchy. Hold as UNADDREF'ed ptr in SetProperty.
532 // Implant can implement IVsFilterAddProjectItemDlg and/or IVsToolboxUser.
533 VSHPROPID_OwnerKey = -2038, // BSTR [optional] owner key string that identifies the project GUID of the owning project.
534 // only projects that implement IVsOwnedProjectFactory should support SetProperty for this property.
535 VSHPROPID_StartupServices = -2040, // UNK [optional] Returns an IVsProjectStartupServices* to add services to be
536 // started on next project load (for VSITEMID_ROOT only)
537 VSHPROPID_FirstVisibleChild = -2041, // INT_PTR [optional] similar to FirstChild but only walks items to be displayed in UIHierarchyWindow.
538 // required if hierarchy supports multiple (subsetted or supersetted) views of its contents.
539 VSHPROPID_NextVisibleSibling = -2042, // INT_PTR [optional] similar to NextSibling but only walks items to be displayed in UIHierarchyWindow.
540 // required if hierarchy supports multiple (subsetted or supersetted) views of its contents.
541 VSHPROPID_IsHiddenItem = -2043, // BOOL [optional] is item not displayed in current UIHierarchyWindow view. required if hierarchy
542 // supports multiple (subsetted) views of its contents.
543 VSHPROPID_IsNonMemberItem = -2044, // BOOL [optional] is item not considered a member of the hierarchy. required if hierarchy supports
544 // (supersetted) views of its contents (e.g. ShowAllFiles displaying files in directory that are not members of the project).
545 VSHPROPID_IsNonLocalStorage = -2045, // BOOL [optional] is project storage local? IPersistFileFormat is used for
546 // saving project regardless of whether it is a local "file" or not.
547 VSHPROPID_StorageType = -2046, // BSTR [optional] non-localize string representing storage type. same as string used in VSDIR file
548 // to differentiate between different location MRU lists.
549 VSHPROPID_ItemSubType = -2047, // BSTR [optional] non-localize string representing the subtype of the item.
550 // It is up to each package to agree on the meaning of this string.
551 VSHPROPID_OverlayIconIndex = -2048, // I4 [optional] Use VSOVERLAYICON enum. Overlay for the item's main icon
552 VSHPROPID_DefaultNamespace = -2049, // BSTR [optional] string representing the items folder based namespace: rootnamespace.folder.subfolder
553 VSHPROPID_IsNonSearchable = -2051, // BOOL [optional] is item not search-and-replace-able via Find/Replace in Files. Should be true for project file itself.
554 VSHPROPID_IsFindInFilesForegroundOnly = -2052, // BOOL [optional] if true, Find In Files runs in main thread
555 VSHPROPID_CanBuildFromMemory = -2053, // BOOL [optional] if TRUE, we dont need to prompt to save before building
556 VSHPROPID_PreferredLanguageSID = -2054, // GUID [optional] preferred SID of (text editor) language service for project.
557 // (e.g. used to determine default language for BreakPoint dialog)
558 VSHPROPID_ShowProjInSolutionPage = -2055,// BOOL [optional] used to filter project when vb/c# call the component picker for add-reference.
559 // Return VARIANT_TRUE to show the project in the list.
560 VSHPROPID_AllowEditInRunMode = -2056, // BOOL [optional] If FALSE or E_NOTIMPL, the compiler will disallow edits during run mode
561 // (this is the most common expected behavior). TRUE allows edits. This property enables VSA scenarios.
562 VSHPROPID_IsNewUnsavedItem = -2057, // BOOL [optional] If TRUE, this is a new unsaved item (as obtained from File.New.File)
563 // so the moniker will be a temporary name and the caption should be used in the UI instead.
564 VSHPROPID_ShowOnlyItemCaption = -2058, // BOOL [optional] If TRUE, this is an item for which only the caption should be shown in the UI instead of the full moniker.
565 VSHPROPID_ProjectIDGuid = -2059, // GUID [optional] Identifies a project across solutions. Generated and set when project is created. Retrieved when project is opened.
567 VSHPROPID_DesignerVariableNaming = -2060, // I4 [optional] from the VSDESIGNER_VARIABLENAMING enumeration
568 VSHPROPID_DesignerFunctionVisibility = -2061, // I4 [optional] from the VSDESIGNER_FUNCTIONVISIBILITY enum
570 VSHPROPID_HasEnumerationSideEffects = -2062, // BOOL [optional] If TRUE, then this hierarchy will not be enumerated for FindInFiles and similar
571 // hierarchy enumerations. (useful if enumerating might cause a login dialog or is unacceptably slow)
573 VSHPROPID_DefaultEnableBuildProjectCfg = -2063, // BOOL [optional] Should "Build" be initially checked by default in the solution cfg
574 // Normally "Build" is checked by default if the project supports IVsBuildableProjectCfg
576 VSHPROPID_DefaultEnableDeployProjectCfg = -2064, // BOOL [optional] Should "Deploy" be initially checked by default in the solution cfg
577 // Normally "Deploy" is checked by default if the project supports IVsDeployableProjectCfg
579 // !!!! NOTE !!!! THIS MUST BE THE SAME AS THE LAST PROP DEFINED
580 VSHPROPID_FIRST = -2064
582 **********************************************/
584 VSHPROPID_PropertyPagesCLSIDList = -2065, // BSTR [optional] semi-colon delimited list of clsids of the config independent property pages
585 VSHPROPID_CfgPropertyPagesCLSIDList = -2066, // BSTR [optional] semi-colon delimited list of clsids of the config dependent property pages
587 VSHPROPID_ExtObjectCATID = -2067, // GUID [optional] Intrinsic Extender CATID of the ExtObject (Automation Object) for the given IVsHierarchy Itemid. For VSITEMID_ROOT this corresponds to the type of the 'Project' object
588 VSHPROPID_BrowseObjectCATID = -2068, // GUID [optional] Intrinsic Extender CATID of the BrowseObject for the given IVsHierarchy Itemid. For VSITEMID_ROOT this corresponds to the object used to build the 'Project.Properties' collection.
589 VSHPROPID_CfgBrowseObjectCATID = -2069, // GUID [optional] Intrinsic Extender CATID of the configuration BrowseObject for the given IVsHierarchy Itemid
590 VSHPROPID_AddItemTemplatesGuid = -2070, // GUID [optional] alternate project type guid to use to get add item templates
591 VSHPROPID_ChildrenEnumerated = -2071, // BOOL [optional] returns TRUE if children have been enumerated. Typically, this is only of interest for project
592 // where enumerating children can be expensive (eg. Web projects)
593 VSHPROPID_StatusBarClientText = -2072, // BSTR hierarchy scoped text for Client Text field of status bar. This text is displayed
594 // while the given hierarchy is the active hierarchy. VT_EMPTY clears hierarchy scoped
595 // text and resets to global text specified by the application.
596 VSHPROPID_DebuggeeProcessId = -2073, // process id of debuggee if known, otherwise zero
597 VSHPROPID_IsLinkFile = -2074,
598 VSHPROPID_KeepAliveDocument = -2075, // BOOL [optional] TRUE if the document should be kept alive in the project regardless of opened/closed state
599 VSHPROPID_SupportsProjectDesigner = -2076, // BOOL [optional] TRUE if the project uses a Project Designer Editor instead of the property page frame to edit project properties
600 VSHPROPID_IntellisenseUnknown = -2077, // IUnknown [optional] returns the IUnknown of the Intellisense compiler used by the project system
601 VSHPROPID_IsUpgradeRequired = -2078, // BOOL [optional] TRUE if the item or any of its children either already in the process of upgrading or must be upgraded
602 VSHPROPID_DesignerHiddenCodeGeneration = -2079, // I4 Indicates which code is supposed to go to the hidden designer file. Bit flag values in __VSDESIGNER_HIDDENCODEGENERATION
603 VSHPROPID_SuppressOutOfDateMessageOnBuild = -2080, // BOOL [optional] TRUE if the project does not want to participate in the "this configuration is out of date" message on Build/F5
604 VSHPROPID_Container = -2081, // BOOL [optional] TRUE if the item is a container (it may not be expandable, but it contains items).
605 // support this property if your folder is not expandable but contains items that should be include in SCC operations.
606 VSHPROPID_UseInnerHierarchyIconList = -2082, // BOOL [optional] set this to TRUE in the outer hierarchy if you want the icon for an inner (nested) hierarchy root to come from the inner hierarchy image list.
607 // by default we're getting that icon from the outer hierarchy image list.
608 VSHPROPID_EnableDataSourceWindow = -2083, // BOOL [optional] set this to TRUE in your hierarchy to disable the Data Source Window for this project.
609 VSHPROPID_AppTitleBarTopHierarchyName = -2084, // BSTR [optional] Gives the hierarchy a chance to put its topmost name (solution or server) into the titlebar of the app. ie Foo part of "Foo - Microsoft Visual Studio"
610 VSHPROPID_DebuggerSourcePaths = -2085, // BSTR [optional] semi-colon delimited list of paths for the debugger to look for source in
611 VSHPROPID_CategoryGuid = -2086, // GUID to identify the family/category of this non-Solution based Hierarchy (e.g. Portfolio Project Hierarchy)
612 VSHPROPID_DisableApplicationSettings = -2087, // BOOL [optional] set this to TRUE in your hierarchy to disable Application Settings design time support in your project.
613 VSHPROPID_ProjectDesignerEditor = -2088, // GUID [optional] GUID of the Project Designer Editor that the project uses to edit project properties
614 // (VSHPROPID_SupportsProjectDesigner should return VARIANT_TRUE if a ProjectDesignerEditor GUID is returned)
615 // This GUID should correspond to an IVsEditorFactory that launches an editor for the Project Properties.
616 // A Project Designer is an editor for Project properties that is launched as a document associated with the
617 // root of the project. (see IVsSpecifyProjectDesignerPages below for more info)
618 VSHPROPID_PriorityPropertyPagesCLSIDList = -2089, // BSTR [optional] semi-colon delimited ordered list of clsids of the prefered property pages.
619 // A Project Designer that shows config independent and config dependent property pages in a
620 // flat list should use this order as the prefered order for the pages. A project that uses
621 // the standard property page frame can ignore this property because the property page frame
622 // does not mix the two type of pages in a flat list.
623 VSHPROPID_NoDefaultNestedHierSorting = -2090, // BOOL [optional] TRUE if the hierarchy DOES NOT want nested hierarchies sorted first and items after, and sorted alphabetically (like solution folders)
624 VSHPROPID_ExcludeFromExportItemTemplate = -2091, // BOOL [optional, default is FALSE] TRUE if the project item can not be exported via export item template
625 VSHPROPID_SupportedMyApplicationTypes = -2092, // BSTR [optional] semi-colon delimited list of application-types supported for project-systems that
626 // support My.Application. The property-page that exposes information about My.Application can use this
627 // list to determine which values appear in the application-type dropdown as selectable choices for the user.
628 // The current list of supported values for VB's implementation is:
630 // WindowsApp - a WinExe with support for Windows application concepts such as My.Forms
631 // WindowsClassLib - a Dll with support for Windows application concepts such as My.Forms
632 // CommandLineApp - a command-line Exe
633 // WindowsService - an Exe that can be run as a Windows Service
634 // WebControl - a Dll with support for Web application concepts
636 // An example value that supports all types is "WindowsApp;WindowsClassLib;CommandLineApp;WindowsService;WebControl"
639 // !!!! NOTE !!!! THIS MUST BE THE SAME AS THE LAST PROP DEFINED
640 // when this is extended in the next version idl, uses of it must be changed to the new value
641 VSHPROPID_FIRST2 = -2092
643 typedef [public] DWORD VSHPROPID2;
645 enum __VSDESIGNER_HIDDENCODEGENERATION
647 VSDHCG_Declarations = 1,
648 VSDHCG_InitMethods = 2,
649 VSDHCG_EventMethods = 4
652 // Values used in VSPROPID_ProjectLoadSecurityDialogState.
653 enum _ProjectLoadSecurityDialogState
655 PLSDS_ShowAgain = 1,
656 PLSDS_DontShowAgainBrowse = 2,
657 PLSDS_DontShowAgainFullLoad = 3,
658 PLSDS_DontShowAgainUnload = 4
660 typedef DWORD ProjectLoadSecurityDialogState;
662 enum __VSPROPID2
664 /********************************************** defined in vsshell.idl
665 VSPROPID_LAST = -8000,
666 VSPROPID_SolutionDirectory = -8000, // BSTR directory where solution file is saved
667 VSPROPID_SolutionFileName = -8001, // BSTR full path to solution file
668 VSPROPID_UserOptionsFileName = -8002, // BSTR full path to user options file
669 VSPROPID_SolutionBaseName = -8003, // BSTR (Get/Set) base name of solution file
670 VSPROPID_IsSolutionDirty = -8004, // BOOL is solution file dirty
671 VSPROPID_IsSolutionOpen = -8005, // BOOL is a solution file open
672 VSPROPID_ProjectCount = -8006, // I4 count of projects open in solution
673 VSPROPID_RegisteredProjExtns = -8007, // BSTR semicolon-separated list of all project extensions
674 VSPROPID_OpenProjectFilter = -8008, // BSTR filter/entension list used in Open Project dialog
675 VSPROPID_FileDefaultCodePage = -8009, // I4 codepage for saving files (CP_ACP/CP_WINUNICODE)
676 VSPROPID_SolutionFileNameBeingLoaded = -8010, // BSTR full path to file being opened (valid only during open)
677 VSPROPID_SolutionNodeCaption = -8011, // BSTR caption for solution node in Project Explorer
678 VSPROPID_IsSolutionOpening = -8013, // BOOL is a solution file being opened
679 VSPROPID_IsSolutionSaveAsRequired = -8014, // BOOL will saving the solution require a Save As dialog
680 VSPROPID_CountOfProjectsBeingLoaded = -8015, // I4 count of projects in file being opened (valid only during open)
681 VSPROPID_SolutionPropertyPages = -8016, // BSTR a semi-colon delimited list of clsid's of sln level prop pages
682 VSPROPID_FIRST = -8016
683 **********************************************/
684 VSPROPID_IsSolutionNodeHidden = -8017, // BOOL True if the sln node is hidden in the IDE
685 VSPROPID_DeferredSaveSolution = -8018, // BOOL is solution "zero-impact" (permanent save is performed explicitly via File.SaveAll)?
686 VSPROPID_SimplifiedConfigurations = -8019, // BOOL True if the solution is in simplified configuration mode
687 VSPROPID_IsSolutionClosing = -8020, // BOOL is a solution file being closed
688 VSPROPID_IsAProjectClosing = -8021, // IUnknown of IVsHierarchy of project being closed
689 VSPROPID_IsSolutionOpeningDocs = -8022, // BOOL is the solution re-opening the documents that were open when the solution was last closed?
690 VSPROPID_IsOpenNotificationPending = -8023, // BOOL is the OnAfterOpenSolution notification pending (is a new project being created with a new solution)?
691 VSPROPID_ProjectLoadSecurityDialogState = -8024, // I4, state of the project load security dialog kept between different lang packages
692 VSPROPID_SolutionUserFileCreatedOnThisComputer = -8025, // BOOL, True if the .suo file accompanying the solution file was originally created on the same
693 // computer it's being opened on. Check inside IVsPersistSolutionOpts.ReadUserOptions. Read only.
694 VSPROPID_NewProjectDlgPreferredLanguage = -8026, // BSTR, preferred language for the New Project dialog; if there is no preferred language an empty length string is returned.
695 // If there is a preferred language, then the non-preferred language project types are displayed under an "Other Languages" node in the New Project dialog. The preferred language is set by the
696 // user's choice of development settings in the "Import and Export Settings" dialog. Any project type can designate itself as a "Language" project by registering a "DeveloperActivity" reg value
697 // with the string for their language (e.g. "VB", "VC#", "VC++", "VJ#") under their top-level template directories for the New Project Dialog, e.g.:
698 // [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\NewProjectTemplates\TemplateDirs\{FFFFFFFF-EEE-DDDD-CCCC-BBBBBBAAAAAA}\/1] "DeveloperActivity"="MYLANG"
699 // The Language Project can create its own Developer Settings Profile .vssettings file with the following section:
700 // <Category name="Environment_NewProjectDialogPreferredLanguage" Category="{77E22C0C-9F4A-4bfb-AD3A-3F3F4711E9ED}" Package="{DA9FB551-C724-11d0-AE1F-00A0C90FFFC3}" RegisteredName="Environment_NewProjectDialogPreferredLanguage">
701 // <PropertyValue name="HasNewProjectDialogPreferredLanguage">true</PropertyValue>
702 // <PropertyValue name="NewProjectDialogPreferredLanguage">MYLANG</PropertyValue>
703 // </Category>
704 // Occurrences of "MYLANG" would be replaced with the appropriate string for the language.
706 // !!!! NOTE !!!! THIS MUST BE THE SAME AS THE LAST PROP DEFINED
707 // when this is extended in the next version idl, uses of it must be changed to the new value
708 VSPROPID_FIRST2 = -8026
710 typedef [public] DWORD VSPROPID2;
712 //----------------------------------------------------------------------------
713 // property ids for IVsCfgProvider2::GetCfgProviderProperty calls
714 enum __VSCFGPROPID2
716 /********************************************** defined in vsshell.idl
717 VSCFGPROPID_LAST = -16000, // first value should be a unique among propids
718 VSCFGPROPID_Reserved1 = -16000,
719 VSCFGPROPID_Reserved2 = -16001,
720 VSCFGPROPID_SupportsCfgAdd = -16002,
721 VSCFGPROPID_SupportsCfgDelete = -16003,
722 VSCFGPROPID_SupportsCfgRename = -16004,
723 VSCFGPROPID_SupportsPlatformAdd = -16005,
724 VSCFGPROPID_SupportsPlatformDelete = -16006,
725 VSCFGPROPID_SupportsPrivateCfgs = -16007,
726 VSCFGPROPID_IntrinsicExtenderCATID = -16008,
727 VSCFGPROPID_FIRST = -16008,
728 **********************************************/
730 VSCFGPROPID_HideConfigurations = -16009, // BOOL [optional] if true then configurations will be hidden
731 // when this project is the active selected project in the
732 // selection context.
733 VSCFGPROPID_FIRST2 = -16009
735 typedef LONG VSCFGPROPID2;
737 enum __VSCREATEPROJFLAGS2
739 /********************************************** defined in vsshell.idl
740 CPF_CLONEFILE = 0x00000001,
741 CPF_OPENFILE = 0x00000002,
742 CPF_OPENDIRECTORY = 0x00000004,
743 CPF_SILENT = 0x00000008,
744 CPF_OVERWRITE = 0x00000010,
745 CPF_NOTINSLNEXPLR = 0x00000020, // project is not shown as a normal project in Solution Explorer
746 CPF_NONLOCALSTORE = 0x00000040, // project uses non-local storage and different save mechanism
747 **********************************************/
749 CPF_DEFERREDSAVE = 0x00000080, // project is "zero-impact": permanent save is performed explicitly via File.SaveAll
750 CPF_OPEN_ASYNCHRONOUSLY = 0x00000100, // project is being opened asynchronously, i.e. it is possible that not all files are on disk yet
751 CPF_OPEN_STANDALONE = 0x00000200, // commands to open the project specified and don't look for a solution containing the project. Valid only with CPF_OPENFILE.
753 typedef DWORD VSCREATEPROJFLAGS2;
755 enum __VSCREATESOLUTIONFLAGS2
757 /********************************************** defined in vsshell.idl
758 CSF_SILENT = 0x00000001, // create the solution silently, do not query the user at all
759 CSF_OVERWRITE = 0x00000002, // overwrite existing solution if one exists with the specified name at the specified location
760 CSF_TEMPORARY = 0x00000004, // create a temporary solution--solution items cannot be added until it is saved
761 CSF_DELAYNOTIFY = 0x00000008, // delay OnAfterOpenSolution notification until after creation of first project
762 **********************************************/
764 CSF_HIDESOLUTIONNODEALWAYS = 0x00000010, // don't show the solution node
765 CSF_DEFERREDSAVESOLUTION = 0x00000020, // solution is "zero-impact": permanent save is performed explicitly via File.SaveAll
767 typedef [public] DWORD VSCREATESOLUTIONFLAGS2;
769 enum __VSSLNOPENOPTIONS2
771 /********************************************** defined in vsshell.idl
772 SLNOPENOPT_Silent = 0x00000001, // solution file is opened silently (no user feedback)
773 SLNOPENOPT_AddToCurrent = 0x00000002, // solution file is merged into currently open solution
774 SLNOPENOPT_DontConvertSLN = 0x00000004, // a solution file from a previous product is not opened
775 **********************************************/
776 SLNOPENOPT_LoadingAsync = 0x00000008, // loading solution asynchronously--mark nonexistent projects as "(loading)" rather than "(unavailable)"
778 typedef DWORD VSSLNOPENOPTIONS2;
780 enum __VSADDITEMFLAGS2
782 /********************************************** defined in vsshell.idl
783 VSADDITEM_AllowMultiSelect = 0x00000001, // multi-select
784 VSADDITEM_HideNameField = 0x00000002, // disable the item name field
785 VSADDITEM_SuggestTemplateName = 0x00000008, // suggest template name for item
786 VSADDITEM_ShowLocationField = 0x00000010, // show the location field
787 VSADDITEM_ShowDontShowAgain = 0x00000040, // show the "Don't show again" checkbox
788 VSADDITEM_AllowStickyFilter = 0x00000080, // allow pbstrFilter[out] parameter to be returned
789 VSADDITEM_AddNewItems = 0x00000100, // use the Add New Item dialog (mutually exclusive with VSADDITEM_AddExistingItems)
790 VSADDITEM_AddExistingItems = 0x00000200, // use the Add Existing Item dialog (mutually exclusive with VSADDITEM_AddNewItems)
791 **********************************************/
792 VSADDITEM_NoUserTemplateFeatures = 0x00001000, // dialog does not have 'Standard Templates/User-defined Templates' tabs or 'Online Templates' button
793 /********************************************** defined in vsshell.idl
794 VSADDITEM_ProjectHandlesLinks = 0x00008000, // project adds items as links--enables "Link" menu item
795 VSADDITEM_NewDirectoryForItem = 0x00010000, // item is placed in new directory (location field tracks name field)
796 VSADDITEM_AllowHiddenTreeView = 0x00020000, // allow tree view to be hidden if only one template node present
797 **********************************************/
798 VSADDITEM_ShowOpenButtonDropDown = 0x00040000, // show drop-down menu under Open button on dialog (default is to not dropdown, see comment for VSADDITEM_NoOpenButtonDropDown)
799 /********************************************** defined in vsshell.idl
800 VSADDITEM_NoOpenButtonDropDown = 0x00080000, // don't show drop-down menu under Open button on dialog (OBSOLETE/default, use VSADDITEM_ShowOpenButtonDropDown to show dropdown)
801 VSADDITEM_AllowSingleTreeRoot = 0x00100000, // allow the tree view to have only one root node (default is to use sub-nodes)
802 VSADDITEM_ExpandSingleTreeRoot = 0x00200000, // ask the tree view to expand a single root node (default is to not expand it)
803 VSADDITEM_ShowProjectTypesOnly = 0x00400000, // show only project types in the dialog (not items associated with projects)
804 VSADDITEM_AllowOnlyFileSysLocs = 0x00800000, // allow only local file system locations in the Add Existing Item dialog (no http://)
805 **********************************************/
807 typedef DWORD VSADDITEMFLAGS2;
809 enum __VSCREATEEDITORFLAGS2
811 /********************************************** defined in vsshell.idl
812 CEF_CLONEFILE = 0x00000001, // Mutually exclusive w/_OPENFILE
813 CEF_OPENFILE = 0x00000002, // Mutually exclusive w/_CLONEFILE
814 CEF_SILENT = 0x00000004, // Editor factory should create editor silently
815 CEF_OPENASNEW = 0x00000008, // Editor factory should perform necessary fixups
816 **********************************************/
817 CEF_OPENSPECIFIC = 0x00000010, // Editor factory must open document if possible (invoked via IVsUIShellOpenDocument::OpenSpecificEditor)
819 typedef DWORD VSCREATEEDITORFLAGS2;
821 enum __VSOSEFLAGS2
823 /********************************************** defined in vsshell.idl
824 OSE_RDTFLAGS_MASK = 0x000FFFFF,
825 OSE_UseOpenWithDialog = 0x10000000,
826 OSE_ChooseBestStdEditor = 0x20000000,
827 OSE_OpenAsNewFile = 0x40000000,
828 **********************************************/
829 OSE_CheckTrustLevelOfWizard = 0x00100000,
831 typedef DWORD VSOSEFLAGS2;
833 enum __VSOSPEFLAGS2
835 /********************************************** defined in vsshell.idl
836 OSPE_RDTFLAGS_MASK = 0x000FFFFF,
837 OSPE_CDWFLAGS_MASK = 0x00FFFFFF,
838 OSPE_OpenAsNewFile = 0x10000000,
839 **********************************************/
840 OSPE_CheckTrustLevelOfWizard = 0x00100000,
842 typedef DWORD VSOSPEFLAGS2;
844 enum __VSWIZARDTRUSTLEVEL
846 WTL_Trusted = 1,
847 WTL_Untrusted = 2,
848 WTL_Unspecified = 3,
850 typedef DWORD VSWIZARDTRUSTLEVEL;
852 enum __VSEDITORTRUSTLEVEL
854 ETL_NeverTrusted = 0,
855 ETL_AlwaysTrusted = 1,
856 ETL_HasUntrustedLogicalViews = 2,
858 typedef DWORD VSEDITORTRUSTLEVEL;
860 //---------------------------------------------------------------------------
861 // IVsDetermineWizardTrust
862 //---------------------------------------------------------------------------
864 uuid(uuid_IVsDetermineWizardTrust),
865 version(1.0),
866 pointer_default(unique)
868 interface IVsDetermineWizardTrust : IUnknown
870 // set state that a wizard (project or item) is about to start running.
871 HRESULT OnWizardInitiated([in] LPCOLESTR pszTemplateFilename, [in] REFGUID guidProjectType);
872 // set state that a wizard (project or item) has just stopped running.
873 HRESULT OnWizardCompleted();
874 // is a wizard currently running (between initiated and completed)?
875 HRESULT IsWizardRunning([out] BOOL *pfWizardRunning);
876 // what is the name of the template the wizard is running?
877 HRESULT GetRunningWizardTemplateName([out] BSTR *pbstrRunningTemplate);
878 // is the currently running wizard marked as trusted?
879 HRESULT GetWizardTrustLevel([out] VSWIZARDTRUSTLEVEL *pdwWizardTrustLevel);
880 // mark the currently running wizard as trusted.
881 HRESULT SetWizardTrustLevel([in] VSWIZARDTRUSTLEVEL dwWizardTrustLevel);
885 uuid(uuid_SVsDetermineWizardTrust)
887 interface SVsDetermineWizardTrust : IUnknown
891 cpp_quote("#define SID_SVsDetermineWizardTrust IID_SVsDetermineWizardTrust")
893 //---------------------------------------------------------------------------
894 // IVsSolutionEvents4
895 //---------------------------------------------------------------------------
897 uuid(uuid_IVsSolutionEvents4),
898 version(1.0),
899 pointer_default(unique)
901 interface IVsSolutionEvents4 : IUnknown
903 // fired after a project has been renamed
904 HRESULT OnAfterRenameProject([in] IVsHierarchy *pHierarchy);
905 // fired before a project is moved from one parent to another in the solution explorer
906 HRESULT OnQueryChangeProjectParent([in] IVsHierarchy *pHierarchy, [in] IVsHierarchy *pNewParentHier, [in,out] BOOL *pfCancel);
907 // fired after a project has been moved from one parent to another in the solution explorer
908 HRESULT OnAfterChangeProjectParent([in] IVsHierarchy *pHierarchy);
909 // fired after a project has been opened asynchronously
910 HRESULT OnAfterAsynchOpenProject([in] IVsHierarchy *pHierarchy, [in] BOOL fAdded);
913 //---------------------------------------------------------------------------
914 // IVsFireSolutionEvents2
915 //---------------------------------------------------------------------------
917 uuid(uuid_IVsFireSolutionEvents2),
918 version(1.0),
919 pointer_default(unique)
921 interface IVsFireSolutionEvents2 : IUnknown
923 HRESULT FireOnAfterRenameProject([in] IVsHierarchy *pHierarchy);
924 HRESULT FireOnQueryChangeProjectParent([in] IVsHierarchy *pHierarchy, [in] IVsHierarchy *pNewParentHier);
925 HRESULT FireOnAfterChangeProjectParent([in] IVsHierarchy *pHierarchy);
926 HRESULT FireOnAfterAsynchOpenProject([in] IVsHierarchy *pHierarchy, [in] BOOL fAdded);
929 //---------------------------------------------------------------------------
930 // IVsPrioritizedSolutionEvents
932 // These event have the same signature and purpose as the other solution events,
933 // but these events are fired with a different priority so that those notification
934 // sinks that must be notified before other sinks are notified can be notified first.
936 // Here is the order:
937 // PrioritizedOnAfter*** events are fired before the OnAfter*** events
938 // PrioritizedOnBefore*** events are fired after the OnBefore*** events
940 // For example, a background compiler may need to be started before other dependent
941 // processes start using it, and it may need to shut down after the other dependent
942 // process stop using it. So the background compiler can be started up when the
943 // PrioritizedOnAfterOpenSolution event is fired, so that when other processes
944 // respond to the OnAfterOpenSolution event, the compiler is ready. The compiler
945 // is shut down when the PrioritizedOnBeforeCloseSolution event is fired, so that
946 // when other processes respond to the OnBeforeCloseSolution event, the compiler
947 // is still present and available.
948 //---------------------------------------------------------------------------
950 uuid(uuid_IVsPrioritizedSolutionEvents),
951 version(1.0),
952 pointer_default(unique)
954 interface IVsPrioritizedSolutionEvents : IUnknown
956 HRESULT PrioritizedOnAfterOpenProject([in] IVsHierarchy *pHierarchy, [in] BOOL fAdded);
957 HRESULT PrioritizedOnBeforeCloseProject([in] IVsHierarchy *pHierarchy, [in] BOOL fRemoved);
958 HRESULT PrioritizedOnAfterLoadProject([in] IVsHierarchy *pStubHierarchy, [in] IVsHierarchy *pRealHierarchy);
959 HRESULT PrioritizedOnBeforeUnloadProject([in] IVsHierarchy *pRealHierarchy, [in] IVsHierarchy *pStubHierarchy);
960 HRESULT PrioritizedOnAfterOpenSolution([in] IUnknown *pUnkReserved, [in] BOOL fNewSolution);
961 HRESULT PrioritizedOnBeforeCloseSolution([in] IUnknown *pUnkReserved);
962 HRESULT PrioritizedOnAfterCloseSolution([in] IUnknown *pUnkReserved);
963 HRESULT PrioritizedOnAfterMergeSolution([in] IUnknown *pUnkReserved);
964 HRESULT PrioritizedOnBeforeOpeningChildren([in] IVsHierarchy *pHierarchy);
965 HRESULT PrioritizedOnAfterOpeningChildren([in] IVsHierarchy *pHierarchy);
966 HRESULT PrioritizedOnBeforeClosingChildren([in] IVsHierarchy *pHierarchy);
967 HRESULT PrioritizedOnAfterClosingChildren([in] IVsHierarchy *pHierarchy);
968 HRESULT PrioritizedOnAfterRenameProject([in] IVsHierarchy *pHierarchy);
969 HRESULT PrioritizedOnAfterChangeProjectParent([in] IVsHierarchy *pHierarchy);
970 HRESULT PrioritizedOnAfterAsynchOpenProject([in] IVsHierarchy *pHierarchy, [in] BOOL fAdded);
973 //----------------------------------------------------------------------------
974 // IVsPersistSolutionProps2
975 //----------------------------------------------------------------------------
976 // Implemented by Package that supports saving information in .SLN file.
977 // Interface retrieved by QI from IVsPackage.
979 uuid(uuid_IVsPersistSolutionProps2),
980 version(1.0),
981 pointer_default(unique)
983 interface IVsPersistSolutionProps2 : IUnknown
985 HRESULT OnSolutionLoadFailure([in] LPCOLESTR pszKey);
988 //---------------------------------------------------------------------------
989 // VSDIR flags for items and projects to indicate desired AddProject/AddItem dialog state.
990 //---------------------------------------------------------------------------
992 enum __VSDIRFLAGS2
994 /********************************************** defined in vsshell.idl
995 VSDIRFLAG_NonLocalTemplate = 0x00000001, // use "non-local" UI behavior and save mechanisms
996 VSDIRFLAG_BlankSolution = 0x00000002, // create a "blank" (empty) solution--don't create a project
997 VSDIRFLAG_DisableBrowseButton = 0x00000004, // disable the Browse button for this project/item
998 VSDIRFLAG_DontAddDefExtension = 0x00000008, // don't append a default extension to the name provided for the item (invalid for project)
999 **********************************************/
1000 VSDIRFLAG_RequiresNewFolder = 0x00000010, // new folder is required--creation in an existing folder is not allowed
1001 /********************************************** defined in vsshell.idl
1002 VSDIRFLAG_DisableLocationField = 0x00000020, // disable the location field for this project/item
1003 **********************************************/
1004 VSDIRFLAG_SolutionTemplate = 0x00000040, // template is for a solution rather than a project
1005 VSDIRFLAG_DeferredSaveProject = 0x00000080, // project can be "zero-impact": permanent save is performed explicitly via File.SaveAll
1006 VSDIRFLAG_DontShowNameLocInfo = 0x00000100, // don't show the name field or the static project location info field (useful flag for webs)
1007 VSDIRFLAG_EnableMasterPage = 0x00000200, // Enable the master page checkbox (NewWebItemDlg svc)
1008 VSDIRFLAG_EnableCodeSeparation = 0x00000400, // Enable the use code separation checkbox (NewWebItemDlg svc)
1009 VSDIRFLAG_EnableLangDropdown = 0x00000800, // Enable the language dropdown (NewWebItemDlg svc)
1010 /********************************************** defined in vsshell.idl
1011 VSDIRFLAG_DontInitNameField = 0x00001000, // don't initialize the name field for this project/item with a valid name
1012 VSDIRFLAG_DisableNameField = 0x00002000, // disable the name field for this project/item
1013 **********************************************/
1015 typedef DWORD VSDIRFLAGS2;
1017 typedef enum __VSFRAMEMODE2
1019 /********************************************** defined in vsshell.idl
1020 VSFM_Dock = 0,
1021 VSFM_Float = 1,
1022 VSFM_MdiChild = 2,
1023 VSFM_FloatOnly = 3,
1024 **********************************************/
1025 VSFM_AutoHide = 4
1026 } VSFRAMEMODE2;
1029 enum __VSFPROPID2
1031 /********************************************** defined in vsshell.idl
1032 VSFPROPID_NIL = -1,
1034 VSFPROPID_LAST = -3000,
1035 // The following properties are for all frame windows
1036 VSFPROPID_Type = -3000, // I4 -> 1 == Document Frame, 2 == Tool Frame
1037 VSFPROPID_DocView = -3001, // UNK object filling client area of window
1038 VSFPROPID_SPFrame = -3002, // UNK IServiceProvider which is site object for DocView object
1039 VSFPROPID_SPProjContext = -3003, // UNK IServiceProvider provided by the owning IVsHierarchy
1040 // This can be QS'ed for project context services
1041 VSFPROPID_Caption = -3004, // BSTR -> full window caption
1042 //VSFPROPID_ = -3005, // obsolete
1043 //VSFPROPID_ = -3006, // obsolete
1044 VSFPROPID_WindowState = -3007, // I4 -> see VSWINDOWSTATE above
1045 VSFPROPID_FrameMode = -3008, // I4 -> see VSFRAMEMODE above
1046 VSFPROPID_IsWindowTabbed = -3009, // I2 returns 0 if window not tabbed,
1047 // 1 if window is Tabbed and is Active Tab
1048 // 2 if window is Tabbed and is Not Active tab
1049 // Document windows always return 0
1050 //Note: VSFPROPID_UserContext should now be used by all toolwindows to push context
1051 VSFPROPID_UserContext = -3010, // UNK IVsUserContext
1052 VSFPROPID_ViewHelper = -3011, // UNK Helper object can override add/override interfaces
1053 // normally implemented on the DocView object
1054 // ViewHelper can implement following interfaces:
1055 // IVsWindowFrameNotify
1056 // IOleCommandTarget
1057 // IVsToolboxUser
1058 // IVsDocOutlineProvider
1059 // IDocHostUIHandler
1060 // IVsBackForwardNavigation
1061 // IVsWindowView
1062 // IVsStatusbarUser
1063 VSFPROPID_ShortCaption = -3012, // BSTR -> partial window caption (ie Foo.Txt)
1065 //Note: to use the default windowhelp implementation, leave these properties unset
1066 // you should only be using these properties if you are not pushing usercontext
1067 // (e.g. you are a help window and don't want to blank out other user context)
1068 VSFPROPID_WindowHelpKeyword = -3013, // BSTR -> keyword to be used for cmdidWindowHelp
1069 VSFPROPID_WindowHelpCmdText = -3014, // BSTR -> command text for cmdidWindowHelp (e.g. Help on: Help Index)
1071 // The following properties are for all document frames
1072 VSFPROPID_DocCookie = -4000, // VT_INT_PTR -> IVsRunningDocumentTable (RDT) key
1073 VSFPROPID_OwnerCaption = -4001, // BSTR portion of caption defined by owner IVsHierarchy
1074 VSFPROPID_EditorCaption = -4002, // BSTR portion of caption defined by editor implementation
1075 VSFPROPID_pszMkDocument = -4003, // BSTR pszMkDocument passed to CreateDocumentWindow
1076 VSFPROPID_DocData = -4004, // UNK returns the AltDocData if available else the RDTDocData
1077 VSFPROPID_Hierarchy = -4005, // UNK owning IVsHierarchy
1078 VSFPROPID_ItemID = -4006, // I4 VSITEMID of document
1079 VSFPROPID_CmdUIGuid = -4007, // GUID used to control visibility of toolbars and AutoVisible tool windows
1080 VSFPROPID_CreateDocWinFlags = -4008, // I4 VSCREATEDOCWIN flags passed to CreateDocumentWindow
1081 VSFPROPID_guidEditorType = -4009, // GUID guidEditorType uniquely identify which IVsEditorFactory created the document.
1082 VSFPROPID_pszPhysicalView = -4010, // BSTR identifies the type of window created by the IVsEditorFactory (e.g. "Form")
1083 VSFPROPID_InheritKeyBindings= -4011, // GUID most often used by an window to inherit the key bindings of the TextEditor
1084 // e.g.: pFrame->SetGuidProperty(VSFPROPID_InheritKeyBindings, CMDUIGUID_TextEditor)
1085 VSFPROPID_RDTDocData = -4012, // UNK the DocData registered in the RDT for the document in this frame
1086 VSFPROPID_AltDocData = -4013, // UNK if this window is only editing a piece of a larger document
1087 // then AltDocData is the DocData object for the piece of the document
1088 // that is being edited within the window where as the RDTDocData
1089 // is the DocData object for the entire document registered in the RDT.
1090 // AltDocData objects are not registered in the RDT. Document Windows
1091 // that have AltDocData objects are created using CDW_fAltDocData flag.
1092 **********************************************/
1093 VSFPROPID_OverrideDirtyState = -4014, // BOOL/EMPTY -- tri-state value to control dirty star (*) in window caption
1094 // VT_EMPTY: default handling of dirty star
1095 // VARIANT_TRUE: override default handling to SHOW dirty star
1096 // VARIANT_FALSE: override default handling to show NO dirty star
1097 VSFPROPID_OLEDocObjectDocument = -4015, // BOOL if pane is holding OLE doc object
1098 VSFPROPID_ParentHwnd = -4016, // HWND parent of OwnerDocked window
1099 VSFPROPID_ParentFrame = -4017, // IVsWindowFrame of parent container for OwnerDocked window
1100 VSFPROPID_ToolWindowDocCookie = -4018, // VT_INT_PTR -> IVsRunningDocumentTable (RDT) key for document associated with a tool window (eg. Code Definition Window)
1101 // Setting this property enables both caption dirty indicator (*) management and the firing of OnBeforeDocWindowShow() RDT events
1102 // for the tool window. It is assumed that the frame caption is set correctly, without a dirty indicator (*), before this
1103 // property is set, as setting this property will cause a caption dirty indicator (*) to be added, if the document is dirty.
1104 // Also, when this property is set, the OnBeforeDocWindowShow() RDT event is immediately fired to indicate that a new document has
1105 // been show.
1107 /********************************************** defined in vsshell.idl
1108 // The following properties are for all tool frames
1109 VSFPROPID_GuidPersistenceSlot = -5000, // GUID that uniquely identifies a tool window type.
1110 VSFPROPID_GuidAutoActivate = -5001, // GUID OBSOLETE. Do NOT use.
1111 VSFPROPID_CreateToolWinFlags = -5002, // I4 VSCREATETOOLWIN flags passed to CreateToolWindow
1113 // the followin properties are for extensibility
1114 VSFPROPID_ExtWindowObject = -5003, // UNK returns the Environment's "Window" automation IDispatch object
1116 // The following properties are for all tool frames
1117 VSFPROPID_MultiInstanceToolNum = -5004, // I4 ID of a multi-instance tool window
1118 VSFPROPID_BitmapResource = -5006, // I4 Resource number of bitmap in satellite dll
1119 VSFPROPID_BitmapIndex = -5007, // I4 index into strip if bitmap handle is a strip
1121 // UNK IVsToolbarHost used to add toolbars to window. Property is only valid if
1122 // CTW_fToolbarHost or UIHWF_SupportToolWindowToolbars is specfied.
1123 VSFPROPID_ToolbarHost = -5008,
1125 VSFPROPID_HideToolwinContainer = -5009, // I2 make the toolwindow's cntr hidden when saving data file
1127 // !!!! NOTE !!!! THIS MUST BE THE SAME AS THE LAST PROP DEFINED
1128 VSFPROPID_FIRST = -5009,
1129 **********************************************/
1131 typedef LONG VSFPROPID2;
1134 cpp_quote("extern const __declspec(selectany) GUID GUID_ImmediateWindow = { 0xecb7191a, 0x597b, 0x41f5, { 0x98, 0x43, 0x03, 0xa4, 0xcf, 0x27, 0x5d, 0xde } };")
1136 enum __VSSPROPID2
1138 /********************************************** defined in vsshell.idl
1139 VSSPROPID_LAST = -9000,
1140 VSSPROPID_StartupDir = -9000, // BSTR directory where running executable started up
1141 VSSPROPID_MDIState = -9001, // BOOL VARIANT_TRUE if IDE in MDI state, else VARIANT_FALSE
1142 VSSPROPID_VirtualRegistryRoot = -9002, // BSTR registry key name (must be appended to HKLM or HKCU)
1143 VSSPROPID_OpenFileFilter = -9003, // BSTR open file filter list string
1144 VSSPROPID_FindInFilesFilter = -9004, // BSTR find in files filter list string
1145 VSSPROPID_AddExistItemFilter = -9005, // BSTR add existing item filter list string
1146 VSSPROPID_IsInOfficeMode = -9006, // BOOL TRUE if environment is in Office mode
1147 VSSPROPID_InstallDirectory = -9007, // BSTR directory where visual studio executable was installed
1148 VSSPROPID_PreBuildRunPreview = -9008, // I4 one of PBRP_ values (PBRP_SaveChanges/PBRP_DontSaveChanges/PBRP_PromptForSave)
1149 VSSPROPID_IsComplexScriptAvail= -9009, // OBSOLETE
1150 VSSPROPID_hinstComplexScript = -9010, // OBSOLETE
1151 VSSPROPID_hinstMSO = -9011, // I4, HINSTANCE of mso*.dll
1152 VSSPROPID_ViewSourceMode = -9012, // BOOL set to TRUE if environment to be in ViewSourceMode
1153 VSSPROPID_RecordState = -9013, // I4, VSRECORDSTATE enum type specifying macro recording state of env.
1154 VSSPROPID_Zombie = -9014, // BOOL TRUE if env is in zombie state
1155 VSSPROPID_AnimationsOn = -9015, // BOOL TRUE if env animations are on
1156 VSSPROPID_ProcessingPendingMessageFilterMsg = -9016, // BOOL TRUE if Processing Pending MessageFilter Msg
1157 VSSPROPID_IsInteractive = -9017, // BOOL FALSE if running non-interactive cmd line invokations e.g. /make. OBSOLETE!!! DO NOT USE!!! Use VSSPROPID_IsInCommandLineMode instead.
1158 VSSPROPID_DetectFileChanges = -9018, // BOOL TRUE if Editors are supposed to watch for filechanges
1159 VSSPROPID_OpenFromCurrDocDir = -9019, // BOOL TRUE if Open File operation starts in current document's directory
1160 VSSPROPID_ReloadChangedFiles = -9020, // I4, VSRELOADOPTION. tells editors how to respond to externally modified documents
1161 VSSPROPID_AppDataDir = -9021, // BSTR application data directory
1162 VSSPROPID_IsInCommandLineMode = -9022, // BOOL TRUE if environment is running as a command line tool. Do not bring up any UI in this case!!!. Opposite if VSSPROPID_IsInteractive
1163 VSSPROPID_ShowOutputPaneOnBuildBegin = -9023, // BOOL TRUE if we're going to show the ouputpane when we start building
1164 VSSPROPID_ShowTasklistOnBuildEnd = -9024, // BOOL TRUE if we're going to show the tasklist when we finish building
1165 VSSPROPID_hmsoinstMSO = -9025, // I4, HMSOINST of mso*.dll
1166 VSSPROPID_ShowMiscFilesProject= -9026, // BOOL TRUE if we're going to show the Miscellaneous Files project (so it is visible in Solution Explorer)
1167 VSSPROPID_ObjectMgrTypesImgList = -9027, // I4, Handle to shell's imagelist for symbol types (class, interface, method etc). Do NOT free. Shell will free upon final shutdown
1168 VSSPROPID_SCCGlyphsImgList = -9028, // I4, Handle to shell's imagelist for SCC glyphs (indexed by VsStateIcon). Do NOT free. Shell will free upon final shutdown
1169 VSSPROPID_SuppressMessageFilterBusyDialog = -9029, // BOOL If TRUE the "Component Busy/Retry/Switch" dialog is suppressed (used by VSA for break mode)
1170 VSSPROPID_VisualStudioProjDir = -9030, // BSTR full path of location of 'Visual Studio Projects' directory
1171 VSSPROPID_PreBuildRunPreviewSaveOpts = -9031, // I4 VSRDTSAVEOPTIONS to pass to IVsRunningDocumentTable::SaveDocuments when VSSPROPID_PreBuildRunPreview != PBRP_DontSaveChanges
1172 VSSPROPID_FIRST = -9031
1173 **********************************************/
1174 VSSPROPID_SccProviderChanged = -9032, // VT_BOOL, Write-only. Set to TRUE when the SCC provider changes
1175 VSSPROPID_MainWindowSize = -9033, // VT_UI4, Read-only. The current size of the appid main window encoded as width in LOWORD, height in HIWORD
1176 VSSPROPID_MainWindowPos = -9034, // VT_UI4, Read-only. The top-left coordinate of the appid main window encoded as left in LOWORD, top=HIWORD
1177 VSSPROPID_IsAcademic = -9035, // VT_BOOL, Read-only. Academic Edition property
1178 VSSPROPID_IsAppThemed = -9036, // VT_BOOL, Read-only. VARIANT_TRUE if IDE is themed (using a manifest containing Microsoft.Windows.Common-Controls 6.0)
1179 VSSPROPID_VisualStudioDir = -9037, // VT_BSTR, Read-only. Full path of location of 'Visual Studio' directory (under My Documents)
1180 VSSPROPID_VsTemplateUserZipProjectFolder = -9038, // VT_BSTR, Read-only. Full path of location for user add New Project .vstemplate files (e.g. drive>:\My Documents\Visual Studio\ProjectTemplates\)
1181 VSSPROPID_VsTemplateUserZipItemFolder = -9039, // VT_BSTR, Read-only. Full path of location for user added Project AddItem .vstemplate files (e.g. drive>:\My Documents\Visual Studio\ItemTemplates\)
1182 VSSPROPID_InstallRootDir = -9041, // VT_BSTR, Read-only. Full path of root location of installation (e.g. drive>:\Program Files\Microsoft Visual Studio <version>\)
1183 VSSPROPID_SolutionExplorerSortingEnabled = -9042, // VT_BOOL. Read/write. Enables/disables sorting of solution explorer nodes.
1184 VSSPROPID_BuildOutOfDateProjects = -9043, // DWORD, see __BUILDOUTOFDATEPROJECTS for valid values. Can get & set the property.
1185 VSSPROPID_RunAfterBuildErrors = -9044, // DWORD, see __RUNAFTERBUILDERRORS for valid values. Can get & set the property.
1186 VSSPROPID_MainWindowVisibility = -9045, // VT_BOOL, Read-only. VARIANT_TRUE if main window is visible, VARIANT_FALSE if invisible.
1187 VSSPROPID_SKUEdition = -9046, // Either a VSASKUEdition or a string. VSASKUEdition if it is a standard version, or a BSTR if a custom version.
1188 VSSPROPID_SubSKUEdition = -9047, // I4 - some combination of the bits defined in VSASubSKUEdition or zero (if none).
1189 VSSPROPID_WaitingForSecondKeyChord = -9048, // VT_BOOL (get-only) is VS in the middle of waiting for the second key of a two-key shortcut
1190 VSSPROPID_SqmRegistryRoot = -9049, // BSTR, Read-only. Registry path to the root of the SQM hive used by the AppId.
1191 VSSPROPID_AutohideToolFrame = -9050, // IVsWinodwFrame of the window that is the visible tool window in the autohide frame. Will be non NULL only when fully extended.
1192 VSFPROPID_ToolWindowUsesDocSelection = -9051, // (optional) BOOL - tool window wants selection of active document restored whenever its Window is activated (ala the Document Outline Window)
1193 VSSPROPID_FIRST2 = -9051
1195 typedef LONG VSSPROPID2;
1197 // g_dwBuildOutOfDateProjectsOption values
1198 enum __BUILDOUTOFDATEPROJECTS
1200 BUILDOUTOFDATEPROJECTS_YES = 0,
1201 BUILDOUTOFDATEPROJECTS_NO = 1,
1202 BUILDOUTOFDATEPROJECTS_PROMPT = 2,
1204 // !!!! NOTE !!!! THIS MUST BE THE SAME AS THE LAST VALUE DEFINED
1205 BUILDOUTOFDATEPROJECTS_MAX = 2
1208 // g_dwRunAfterBuildErrorsOption values
1209 enum __RUNAFTERBUILDERRORS
1211 RUNAFTERBUILDERRORS_YES = 0,
1212 RUNAFTERBUILDERRORS_NO = 1,
1213 RUNAFTERBUILDERRORS_PROMPT = 2,
1215 // !!!! NOTE !!!! THIS MUST BE THE SAME AS THE LAST VALUE DEFINED
1216 RUNAFTERBUILDERRORS_MAX = 2
1219 enum __VSDBGLAUNCHFLAGS2
1221 /********************************************** defined in vsshell.idl
1222 DBGLAUNCH_Silent = 0x00000001,
1223 DBGLAUNCH_LocalDeploy = 0x00000002, // passed to IVsDebuggableProjectCfg::Launch to allow optimizations
1224 DBGLAUNCH_NoDebug = 0x00000004, // launch without attaching a debugger
1225 DBGLAUNCH_DetachOnStop = 0x00000008, // detach instead of terminate when debugging stopped.
1226 DBGLAUNCH_Selected = 0x00000010, // launch selected project instead of startup project
1227 DBGLAUNCH_StopDebuggingOnEnd = 0x00000020, // when this process ends, debugging is stopped.
1228 DBGLAUNCH_WaitForAttachComplete = 0x00000040, // when DLO_LaunchByWebServer, wait for the attach to finish before continuing to launch other targets
1229 **********************************************/
1230 DBGLAUNCH_MergeEnv = 0x00000080, // provided environment should be merged with system environment
1231 DBGLAUNCH_DesignTimeExprEval = 0x00000100, // launched for design-time expression evaluation
1232 DBGLAUNCH_StopAtEntryPoint = 0x00000200, // Stop at the entrypoint (step-into)
1233 DBGLAUNCH_CannotDebugAlone = 0x00000400 // this process cannot be debugged alone -- stop debugging when only processes with this flag remain
1236 typedef DWORD VSDBGLAUNCHFLAGS2;
1239 enum _DEBUG_LAUNCH_OPERATION2
1241 /********************************************** defined in vsshell.idl
1242 DLO_AlreadyRunning, // attach to a process
1243 // bstrExe is the process name, or a NULL character followed by
1244 // a string indicating the hexadecimal process id
1246 DLO_CreateProcess, // launch the application
1247 // bstrExe is the full path to the exe,
1248 // bstrArg are the arguments to pass to CreateProcess,
1249 // clsidCustom specifies the single debug engine to use (NULL for default),
1250 // or dwClsidCount and pclsidList specify the debug engines to use
1252 DLO_Custom, // deprecated -- same as DLO_CreateProcess
1254 DLO_LaunchByWebServer, // Use special HTTP verb to debug
1255 **********************************************/
1256 // bstrExe is the URL
1258 DLO_AttachToHostingProcess = 4, // attach to a hosting process
1259 // bstrExe contains the process id as in DLO_AlreadyRunning
1260 // pUnknown contains the IVsHostingProcessUser callback interface.
1262 DLO_StartDebuggingHostingProcess = 5 // start debugging
1263 // bstrExe contains the process id as in DLO_AlreadyRunning
1265 typedef DWORD DEBUG_LAUNCH_OPERATION2; // different type than original
1267 //-----------------------------------------------------------------------------
1268 // IVsProjectSpecialFiles enums
1269 //-----------------------------------------------------------------------------
1270 enum __PSFFILEID2
1272 PSFFILEID_WebSettings = -1002,
1273 PSFFILEID_AppManifest = -1003,
1274 PSFFILEID_AppDesigner = -1004,
1275 PSFFILEID_AppSettings = -1005,
1276 PSFFILEID_AssemblyResource = -1006,
1277 PSFFILEID_AssemblyInfo = -1007,
1279 // !!!! NOTE !!!! THIS MUST BE THE SAME AS THE LAST PROP DEFINED
1280 PSFFILEID_FIRST2 = -1007
1282 typedef LONG PSFFILEID2;
1284 enum __PSFFLAGS2
1286 PSFF_CheckoutIfExists = 0x00000004
1288 typedef DWORD PSFFLAGS2;
1290 //----------------------------------------------------------------------------
1291 // Debugger stuff
1292 //----------------------------------------------------------------------------
1293 enum __VSEDT_STYLE
1295 VSEDT_Reserved1 = 0x00000001
1297 typedef DWORD VSEDT_STYLE;
1299 enum __STOP_DEBUGGING_PROCESS_REASON
1301 SDPR_DETACH = 0,
1302 SDPR_TERMINATE = 1,
1304 typedef DWORD STOP_DEBUGGING_PROCESS_REASON;
1307 //----------------------------------------------------------------------------
1308 // IVsEnhancedDataTip
1309 //----------------------------------------------------------------------------
1311 uuid(uuid_IVsEnhancedDataTip),
1312 version(1.0),
1313 pointer_default(unique)
1315 interface IVsEnhancedDataTip : IUnknown
1317 HRESULT Show([in] HWND hwndOwner, [in] POINT* pptTopLeft, [in] RECT* pHotRect);
1318 HRESULT SetExpression([in] BSTR bstrExpression);
1319 HRESULT GetBaseWindowHandle([out] HWND* phwnd);
1320 HRESULT IsErrorTip([out] BOOL* pbIsError);
1321 HRESULT IsOpen([out] BOOL* pbIsOpen);
1324 typedef struct _VsDebugTargetInfo2
1326 DWORD cbSize; // size of this struct
1327 DEBUG_LAUNCH_OPERATION2 dlo; // specifies how this process should be launched or attached
1328 VSDBGLAUNCHFLAGS2 LaunchFlags;// launch flags that were passed to IVsDebuggableProjectCfg::Launch
1329 BSTR bstrRemoteMachine; // NULL for local machine, or remote machine name
1330 BSTR bstrExe; // The name of the executable
1331 BSTR bstrArg; // command line arguments to the exe (DLO_CreateProcess)
1332 BSTR bstrCurDir; // current directory (DLO_CreateProcess)
1333 BSTR bstrEnv; // environment settings (DLO_CreateProcess)
1334 GUID guidLaunchDebugEngine; // guid of debug engine used for launch, (DLO_CreateProcess)
1335 DWORD dwDebugEngineCount; // number of debug engine guids in the array
1336 [size_is(dwDebugEngineCount)]
1337 GUID* pDebugEngines; // array of debug engine guids, or NULL is if DebugEngineCount is zero
1338 GUID guidPortSupplier; // port supplier guid
1339 BSTR bstrPortName; // name of port from above supplier (NULL is fine)
1340 BSTR bstrOptions; // custom options, specific to each guidLaunchDebugEngine (NULL is recommended)
1341 DWORD_PTR hStdInput; // for file redirection
1342 DWORD_PTR hStdOutput; // for file redirection
1343 DWORD_PTR hStdError; // for file redirection
1344 BOOL fSendToOutputWindow; // if TRUE, stdout and stderr will be routed to the output window
1345 DWORD dwProcessId; // process id (DLO_AlreadyRunning)
1346 IUnknown* pUnknown; // interface pointer - usage depends on DEBUG_LAUNCH_OPERATION
1347 GUID guidProcessLanguage; // Language of the hosting process. Used to preload EE's
1348 DWORD dwReserved; // reserved for future use - specify NULL
1349 } VsDebugTargetInfo2;
1352 //----------------------------------------------------------------------------
1353 // IVsDebugger2
1354 //----------------------------------------------------------------------------
1355 // Implemented by the Debugger.
1357 uuid(uuid_IVsDebugger2),
1358 version(1.0),
1359 pointer_default(unique)
1361 interface IVsDebugger2 : IUnknown
1363 HRESULT LaunchDebugTargets2([in] ULONG DebugTargetCount, [in, out, size_is(DebugTargetCount)] VsDebugTargetInfo2* pDebugTargets);
1364 HRESULT ConfirmStopDebugging([in] LPCOLESTR pszMessage);
1366 // Returns an enum for all installed debug engines
1367 HRESULT EnumDebugEngines([out] IVsEnumGUID **ppEnum);
1369 // Returns the human-readable name for a debug engine
1370 HRESULT GetEngineName([in] REFGUID guidEngine, [out] BSTR *pbstrName);
1372 // Returns S_FALSE if the specified engine is incompatible with any engine in the specified array.
1373 // Returns S_OK if no incompatibilities are found.
1374 HRESULT IsEngineCompatible([in] REFGUID guidEngine, [in] ULONG EngineCount, [in, size_is(EngineCount)] GUID * pEngineGUIDs);
1376 // GetStdHandlesForHostingProcess() returns the standard handles
1377 // to be used by process that wishes to redirect its std handles
1378 // to the debugger window.
1380 HRESULT GetConsoleHandlesForProcess([in] DWORD dwPid,
1381 [out] ULONG64 *pdwStdInput,
1382 [out] ULONG64 *pdwStdOutput,
1383 [out] ULONG64 *pdwStdError
1387 // The ShowSource method takes an IUnknown pointer that can be queried
1388 // for IDebugDocumentContext2, and brings up the corresponding source
1389 // file in the IDE. This is equivalent to what happens when the user
1390 // double-clicks on a stack frame in the Call Stack window.
1392 // The BOOL parameters have the following meanings:
1393 // (The recommended default value for each BOOL parameter is TRUE.)
1395 // fMakeActive: Make the source file window the active
1396 // window in the IDE.
1398 // fAlwaysMoveCaret: Move the caret to the indicated position.
1400 // fPromptToFindSource: If the file is not found, prompt the user
1401 // to find it.
1403 // fIgnoreIfNotFound: If the file is not found at this time, then
1404 // the debugger should remember, and not try
1405 // to find it again in the future.
1407 // The ppTextView parameter will reference the opened view on the
1408 // source, if the source was successfully shown. This parameter
1409 // can be NULL, if you are not interested in this value.
1411 HRESULT ShowSource([in] IUnknown *pUnkDebugDocContext,
1412 [in] BOOL fMakeActive,
1413 [in] BOOL fAlwaysMoveCaret,
1414 [in] BOOL fPromptToFindSource,
1415 [in] BOOL fIgnoreIfNotFound,
1416 [out] IVsTextView **ppTextView);
1418 // This method allows the caller to create a new enhanced datatip object.
1419 HRESULT CreateDataTip([in] BSTR bstrExpression, [in] VSEDT_STYLE dwStyle, [out]IVsEnhancedDataTip** ppDataTip);
1421 // This method allows the caller to find out the current symbol path and cache settings
1422 HRESULT GetSymbolPath([out] BSTR *pbstrSymbolPath, [out] BSTR *pbstrSymbolCachePath);
1424 // Get a handle to use when redirecting stdout for a winforms app. This will
1425 // either be the console window or the output window, depending on user settings
1426 HRESULT GetOutputHandleForProcess([in] DWORD dwPid, [out] ULONG64 *pOutputHandle);
1428 // The same as InsertBreakpointByName in IVsDebugger, but allows for control of whether
1429 // intellisense is used when resolving the name.
1430 HRESULT InsertBreakpointByName([in] REFGUID guidLanguage, [in] LPCOLESTR pszCodeLocationText, [in] BOOL bUseIntellisense);
1432 // Toggle the Debugger "Use Quick Console" option
1434 HRESULT ToggleUseQuickConsoleOption([in] BOOL fOnOff);
1436 // This gets the "Use Quick Console" option setting
1438 HRESULT GetUseQuickConsoleOptionSetting([out] BOOL* pfValue);
1440 // Returns the internal debugger mode. During DTEE, the internal debugger mode may
1441 // be different from the shell mode (which is what IVsDebugger::GetMode returns)
1442 HRESULT GetInternalDebugMode ([out] DBGMODE *pdbgmode);
1445 //----------------------------------------------------------------------------
1446 // IVsDebugProcessNotify
1447 //----------------------------------------------------------------------------
1448 // This interface allows the debugger to provide notifications about a
1449 // process being debugged when this interface is passed in the
1450 // VsDebugTargetInfo2.pUnknown field when LaunchDebugTargets2 is called.
1453 uuid(uuid_IVsDebugProcessNotify),
1454 version(1.0),
1455 pointer_default(unique)
1457 interface IVsDebugProcessNotify : IUnknown
1459 HRESULT BeforeStopDebuggingProcess([in] STOP_DEBUGGING_PROCESS_REASON Reason);
1463 //-----------------------------------------------------------------------------
1464 // IVsQueryDebuggableProjectCfg
1465 //-----------------------------------------------------------------------------
1466 // Implemented by a project system that supports Debug Launch (F5 command).
1467 // This interface enables a third party to programmatically ask
1468 // a project that is elligible to be the Startup Project how it
1469 // would instruct the debugger to perform a DebugLaunch operation.
1470 // This interface is optional and is implemented on a project
1471 // configuration object. It is retrieved via IVsProjectCfg2::get_CfgType.
1472 // If cTargets is zero and pcActual is not NULL, the number of VsDebugTargetInfo2 objects
1473 // is returned in *pcActual.
1474 // If cTargets is not zero, rgDebugTargetInfo must not be NULL, or E_POINTER is returned.
1475 // The caller is responsibe for freeing alocated resources in VsDebugTargetInfo2 (BSTRS' and the GUID *pDebugEngines member
1476 // which is CoTaskMemAlloc-ated
1479 uuid(uuid_IVsQueryDebuggableProjectCfg),
1480 version(1.0),
1481 pointer_default(unique)
1483 interface IVsQueryDebuggableProjectCfg : IUnknown
1485 // Return startup options
1486 HRESULT QueryDebugTargets([in] VSDBGLAUNCHFLAGS grfLaunch,
1487 [in] ULONG cTargets,
1488 [in, out, size_is(cTargets)] VsDebugTargetInfo2 rgDebugTargetInfo[],
1489 [out, optional] ULONG *pcActual);
1493 //cpp_quote("#define VS_E_MIGRATIONREQUIRESRELOAD MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x1FE6)")
1494 // errors defined above in VSErrorCodes80
1496 // The error code is returned when a solution or project file cannot be opened asynchronously.
1497 // The caller should attempt to open the file again without passing
1498 // SLNOPENOPT_LoadingAsync (for solution) or CPF_OPEN_ASYNCHRONOUSLY (for project).
1499 //cpp_quote("#define VS_E_SYNCHRONOUSOPENREQUIRED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x1FE7)")
1500 // errors defined above in VSErrorCodes80
1502 //This is the overlay icon that your ui hierarchy should return
1503 //when asked for VSHPROPID_OverlayIconIndex. This will be transparently
1504 //drawn on top of your item's normal icon
1505 enum __VSOVERLAYICON2
1507 /********************************************** defined in vsshell.idl
1508 OVERLAYICON_NONE = 0,
1509 OVERLAYICON_SHORTCUT = 1,
1510 OVERLAYICON_POLICY = 2,
1511 OVERLAYICON_CONNECTED = 3,
1512 OVERLAYICON_DISCONNECTED = 4,
1513 OVERLAYICON_MAXINDEX = 4 //should be same as last valid overlay
1514 **********************************************/
1515 OVERLAYICON_EXCLUDED = 5,
1516 OVERLAYICON_NOTONDISK = 6,
1517 OVERLAYICON_MAXINDEX2 = 6 //should be same as last valid overlay
1519 typedef DWORD VSOVERLAYICON2; // different type than original
1523 // Properties ID's for IVsMenuItem::IMISetProp/IMEGetProp and for IMenuEditorSite
1524 // to inform IVsMenuEditor::OnChange() with.
1526 // IVsMenuItem::
1527 // Property Type: IMISetProp - IMIGetProp
1528 //-----------------------------------------------------------
1529 enum __VSMEPROPID2
1531 /********************************************** defined in vsshell.idl
1532 VSMEPROPID_FIRST = -1000,
1533 VSMEPROPID_NAME = -1000, // VT_BSTR
1534 VSMEPROPID_CAPTION = -1001, // VT_BSTR
1535 VSMEPROPID_CHECKED = -1002, // VT_BOOL
1536 VSMEPROPID_ENABLED = -1003, // VT_BOOL
1537 VSMEPROPID_VISIBLE = -1004, // VT_BOOL
1538 VSMEPROPID_BOLD = -1005, // VT_BOOL
1539 VSMEPROPID_ACCEL = -1006, // VT_I4 - (DWORD)
1540 VSMEPROPID_RADIOCHECK = -1007, // VT_BOOL
1541 VSMEPROPID_EXTRAPROPS = -1008,
1542 VSMEPROPID_BREAK = -1009,
1543 VSMEPROPID_BARBREAK = -1010,
1544 VSMEPROPID_RIGHTJUSTIFY = -1011,
1545 VSMEPROPID_LAST = -1011
1546 **********************************************/
1547 VSMEPROPID_ICON = -1012,
1548 VSMEPROPID_LAST2 = -1012
1550 typedef LONG VSMEPROPID2;
1553 enum __COMMANDWINDOWMODE2
1555 CWM_DEFAULT = -1, // Default mode (specified in user options)
1556 /********************************************** defined in vsshell.idl
1557 CWM_IMMEDIATE = 0, // Immediate mode
1558 CWM_COMMAND, // Command mode
1559 **********************************************/
1561 typedef DWORD COMMANDWINDOWMODE2; // different type than original
1564 uuid(uuid_IVsCommandWindow2),
1565 version(1.0),
1566 pointer_default(unique)
1568 interface IVsCommandWindow2 : IUnknown
1570 // Sets the Command Window to Immediate mode or Command mode. The mode
1571 // argument must be either CWM_IMMEDIATE or CWM_COMMAND. Refer to the
1572 // Command Line spec for descriptions of these modes of operation.
1573 HRESULT SetMode([in] COMMANDWINDOWMODE2 mode);
1576 //----------------------------------------------------------------------------
1577 // interface IVsDeferredDocView
1578 //----------------------------------------------------------------------------
1579 // This interface can be used to provide a doc view whose actual view is
1580 // retrieved after the doc data has been loaded and registered in the RDT.
1581 // The get_DocView property will be used to provide the actual document view
1582 // to the document window.
1584 uuid(uuid_IVsDeferredDocView),
1585 version(1.0),
1586 pointer_default(unique)
1588 interface IVsDeferredDocView : IUnknown
1590 HRESULT get_DocView([out] IUnknown **ppUnkDocView);
1591 HRESULT get_CmdUIGuid([out] GUID *pGuidCmdId);
1595 #ifdef INTEROPLIB
1597 enum BuildableProjectCfgOpts
1599 Rebuild = 1,
1600 BuildSelectionOnly = 2,
1601 BuildActiveDocumentOnly = 4,
1602 Private = 0xFFFF0000 // flags private to a particular implementation
1605 #endif
1607 //----------------------------------------------------------------------------
1608 // interface IVsBuildableProjectCfg2
1609 //----------------------------------------------------------------------------
1610 // property ids for IVsBuildableProjectCfg2::GetBuildCfgProperty calls
1611 enum __VSBLDCFGPROPID
1613 VSBLDCFGPROPID_LAST = -16000, // first value should be a unique among propids
1614 VSBLDCFGPROPID_SupportsMTBuild = -16000, //
1615 VSBLDCFGPROPID_FIRST = -16000,
1617 typedef LONG VSBLDCFGPROPID;
1620 uuid(uuid_IVsBuildableProjectCfg2),
1621 version(1.0),
1622 pointer_default(unique)
1624 interface IVsBuildableProjectCfg2 : IUnknown
1626 HRESULT GetBuildCfgProperty([in] VSBLDCFGPROPID propid, [out] VARIANT *pvar);
1627 HRESULT StartBuildEx([in] DWORD dwBuildId, [in] IVsOutputWindowPane *pIVsOutputWindowPane, [in] DWORD dwOptions);
1630 //-----------------------------------------------------------------------------
1631 // IVsPublishStatusCallback
1632 //-----------------------------------------------------------------------------
1633 // Implemented by the Environment.
1634 // Used by a project system that supports publish operations.
1636 uuid(uuid_IVsPublishStatusCallback),
1637 version(1.0),
1638 pointer_default(unique)
1640 interface IVsPublishableProjectStatusCallback : IUnknown
1642 HRESULT PublishBegin([in, out] BOOL *pfContinue);
1643 HRESULT PublishEnd([in] BOOL fSuccess);
1644 HRESULT Tick([in, out] BOOL *pfContinue);
1647 enum __VSPUBLISHOPTS
1649 PUBOPT_PUBLISHCONTEXT = 0x00000001, // first value should be one,
1651 typedef DWORD VSPUBLISHOPTS;
1653 //----------------------------------------------------------------------------
1654 // interface IVsPublishableProjectCfg
1655 //----------------------------------------------------------------------------
1657 uuid(uuid_IVsPublishableProjectCfg),
1658 version(1.0),
1659 pointer_default(unique)
1661 interface IVsPublishableProjectCfg : IUnknown
1663 HRESULT AdvisePublishStatusCallback([in] IVsPublishableProjectStatusCallback *pIVsPublishStatusCallback, [out] VSCOOKIE *pdwCookie);
1664 HRESULT UnadvisePublishStatusCallback([in] VSCOOKIE dwCookie);
1666 HRESULT StartPublish([in] IVsOutputWindowPane *pIVsOutputWindowPane, [in] DWORD dwOptions);
1667 HRESULT QueryStatusPublish([out] BOOL *pfPublishDone);
1668 HRESULT StopPublish([in] BOOL fSync);
1670 HRESULT ShowPublishPrompt([out] BOOL *pfContinue);
1672 HRESULT QueryStartPublish([in] DWORD dwOptions, [out, optional] BOOL *pfSupported, [out, optional] BOOL *pfReady);
1673 HRESULT GetPublishProperty([in] VSPUBLISHOPTS propid, [out] VARIANT *pvar);
1676 typedef enum __VSSOLNBUILDUPDATEFLAGS2
1678 /* From vsshell.idl:
1680 // The first set is UI supression flags; if they are set the default answer is automatically chosen.
1681 SBF_SUPPRESS_NONE = 0x00000000,
1682 SBF_SUPPRESS_OUTOFDATE_QUERY = 0x00000001, // Take default answer for out of date query
1683 SBF_SUPPRESS_SAVEBEFOREBUILD_QUERY = 0x00000002, // Take default answer for save before build query
1684 SBF_SUPPRESS_CONTDEPLOYONERROR_QUERY = 0x00000004, // Take default answer for continue deploy query
1685 SBF_SUPPRESS_CONTLAUNCHONERROR_QUERY = 0x00000008, // Take default answer for continue launch query
1686 SBF_SUPPRESS_MASK = 0x000000FF,
1687 // This set of flags is used to control which operations the solution update manager will
1688 // perform as part of its operation.
1689 SBF_OPERATION_NONE = 0x00000000, // No build operations are to be performed
1690 SBF_OPERATION_BUILD = 0x00010000, // Perform build (may be ORed with other flags)
1691 SBF_OPERATION_DEPLOY = 0x00020000, // Deploy solution (may be ORed with other flags)
1692 SBF_OPERATION_LAUNCH = 0x00040000, // Launch the application without the debugger involved
1693 SBF_OPERATION_LAUNCHDEBUG = 0x00080000, // Launch the application for debugging
1694 SBF_OPERATION_CLEAN = 0x00100000, // Remove built objects
1695 SBF_OPERATION_SELECTION = 0x00200000, // Operate on the current shell selection context
1696 SBF_OPERATION_FORCE_UPDATE = 0x00400000, // Force a rebuild on the project, even if it is not out of
1697 // date; for SBF_OPERATION_BUILD, projects will recompile
1698 // results even if they are not out of date; for
1699 // SBF_OPERATION_DEPLOY, the content will be re-copied to the
1700 // deployment target even if it is known not to be out of
1701 // date at the target.
1702 SBF_OPERATION_MASK = 0xFFFF0000,
1704 SBF_OPERATION_PUBLISHUI = 0x00800000, // Publish solution (may be ORed with other flags)
1705 SBF_OPERATION_PUBLISH = 0x01000000, // Publish solution (may be ORed with other flags)
1706 } VSSOLNBUILDUPDATEFLAGS2;
1708 //----------------------------------------------------------------------------
1709 // interface IVsParseCommandLine2
1710 //----------------------------------------------------------------------------
1711 // Implemented by the Environment.
1712 // This is a helper service used by IOleCommandTarget implementations for commands
1713 // that take arguments and switches
1715 cpp_quote("#define PCL_AUTO_SWITCHES -2")
1716 cpp_quote("#define PCL_AUTO_SWITCHVALUES -3")
1719 uuid(uuid_IVsParseCommandLine2),
1720 version(1.0),
1721 pointer_default(unique)
1723 interface IVsParseCommandLine2 : IUnknown
1726 HRESULT GetACParamOrSwitch([out] int* piACIndex, [out] int* piACStart,
1727 [out] int* pcchACLength, [out] BSTR* pbstrCurSwitch, [out, retval] BSTR* pbstrACParam);
1731 //----------------------------------------------------------------------------
1732 // interface IVsCommandWindowsCollection
1733 //----------------------------------------------------------------------------
1734 // Implemented by the Environment.
1735 // This is a service provided to manage the Command Windows in the shell.
1738 uuid(uuid_IVsCommandWindowsCollection),
1739 version(1.0),
1740 pointer_default(unique)
1742 interface IVsCommandWindowsCollection : IUnknown
1744 // Create a new Command Window in the specified mode
1745 HRESULT Create(
1746 [in] COMMANDWINDOWMODE2 mode,
1747 [in] DWORD dwToolWindowId, // -1 indicates to have the service choose an id
1748 [in] BOOL fShow,
1749 [out] UINT * puCookie
1752 // Open an existing Command Window (creates a new one if necessary)
1753 HRESULT OpenExistingOrCreateNewCommandWindow(
1754 [in] COMMANDWINDOWMODE2 mode,
1755 [in] BOOL fShow,
1756 [out] UINT * puCookie
1759 // Retrieve a Command Window's interface from a cookie value
1760 HRESULT GetCommandWindowFromCookie(
1761 [in] UINT uCookie,
1762 [out] IUnknown ** ppunkCmdWindow
1765 // Retrieve a Command Window interface for the specified mode
1766 HRESULT GetCommandWindowFromMode(
1767 [in] COMMANDWINDOWMODE2 mode,
1768 [out] IUnknown ** ppunkCmdWindow
1771 // Indicate that a Command Window is running (or not running) a command
1772 HRESULT SetRunningCommandWindowCommand(
1773 [in] UINT uCookie,
1774 [in] BOOL fCmdWin
1777 // Determine if output needs to be rendered for the specified window
1778 // Note: This is only valid for window in the CWM_SYSTEM mode, all
1779 // other mode return S_FALSE.
1780 HRESULT IsOutputWaiting(
1781 [in] UINT uCookie
1784 // Close the specified window
1785 HRESULT Close(
1786 [in] UINT uCookie
1789 // Close all Command Windows
1790 HRESULT CloseAllCommandWindows();
1794 // declare the service type for interop
1795 [uuid(uuid_SVsCommandWindowsCollection)]
1796 interface SVsCommandWindowsCollection : IUnknown {}
1798 cpp_quote("#define SID_SVsCommandWindowsCollection IID_SVsCommandWindowsCollection")
1801 // PVsBackgroundTask_Function_Pointer - type defintion
1802 // Implemented by modules that need to execute tasks in the background
1803 cpp_quote("typedef void (__cdecl * PVsBackgroundTask_Proc)(DWORD_PTR pvParam, HANDLE hThreadTerminationEvent);")
1804 cpp_quote("typedef PVsBackgroundTask_Proc PVsBackgroundTask_Function_Pointer;")
1806 enum __VSBACKGROUNDTASKPRIORITY
1808 VSBACKGROUNDTASKPRIORITY_STANDARD = 0, // Implemented in VS8.0
1809 VSBACKGROUNDTASKPRIORITY_IMMEDIATE = 1, // Not implemented
1810 VSBACKGROUNDTASKPRIORITY_OTHER = 2, // Placeholder for enum expansion
1812 typedef DWORD VSBACKGROUNDTASKPRIORITY;
1814 //----------------------------------------------------------------------------
1815 // interface IVsThreadPool
1816 //----------------------------------------------------------------------------
1817 // Implemented by the Environment.
1818 // This is a service provided to manage background operations in the shell.
1821 uuid(uuid_IVsThreadPool),
1822 version(1.0),
1823 pointer_default(unique) // pointers can be NULL
1825 interface IVsThreadPool : IUnknown
1827 // Schedule a task to run
1828 HRESULT ScheduleTask (
1829 [in] DWORD_PTR pTaskProc, // shell explicitly casts this pointer to a PVsBackgroundTask_Function_Pointer before calling
1830 [in] DWORD_PTR pvParam,
1831 [in] VSBACKGROUNDTASKPRIORITY priority // should be VSBACKGROUNDTASKPRIORITY_STANDARD in VS8.0
1834 // Schedule a task & a handle to wait on before running the task
1835 HRESULT ScheduleWaitableTask (
1836 [in] DWORD_PTR hWait, // HANDLE to wait upon
1837 [in] DWORD_PTR pTaskProc, // shell explicitly casts this pointer to a PVsBackgroundTask_Function_Pointer before calling
1838 [in] DWORD_PTR pvParam
1841 // Remove a handle (& task) from the list of waitable tasks
1842 HRESULT UnscheduleWaitableTask (
1843 [in] DWORD_PTR hWait // HANDLE to remove
1848 // declare the service type for interop
1849 [uuid(uuid_SVsThreadPool)]
1850 interface SVsThreadPool : IUnknown {}
1852 cpp_quote("#define SID_SVsThreadPool IID_SVsThreadPool")
1854 typedef struct _VSNSEBROWSEINFOW
1856 DWORD lStructSize;
1857 LPCOLESTR pszNamespaceGUID; // namespace extension GUID as string
1858 LPCOLESTR pszTrayDisplayName; // display name for the namespace extension in dialog tray
1859 LPCOLESTR pszProtocolPrefix; // prefix for namespace extension URLs (e.g. msss://)
1860 BOOL fOnlyShowNSEInTray; // if set, only namespace extension icon shown in dialog tray
1861 } VSNSEBROWSEINFOW;
1863 typedef struct _VSSAVETREEITEM
1865 VSRDTSAVEOPTIONS grfSave;
1866 VSCOOKIE docCookie; // either docCookie or pHier/itemid should be specified
1867 IVsHierarchy *pHier;
1868 VSITEMID itemid;
1869 } VSSAVETREEITEM;
1871 //---------------------------------------------------------------------------
1872 // IVsShell2
1873 //---------------------------------------------------------------------------
1874 // Additional shell services
1875 //---------------------------------------------------------------------------
1877 uuid(uuid_IVsShell2),
1878 version(1.0)
1880 interface IVsShell2 : IUnknown
1882 HRESULT LoadPackageStringWithLCID([in] REFGUID guidPackage, [in] ULONG resid, [in] LCID lcid, [out, retval] BSTR *pbstrOut);
1885 //---------------------------------------------------------------------------
1886 // IVsUIShell2
1887 //---------------------------------------------------------------------------
1888 // Additional shell services
1889 //---------------------------------------------------------------------------
1891 //---------------------------------------------------------------------------
1892 // New VsColorService to be used with IVsUIShell2:GetVSSysColorEx
1893 //---------------------------------------------------------------------------
1894 typedef enum __tagVSSYSCOLOREX
1896 /********************************************** defined in vsshell.idl
1897 VSCOLOR_LIGHT = -1, // *DO NOT USE*
1898 VSCOLOR_MEDIUM = -2, // *DO NOT USE*
1899 VSCOLOR_DARK = -3, // *DO NOT USE*
1900 VSCOLOR_LIGHTCAPTION = -4, // *DO NOT USE*
1901 VSCOLOR_LAST = -4, // must be set to the last color above
1902 ***********************************************************************/
1904 VSCOLOR_ACCENT_BORDER = -5,
1905 VSCOLOR_ACCENT_DARK = -6,
1906 VSCOLOR_ACCENT_LIGHT = -7,
1907 VSCOLOR_ACCENT_MEDIUM = -8,
1908 VSCOLOR_ACCENT_PALE = -9,
1909 VSCOLOR_COMMANDBAR_BORDER = -10,
1910 VSCOLOR_COMMANDBAR_DRAGHANDLE = -11,
1911 VSCOLOR_COMMANDBAR_DRAGHANDLE_SHADOW = -12,
1912 VSCOLOR_COMMANDBAR_GRADIENT_BEGIN = -13,
1913 VSCOLOR_COMMANDBAR_GRADIENT_END = -14,
1914 VSCOLOR_COMMANDBAR_GRADIENT_MIDDLE = -15,
1915 VSCOLOR_COMMANDBAR_HOVER = -16,
1916 VSCOLOR_COMMANDBAR_HOVEROVERSELECTED = -17,
1917 VSCOLOR_COMMANDBAR_HOVEROVERSELECTEDICON = -18,
1918 VSCOLOR_COMMANDBAR_HOVEROVERSELECTEDICON_BORDER = -19,
1919 VSCOLOR_COMMANDBAR_SELECTED = -20,
1920 VSCOLOR_COMMANDBAR_SHADOW = -21,
1921 VSCOLOR_COMMANDBAR_TEXT_ACTIVE = -22,
1922 VSCOLOR_COMMANDBAR_TEXT_HOVER = -23,
1923 VSCOLOR_COMMANDBAR_TEXT_INACTIVE = -24,
1924 VSCOLOR_COMMANDBAR_TEXT_SELECTED = -25,
1925 VSCOLOR_CONTROL_EDIT_HINTTEXT = -26,
1926 VSCOLOR_CONTROL_EDIT_REQUIRED_BACKGROUND = -27,
1927 VSCOLOR_CONTROL_EDIT_REQUIRED_HINTTEXT = -28,
1928 VSCOLOR_CONTROL_LINK_TEXT = -29,
1929 VSCOLOR_CONTROL_LINK_TEXT_HOVER = -30,
1930 VSCOLOR_CONTROL_LINK_TEXT_PRESSED = -31,
1931 VSCOLOR_CONTROL_OUTLINE = -32,
1932 VSCOLOR_DEBUGGER_DATATIP_ACTIVE_BACKGROUND = -33,
1933 VSCOLOR_DEBUGGER_DATATIP_ACTIVE_BORDER = -34,
1934 VSCOLOR_DEBUGGER_DATATIP_ACTIVE_HIGHLIGHT = -35,
1935 VSCOLOR_DEBUGGER_DATATIP_ACTIVE_HIGHLIGHTTEXT = -36,
1936 VSCOLOR_DEBUGGER_DATATIP_ACTIVE_SEPARATOR = -37,
1937 VSCOLOR_DEBUGGER_DATATIP_ACTIVE_TEXT = -38,
1938 VSCOLOR_DEBUGGER_DATATIP_INACTIVE_BACKGROUND = -39,
1939 VSCOLOR_DEBUGGER_DATATIP_INACTIVE_BORDER = -40,
1940 VSCOLOR_DEBUGGER_DATATIP_INACTIVE_HIGHLIGHT = -41,
1941 VSCOLOR_DEBUGGER_DATATIP_INACTIVE_HIGHLIGHTTEXT = -42,
1942 VSCOLOR_DEBUGGER_DATATIP_INACTIVE_SEPARATOR = -43,
1943 VSCOLOR_DEBUGGER_DATATIP_INACTIVE_TEXT = -44,
1944 VSCOLOR_DESIGNER_BACKGROUND = -45,
1945 VSCOLOR_DESIGNER_SELECTIONDOTS = -46,
1946 VSCOLOR_DESIGNER_TRAY = -47,
1947 VSCOLOR_DESIGNER_WATERMARK = -48,
1948 VSCOLOR_EDITOR_EXPANSION_BORDER = -49,
1949 VSCOLOR_EDITOR_EXPANSION_FILL = -50,
1950 VSCOLOR_EDITOR_EXPANSION_LINK = -51,
1951 VSCOLOR_EDITOR_EXPANSION_TEXT = -52,
1952 VSCOLOR_ENVIRONMENT_BACKGROUND = -53,
1953 VSCOLOR_ENVIRONMENT_BACKGROUND_GRADIENTBEGIN = -54,
1954 VSCOLOR_ENVIRONMENT_BACKGROUND_GRADIENTEND = -55,
1955 VSCOLOR_FILETAB_BORDER = -56,
1956 VSCOLOR_FILETAB_CHANNELBACKGROUND = -57,
1957 VSCOLOR_FILETAB_GRADIENTDARK = -58,
1958 VSCOLOR_FILETAB_GRADIENTLIGHT = -59,
1959 VSCOLOR_FILETAB_SELECTEDBACKGROUND = -60,
1960 VSCOLOR_FILETAB_SELECTEDBORDER = -61,
1961 VSCOLOR_FILETAB_SELECTEDTEXT = -62,
1962 VSCOLOR_FILETAB_TEXT = -63,
1963 VSCOLOR_FORMSMARTTAG_ACTIONTAG_BORDER = -64,
1964 VSCOLOR_FORMSMARTTAG_ACTIONTAG_FILL = -65,
1965 VSCOLOR_FORMSMARTTAG_OBJECTTAG_BORDER = -66,
1966 VSCOLOR_FORMSMARTTAG_OBJECTTAG_FILL = -67,
1967 VSCOLOR_GRID_HEADING_BACKGROUND = -68,
1968 VSCOLOR_GRID_HEADING_TEXT = -69,
1969 VSCOLOR_GRID_LINE = -70,
1970 VSCOLOR_HELP_HOWDOI_PANE_BACKGROUND = -71,
1971 VSCOLOR_HELP_HOWDOI_PANE_LINK = -72,
1972 VSCOLOR_HELP_HOWDOI_PANE_TEXT = -73,
1973 VSCOLOR_HELP_HOWDOI_TASK_BACKGROUND = -74,
1974 VSCOLOR_HELP_HOWDOI_TASK_LINK = -75,
1975 VSCOLOR_HELP_HOWDOI_TASK_TEXT = -76,
1976 VSCOLOR_HELP_SEARCH_FRAME_BACKGROUND = -77,
1977 VSCOLOR_HELP_SEARCH_FRAME_TEXT = -78,
1978 VSCOLOR_HELP_SEARCH_BORDER = -79,
1979 VSCOLOR_HELP_SEARCH_FITLER_TEXT = -80,
1980 VSCOLOR_HELP_SEARCH_FITLER_BACKGROUND = -81,
1981 VSCOLOR_HELP_SEARCH_FITLER_BORDER = -82,
1982 VSCOLOR_HELP_SEARCH_PROVIDER_UNSELECTED_BACKGROUND = -83,
1983 VSCOLOR_HELP_SEARCH_PROVIDER_UNSELECTED_TEXT = -84,
1984 VSCOLOR_HELP_SEARCH_PROVIDER_SELECTED_BACKGROUND = -85,
1985 VSCOLOR_HELP_SEARCH_PROVIDER_SELECTED_TEXT = -86,
1986 VSCOLOR_HELP_SEARCH_PROVIDER_ICON = -87,
1987 VSCOLOR_HELP_SEARCH_RESULT_LINK_SELECTED = -88,
1988 VSCOLOR_HELP_SEARCH_RESULT_LINK_UNSELECTED = -89,
1989 VSCOLOR_HELP_SEARCH_RESULT_SELECTED_BACKGROUND = -90,
1990 VSCOLOR_HELP_SEARCH_RESULT_SELECTED_TEXT = -91,
1991 VSCOLOR_HELP_SEARCH_BACKGROUND = -92,
1992 VSCOLOR_HELP_SEARCH_TEXT = -93,
1993 VSCOLOR_HELP_SEARCH_PANEL_RULES = -94, // unused.
1994 VSCOLOR_MDICLIENT_BORDER = -95,
1995 VSCOLOR_PANEL_BORDER = -96,
1996 VSCOLOR_PANEL_GRADIENTDARK = -97,
1997 VSCOLOR_PANEL_GRADIENTLIGHT = -98,
1998 VSCOLOR_PANEL_HOVEROVERCLOSE_BORDER = -99,
1999 VSCOLOR_PANEL_HOVEROVERCLOSE_FILL = -100,
2000 VSCOLOR_PANEL_HYPERLINK = -101,
2001 VSCOLOR_PANEL_HYPERLINK_HOVER = -102,
2002 VSCOLOR_PANEL_HYPERLINK_PRESSED = -103,
2003 VSCOLOR_PANEL_SEPARATOR = -104,
2004 VSCOLOR_PANEL_SUBGROUPSEPARATOR = -105,
2005 VSCOLOR_PANEL_TEXT = -106,
2006 VSCOLOR_PANEL_TITLEBAR = -107,
2007 VSCOLOR_PANEL_TITLEBAR_TEXT = -108,
2008 VSCOLOR_PANEL_TITLEBAR_UNSELECTED = -109,
2009 VSCOLOR_PROJECTDESIGNER_BACKGROUND_GRADIENTBEGIN = -110,
2010 VSCOLOR_PROJECTDESIGNER_BACKGROUND_GRADIENTEND = -111,
2011 VSCOLOR_PROJECTDESIGNER_BORDER_OUTSIDE = -112,
2012 VSCOLOR_PROJECTDESIGNER_BORDER_INSIDE = -113,
2013 VSCOLOR_PROJECTDESIGNER_CONTENTS_BACKGROUND = -114,
2014 VSCOLOR_PROJECTDESIGNER_TAB_BACKGROUND_GRADIENTBEGIN = -115,
2015 VSCOLOR_PROJECTDESIGNER_TAB_BACKGROUND_GRADIENTEND = -116,
2016 VSCOLOR_PROJECTDESIGNER_TAB_SELECTED_INSIDEBORDER = -117,
2017 VSCOLOR_PROJECTDESIGNER_TAB_SELECTED_BORDER = -118,
2018 VSCOLOR_PROJECTDESIGNER_TAB_SELECTED_HIGHLIGHT1 = -119,
2019 VSCOLOR_PROJECTDESIGNER_TAB_SELECTED_HIGHLIGHT2 = -120,
2020 VSCOLOR_PROJECTDESIGNER_TAB_SELECTED_BACKGROUND = -121,
2021 VSCOLOR_PROJECTDESIGNER_TAB_SEP_BOTTOM_GRADIENTBEGIN = -122,
2022 VSCOLOR_PROJECTDESIGNER_TAB_SEP_BOTTOM_GRADIENTEND = -123,
2023 VSCOLOR_PROJECTDESIGNER_TAB_SEP_TOP_GRADIENTBEGIN = -124,
2024 VSCOLOR_PROJECTDESIGNER_TAB_SEP_TOP_GRADIENTEND = -125,
2025 VSCOLOR_SCREENTIP_BORDER = -126,
2026 VSCOLOR_SCREENTIP_BACKGROUND = -127,
2027 VSCOLOR_SCREENTIP_TEXT = -128,
2028 VSCOLOR_SIDEBAR_BACKGROUND = -129,
2029 VSCOLOR_SIDEBAR_GRADIENTDARK = -130,
2030 VSCOLOR_SIDEBAR_GRADIENTLIGHT = -131,
2031 VSCOLOR_SIDEBAR_TEXT = -132,
2032 VSCOLOR_SMARTTAG_BORDER = -133,
2033 VSCOLOR_SMARTTAG_FILL = -134,
2034 VSCOLOR_SMARTTAG_HOVER_BORDER = -135,
2035 VSCOLOR_SMARTTAG_HOVER_FILL = -136,
2036 VSCOLOR_SMARTTAG_HOVER_TEXT = -137,
2037 VSCOLOR_SMARTTAG_TEXT = -138,
2038 VSCOLOR_SNAPLINES = -139,
2039 VSCOLOR_SNAPLINES_PADDING = -140,
2040 VSCOLOR_SNAPLINES_TEXTBASELINE = -141,
2041 VSCOLOR_SORT_BACKGROUND = -142,
2042 VSCOLOR_SORT_TEXT = -143,
2043 VSCOLOR_TASKLIST_GRIDLINES = -144,
2044 VSCOLOR_TITLEBAR_ACTIVE = -145,
2045 VSCOLOR_TITLEBAR_ACTIVE_GRADIENTBEGIN = -146,
2046 VSCOLOR_TITLEBAR_ACTIVE_GRADIENTEND = -147,
2047 VSCOLOR_TITLEBAR_ACTIVE_TEXT = -148,
2048 VSCOLOR_TITLEBAR_INACTIVE = -149,
2049 VSCOLOR_TITLEBAR_INACTIVE_GRADIENTBEGIN = -150,
2050 VSCOLOR_TITLEBAR_INACTIVE_GRADIENTEND = -151,
2051 VSCOLOR_TITLEBAR_INACTIVE_TEXT = -152,
2052 VSCOLOR_TOOLBOX_BACKGROUND = -153,
2053 VSCOLOR_TOOLBOX_DIVIDER = -154,
2054 VSCOLOR_TOOLBOX_GRADIENTDARK = -155,
2055 VSCOLOR_TOOLBOX_GRADIENTLIGHT = -156,
2056 VSCOLOR_TOOLBOX_HEADINGACCENT = -157,
2057 VSCOLOR_TOOLBOX_HEADINGBEGIN = -158,
2058 VSCOLOR_TOOLBOX_HEADINGEND = -159,
2059 VSCOLOR_TOOLBOX_ICON_HIGHLIGHT = -160,
2060 VSCOLOR_TOOLBOX_ICON_SHADOW = -161,
2061 VSCOLOR_TOOLWINDOW_BACKGROUND = -162,
2062 VSCOLOR_TOOLWINDOW_BORDER = -163,
2063 VSCOLOR_TOOLWINDOW_BUTTON_DOWN = -164,
2064 VSCOLOR_TOOLWINDOW_BUTTON_DOWN_BORDER = -165,
2065 VSCOLOR_TOOLWINDOW_BUTTON_HOVER_ACTIVE = -166,
2066 VSCOLOR_TOOLWINDOW_BUTTON_HOVER_ACTIVE_BORDER = -167,
2067 VSCOLOR_TOOLWINDOW_BUTTON_HOVER_INACTIVE = -168,
2068 VSCOLOR_TOOLWINDOW_BUTTON_HOVER_INACTIVE_BORDER = -169,
2069 VSCOLOR_TOOLWINDOW_TEXT = -170,
2070 VSCOLOR_TOOLWINDOW_TAB_SELECTEDTAB = -171,
2071 VSCOLOR_TOOLWINDOW_TAB_BORDER = -172,
2072 VSCOLOR_TOOLWINDOW_TAB_GRADIENTBEGIN = -173,
2073 VSCOLOR_TOOLWINDOW_TAB_GRADIENTEND = -174,
2074 VSCOLOR_TOOLWINDOW_TAB_TEXT = -175,
2075 VSCOLOR_TOOLWINDOW_TAB_SELECTEDTEXT = -176,
2076 VSCOLOR_WIZARD_ORIENTATIONPANEL_BACKGROUND = -177,
2077 VSCOLOR_WIZARD_ORIENTATIONPANEL_TEXT = -178,
2079 // NOTE: This must be the same as the last property defined above.
2080 VSCOLOR_LASTEX = -178
2082 } __VSSYSCOLOREX;
2084 typedef int VSSYSCOLOREX;
2088 typedef enum __tagGRADIENTTYPE
2090 VSGRADIENT_FILETAB = 1,
2091 VSGRADIENT_PANEL_BACKGROUND = 2,
2092 VSGRADIENT_SHELLBACKGROUND = 3,
2093 VSGRADIENT_TOOLBOX_HEADING = 4,
2094 VSGRADIENT_TOOLTAB = 5,
2095 VSGRADIENT_TOOLWIN_ACTIVE_TITLE_BAR = 6,
2096 VSGRADIENT_TOOLWIN_INACTIVE_TITLE_BAR = 7,
2097 VSGRADIENT_TOOLWIN_BACKGROUND = 8
2099 } __GRADIENTTYPE;
2101 typedef DWORD GRADIENTTYPE;
2105 uuid(uuid_IVsGradient),
2106 version(1.0),
2107 pointer_default(unique)
2109 interface IVsGradient : IUnknown
2111 HRESULT DrawGradient([in] HWND hwnd, [in] HDC hdc, [in] RECT * gradientRect, [in] RECT * sliceRect);
2112 HRESULT GetGradientVector([in] int cVector, [in,out, size_is(cVector)] COLORREF* rgVector);
2115 enum __VSCURSORTYPE
2117 VSCURSOR_APPSTARTING = 1,
2118 VSCURSOR_COLUMNSPLIT_EW = 2,
2119 VSCURSOR_COLUMNSPLIT_NS = 3,
2120 VSCURSOR_CONTROL_COPY = 4,
2121 VSCURSOR_CONTROL_DELETE = 5,
2122 VSCURSOR_CONTROL_MOVE = 6,
2123 VSCURSOR_CROSS = 7,
2124 VSCURSOR_DRAGDOCUMENT_MOVE = 8,
2125 VSCURSOR_DRAGDOCUMENT_NOEFFECT = 9,
2126 VSCURSOR_DRAGSCRAP_COPY = 10,
2127 VSCURSOR_DRAGSCRAP_MOVE = 11,
2128 VSCURSOR_DRAGSCRAP_SCROLL = 12,
2129 VSCURSOR_HAND = 13,
2130 VSCURSOR_IBEAM = 14,
2131 VSCURSOR_ISEARCH = 15,
2132 VSCURSOR_ISEARCH_UP = 16,
2133 VSCURSOR_MACRO_RECORD_NO = 17,
2134 VSCURSOR_NO = 18,
2135 VSCURSOR_NOMOVE_2D = 19,
2136 VSCURSOR_NOMOVE_HORIZ = 20,
2137 VSCURSOR_NOMOVE_VERT = 21,
2138 VSCURSOR_PAN_EAST = 22,
2139 VSCURSOR_PAN_NE = 23,
2140 VSCURSOR_PAN_NORTH = 24,
2141 VSCURSOR_PAN_NW = 25,
2142 VSCURSOR_PAN_SE = 26,
2143 VSCURSOR_PAN_SOUTH = 27,
2144 VSCURSOR_PAN_SW = 28,
2145 VSCURSOR_PAN_WEST = 29,
2146 VSCURSOR_POINTER = 30,
2147 VSCURSOR_POINTER_REVERSE = 31,
2148 VSCURSOR_SIZE_NS = 32,
2149 VSCURSOR_SIZE_EW = 33,
2150 VSCURSOR_SIZE_NWSE = 34,
2151 VSCURSOR_SIZE_NESW = 35,
2152 VSCURSOR_SIZE_ALL = 36,
2153 VSCURSOR_SPLIT_EW = 37,
2154 VSCURSOR_SPLIT_NS = 38,
2155 VSCURSOR_UPARROW = 39,
2156 VSCURSOR_WAIT = 40
2158 typedef DWORD VSCURSORTYPE;
2160 // non-standard VS-specific OFN flags
2161 //cpp_quote("#define OFN_ALLOWONLYFILESYSLOCS 0x80000000") //defined in vsshell.idl
2162 cpp_quote("#define OFN_NOADDALLFILESFILTER 0x40000000")
2164 typedef enum tagBWIImagePos
2166 BWI_IMAGE_POS_LEFT = 0x00, // Bitmask values
2167 BWI_IMAGE_POS_RIGHT = 0x01,
2168 BWI_IMAGE_ONLY = 0x02
2169 } __BWI_IMAGE_POS;
2171 typedef DWORD BWI_IMAGE_POS;
2174 typedef struct tagVSDRAWITEMSTRUCT {
2175 UINT CtlType;
2176 UINT CtlID;
2177 UINT itemID;
2178 UINT itemAction;
2179 UINT itemState;
2180 HWND hwndItem;
2181 HDC hDC;
2182 RECT rcItem;
2183 ULONG_PTR itemData;
2184 } VSDRAWITEMSTRUCT;
2188 uuid(uuid_IVsImageButton),
2189 version(1.0),
2190 pointer_default(unique)
2192 interface IVsImageButton : IUnknown
2194 HRESULT Draw([in] VSDRAWITEMSTRUCT* pDrawItemStruct, [in] BOOL fHot);
2199 uuid(uuid_IVsUIShell2),
2200 version(1.0)
2202 interface IVsUIShell2 : IUnknown
2204 // bring up the MSO Open dialog to obtain an open file name.
2205 HRESULT GetOpenFileNameViaDlgEx([in,out] VSOPENFILENAMEW *pOpenFileName, [in] LPCOLESTR pszHelpTopic);
2207 // bring up the MSO Save As dialog to obtain a save file name.
2208 HRESULT GetSaveFileNameViaDlgEx([in,out] VSSAVEFILENAMEW *pSaveFileName, [in] LPCOLESTR pszHelpTopic);
2210 // bring up the MSO Browse dialog to obtain a directory name (possibly in a namespace extension).
2211 HRESULT GetDirectoryViaBrowseDlgEx(
2212 [in,out] VSBROWSEINFOW *pBrowse,
2213 [in] LPCOLESTR pszHelpTopic,
2214 [in] LPCOLESTR pszOpenButtonLabel, // caption text for "Open" button
2215 [in] LPCOLESTR pszCeilingDir, // limit browsing to below this location
2216 [in] VSNSEBROWSEINFOW *pNSEBrowseInfo); // [optional] namespace extension information
2218 // Handle the saving of one or more documents via the "Save changes to following items?" dialog.
2219 // This method displays the dialog to the user and handles the saving of items the user chooses.
2220 // Items to be saved can be identified by the RunningDocumentTable docCookie or by
2221 // pHier/itemid. This method is useful in scenarios where a single document window manages
2222 // edits to multiple documents. Such a case would use a VSFPROPID_ViewHelper to listen for the
2223 // IVsWindowFrameNotify2::OnClose event. When OnClose is called with
2224 // *pgrfSaveOptions==FRAMECLOSE_PromptSave, then SaveItemsViaDlg should be called to save the
2225 // list of items, and OnClose should set *pgrfSaveOptions==FRAMECLOSE_NoSave on return to
2226 // indicate that all necessary saving has already been performed.
2227 HRESULT SaveItemsViaDlg([in] UINT cItems, [in, size_is(cItems)] VSSAVETREEITEM rgSaveItems[]);
2229 //new method for the high definition VsColors
2230 HRESULT GetVSSysColorEx([in] VSSYSCOLOREX dwSysColIndex,
2231 [out] DWORD *pdwRGBval);
2233 HRESULT CreateGradient([in] GRADIENTTYPE gradientType, [out] IVsGradient ** pGradient);
2235 HRESULT GetVSCursor([in] VSCURSORTYPE cursor, [out] HCURSOR* phIcon);
2237 HRESULT IsAutoRecoverSavingCheckpoints([out] BOOL *pfARSaving);
2239 // This method will handle calling LoadMungedDlgTemplate and handle the shell modal state
2240 // It will also automaticly configure the help button to be placed in the title
2241 // bar where context help is normaly displayed. It may not be used in conjunction with
2242 // the ATL dialog template because it does its own subclassing of the dialog procedure.
2243 HRESULT VsDialogBoxParam([in] HINSTANCE hinst, [in] DWORD dwId, [in] DLGPROC lpDialogFunc, [in] LPARAM lp);
2245 HRESULT CreateIconImageButton([in] HWND hwnd, [in] HICON hicon, [in] BWI_IMAGE_POS bwiPos, [out] IVsImageButton** ppImageButton);
2246 HRESULT CreateGlyphImageButton([in] HWND hwnd, [in] WCHAR chGlyph, [in] int xShift, [in] int yShift, [in] BWI_IMAGE_POS bwiPos, [out] IVsImageButton** ppImageButton);
2250 //---------------------------------------------------------------------------
2251 // SVsMainWindowDropTarget
2252 //---------------------------------------------------------------------------
2254 // This service implements IDropTarget interface. It is the drag/drop handler
2255 // for the main window of the IDE. This drag/drop handler handles the CF_HDROP
2256 // format that is used to drag files from the file system (Windows Explorer)
2257 // and other sources that offer files. All windows that do not otherwise register
2258 // for drag/drop (::RegisterDragDrop) will inherit this handler for free.
2259 // Those that register for drag/drop itself will not inherit this file opening.
2261 // NOTE: THIS IS A CHANGE FROM VS 7.0/7.1 -- In these earlier versions the VS
2262 // IDE used the WS_EX_ACCEPTFILES window style on its main window to handle
2263 // opening files via the WM_DROPFILES mechanism. This had the undesireable
2264 // effect of merging unrelated drag/drop behaviors together on a single window.
2265 // A window that otherwise returned S_OK/DROPEFFECT_NONE from IDropTarget::
2266 // DragEnter/DragOver would not actually get a "NoDrop" cursor but instead
2267 // would get the "Copy" cursor indicating that the file will be opened. On
2268 // a window like the Solution Explorer this was very confusing behavior for
2269 // the user. (One way to override this default behavior in VS 7.0/7.1 is to
2270 // return E_FAIL/DROPEFFECT_NONE from DragEnter or DragOver, but this is unnatural.
2272 // Any window that register for drag/drop itself but still wants to inherit
2273 // the default handling for CF_HDROP must QueryService for this object and
2274 // explicitly delegate to it in their implementation of IDropTarget.
2275 // For example, the standard Text Editor wants to allow the user to open files
2276 // by dragging to the Text Editor View. It prioritizes handling CF_HDROP
2277 // over CF_TEXT or any other format. The delegation to this MainWindowDropTarget
2278 // from DragEnter, DragOver, DragLeave, and Drop will look like the following:
2279 // STDMETHODIMP CEditView::DragEnter(IDataObject *pIDataObject, DWORD grfKeyState,
2280 // POINTL pt, DWORD *pdwEffect)
2281 // {
2282 // HRESULT hr = S_OK;
2283 // DWORD dwEffectSave = *pdwEffect;
2284 // CComPtr<IDropTarget> pMainDropTarget;
2285 // if (SUCCEEDED(m_pSP->QueryService(SID_SVsMainWindowDropTarget, IID_IDropTarget, (LPVOID*)&pMainDropTarget)))
2286 // if (pMainDropTarget)
2287 // {
2288 // hr = pMainDropTarget->DragEnter(pIDataObject, grfKeyState, pt, pdwEffect);
2289 // if (SUCCEEDED(hr) && *pdwEffect != DROPEFFECT_NONE)
2290 // return S_OK;
2291 // }
2292 // // restore the original pdwEffect. on input it indicates the allowed drop effects
2293 // *pdwEffect = dwEffectSave;
2294 // ... do what you would other do ...
2296 // declare the service type for interop
2297 [uuid(uuid_SVsMainWindowDropTarget)]
2298 interface SVsMainWindowDropTarget : IUnknown {}
2300 cpp_quote("#define SID_SVsMainWindowDropTarget IID_SVsMainWindowDropTarget")
2303 //---------------------------------------------------------------------------
2304 // IVsSupportItemHandoff2
2305 //---------------------------------------------------------------------------
2306 // Normally only implemented by Miscellaneous Files project.
2307 // Interface retrieved by QI from IVsHierarchy.
2308 // OnBeforeHandoffItem gives the receiver project a chance to do any necessary
2309 // processing of the document to be handed off (primarily save of an untitled
2310 // document to the directory of the destination project). e.g. This is used
2311 // by the Environment's implementation of the cmdidMoveFileToProject<N> commands.
2313 uuid(uuid_IVsSupportItemHandoff2),
2314 version(1.0),
2315 pointer_default(unique)
2317 interface IVsSupportItemHandoff2 : IUnknown
2319 HRESULT OnBeforeHandoffItem(
2320 [in] VSITEMID itemid, // itemid in project where document will be removed
2321 [in] IVsProject3 *pProjDest); // project to which document will be transferred
2324 //---------------------------------------------------------------------------
2325 // IVsLaunchPadOutputParser
2326 //---------------------------------------------------------------------------
2327 // Implemented by the caller of IVsLaunchPad2::ExecCommandEx in order to parse tool output lines for
2328 // task list item or navigation information. The launch pad calls ParseOutputStringForInfo. If task
2329 // item text is returned, the launch pad creates a task list item using the information returned. If
2330 // only filename and line number information is returned, the launch pad adds the line to the output
2331 // window and uses the filename and line number as the navigation information for the output line.
2333 uuid(uuid_IVsLaunchPadOutputParser),
2334 version(1.0),
2335 pointer_default(unique)
2337 interface IVsLaunchPadOutputParser : IUnknown
2339 HRESULT ParseOutputStringForInfo(
2340 [in] LPCOLESTR pszOutputString, // one line of output text
2341 [out, optional] BSTR *pbstrFilename, // fully-qualified file name for task list item (may be NULL)
2342 [out, optional] ULONG *pnLineNum, // file line number for task list item (may be NULL)
2343 [out, optional] ULONG *pnPriority, // priority for task list item (may be NULL)
2344 [out, optional] BSTR *pbstrTaskItemText, // description text for task list item (may be NULL)
2345 [out, optional] BSTR *pbstrHelpKeyword); // help keyword for task list item (may be NULL)
2348 typedef enum
2351 LPF_PipeStdoutToOutputWindow = 0x1,
2352 LPF_PipeStdoutToTaskList = 0x2,
2353 LPF_ClearOutputWindow = 0x4, // clears the specified pane of the output window before spawning the tool
2354 LPF_PauseAfterExecution = 0x8, // wait for keypress to close process spawned in external command window
2356 LPF_TreatOutputAsUnicode = 0x10,
2357 } _LAUNCHPAD_FLAGS2;
2358 typedef DWORD LAUNCHPAD_FLAGS2;
2360 //---------------------------------------------------------------------------
2361 // IVsLaunchPad2
2362 //---------------------------------------------------------------------------
2363 // Implemented by the Environment.
2364 // Interface retrieved by QI after calling IVsLaunchPadFactory::CreateLaunchPad.
2365 // This interface is used to launch a console app. It is useful when a project
2366 // needs to spawn command line tools and batch files as part of its build process,
2367 // and needs the ability to parse the tool output for task list item information.
2369 uuid(uuid_IVsLaunchPad2),
2370 version(1.0),
2371 pointer_default(unique)
2373 interface IVsLaunchPad2 : IUnknown
2375 HRESULT ExecCommandEx(
2376 [in] LPCOLESTR pszApplicationName, // passed on to CreateProcess (see Win32 API for details)
2377 [in] LPCOLESTR pszCommandLine, // passed on to CreateProcess (see Win32 API for details)
2378 [in] LPCOLESTR pszWorkingDir, // may be NULL, passed on to CreateProcess (see Win32 API for details)
2379 [in] LAUNCHPAD_FLAGS2 lpf, // control flags (see vsshell.idl)
2380 [in] IVsOutputWindowPane *pOutputWindowPane, // if LPF_PipeStdoutToOutputWindow, pane in the output window to pipe output to
2381 [in] ULONG nTaskItemCategory, // if LPF_PipeStdoutToTaskList is specified
2382 [in] ULONG nTaskItemBitmap, // if LPF_PipeStdoutToTaskList is specified
2383 [in] LPCOLESTR pszTaskListSubcategory, // if LPF_PipeStdoutToTaskList is specified
2384 [in] IVsLaunchPadEvents *pVsLaunchPadEvents, // callback for cancellation (may be NULL)
2385 [in] IVsLaunchPadOutputParser *pOutputParser, // callback for parsing of information from output (may be NULL)
2386 [out, optional] DWORD *pdwProcessExitCode, // value return by process (may be NULL)
2387 [out, optional] BSTR *pbstrOutput); // all output generated (may be NULL)
2391 //---------------------------------------------------------------------------
2392 // IVsOpenProjectOrSolutionDlg
2393 //---------------------------------------------------------------------------
2394 //Called to open a Solution or Project using the standard open dlgs
2395 //---------------------------------------------------------------------------
2396 enum __VSPROJSLNDLGFLAGS
2398 PSDF_OpenSolutionDialog = 0x00000001, //
2399 PSDF_OpenProjectDialog = 0x00000002, //
2400 PSDF_AddExistingProjectDialog = 0x00000004, //
2401 PSDF_DefaultToAllProjectsFilter = 0x00000008, //
2402 PSDF_DirectoryPicker = 0x00000010, // Puts dialog in directory picker mode. Used to open directory based projects.
2404 typedef DWORD VSPROJSLNDLGFLAGS;
2407 uuid(uuid_IVsOpenProjectOrSolutionDlg),
2408 version(1.0),
2409 pointer_default(unique)
2411 interface IVsOpenProjectOrSolutionDlg : IUnknown
2413 HRESULT OpenProjectOrSolutionViaDlg([in] VSPROJSLNDLGFLAGS grfProjSlnDlgFlags,
2414 [in] LPCOLESTR pwzStartDirectory, // start directory
2415 [in] LPCOLESTR pwzDialogTitle, // dlg title. Leave NULL for default title
2416 [in] REFGUID rguidProjectType); // specifies the project type to use with PSDF_DirectoryPicker
2419 // declare the service type for interop
2420 [uuid(uuid_SVsOpenProjectOrSolutionDlg)]
2421 interface SVsOpenProjectOrSolutionDlg : IUnknown {}
2423 cpp_quote("#define SID_SVsOpenProjectOrSolutionDlg IID_SVsOpenProjectOrSolutionDlg")
2425 //---------------------------------------------------------------------------
2426 // IVsCreateAggregateProject
2427 //---------------------------------------------------------------------------
2429 //---------------------------------------------------------------------------
2431 uuid(uuid_IVsCreateAggregateProject),
2432 version(1.0),
2433 pointer_default(unique)
2435 interface IVsCreateAggregateProject : IUnknown
2437 // Just like IVsSolution::CreateProject except the first param is a list of guids in a string that
2438 // specifies all the project types to aggregate together to create a single project
2439 HRESULT CreateAggregateProject(
2440 [in] LPCOLESTR pszProjectTypeGuids,
2441 [in] LPCOLESTR pszFilename,
2442 [in] LPCOLESTR pszLocation,
2443 [in] LPCOLESTR pszName,
2444 [in] VSCREATEPROJFLAGS grfCreateFlags,
2445 [in] REFIID iidProject,
2446 [out, iid_is(iidProject)] void **ppvProject);
2449 [uuid(uuid_SVsCreateAggregateProject)]
2450 interface SVsCreateAggregateProject : IUnknown
2453 cpp_quote("#define SID_SVsCreateAggregateProject IID_SVsCreateAggregateProject")
2455 //---------------------------------------------------------------------------
2456 // IVsAggregatableProject
2457 //---------------------------------------------------------------------------
2458 //Implemented by a project that supports aggregation
2459 //---------------------------------------------------------------------------
2461 uuid(uuid_IVsAggregatableProject),
2462 version(1.0),
2463 pointer_default(unique)
2465 interface IVsAggregatableProject : IUnknown
2467 // Allows the project aggregator to pass the inner IUnknown of the project you're aggregating to you.
2468 HRESULT SetInnerProject([in] IUnknown *punkInner);
2470 // Called by the owner to tell the owned project to do all it's initialisation.
2471 // The owned project should do all its CreateProject work in here.
2472 // The cookie parameter is just the cookie which the owned project passed back in PreCreateForOwner. This allows the
2473 // owned project to create its project object
2474 HRESULT InitializeForOuter(
2475 [in] LPCOLESTR pszFilename,
2476 [in] LPCOLESTR pszLocation,
2477 [in] LPCOLESTR pszName,
2478 [in] VSCREATEPROJFLAGS grfCreateFlags,
2479 [in] REFIID iidProject,
2480 [out, iid_is(iidProject)] void **ppvProject,
2481 [out] BOOL *pfCanceled);
2483 // Called after all objects in the aggregation was called on InitializeForOuter.
2484 // At this point the Aggregation can be considered fully functional.
2485 // Here would be the place for flavor to do initialization with external packages/objects
2486 // that needs to receive an interface pointers from the aggregation.
2487 // Flavors should call inner->OnAggregationComplete() in their implementation on OnAggregationComplete
2488 HRESULT OnAggregationComplete();
2490 // gets and sets the list of project type guids that make up this aggregate project\
2491 // Note: If you are not the inner most project, you should delegate this call to
2492 // your inner project.
2493 HRESULT GetAggregateProjectTypeGuids([out] BSTR *pbstrProjTypeGuids);
2494 HRESULT SetAggregateProjectTypeGuids([in] LPCOLESTR lpstrProjTypeGuids);
2497 //---------------------------------------------------------------------------
2498 // IVsAggregatableProjectFactory
2499 //---------------------------------------------------------------------------
2500 //Implemented by a projecttype that supports aggregation
2501 //---------------------------------------------------------------------------
2503 uuid(uuid_IVsAggregatableProjectFactory),
2504 version(1.0),
2505 pointer_default(unique)
2507 interface IVsAggregatableProjectFactory : IUnknown
2509 // returns a string containing a list of project type guids to be aggregated together to
2510 // create an instance of this project. It should minimally return 1 guid which is the project
2511 // type guid for itself. This method is expected to get this list of guids from the specified file
2512 HRESULT GetAggregateProjectType([in] LPCOLESTR pszFilename, [out] BSTR *pbstrProjTypeGuid);
2514 // Called by the owner/outer so that the owned/inner project can create an aggregatable
2515 // version of itself, using punkOwner as the controlling IUnknown.
2516 // The owned project should only create its project object instance here. All the heavy
2517 // initialization work should occur in IVsAggregatableProject::InitializeForOwner. That ensures the owner/outer project will work
2518 // work correctly during the owned/inner initialization.
2519 // The owned project must return its inner IUnknown
2520 HRESULT PreCreateForOuter([in] IUnknown *punkOuter, [out] IUnknown **ppunkProject);
2523 //---------------------------------------------------------------------------
2524 // IVsParentProject2
2525 //---------------------------------------------------------------------------
2526 // [optional] Implemented by a project that supports creation of nested projects.
2527 //---------------------------------------------------------------------------
2529 uuid(uuid_IVsParentProject2),
2530 version(1.0),
2531 pointer_default(unique)
2533 interface IVsParentProject2 : IUnknown
2535 // This method provides a way for callers to add a nested project to a project (for example, a solution folder) in the same way
2536 // that it is done through the UI. The parameters are the same as those for IVsSolution::CreateProject, so if the project supports
2537 // IVsParentProject2, IVsParentProject2::CreateNestedProject can be called, and if not, IVsSolution::CreateProject can be called.
2538 HRESULT CreateNestedProject([in] VSITEMID itemidLoc, [in] REFGUID rguidProjectType, [in] LPCOLESTR lpszMoniker, [in] LPCOLESTR lpszLocation,
2539 [in] LPCOLESTR lpszName, [in] VSCREATEPROJFLAGS grfCreateFlags, [in] REFGUID rguidProjectID, [in] REFIID iidProject, [out, iid_is(iidProject)] void **ppProject);
2540 // This method provides a way for callers to add the contents of a solution to a project (for example, a solution folder) in the same way
2541 // that it is done through the UI. The parameters are the same as those for IVsSolution::OpenSolutionFile, so if the project supports
2542 // IVsParentProject2, IVsParentProject2::CreateNestedProject can be called, and if not, IVsSolution::CreateProject can be called.
2543 HRESULT AddNestedSolution([in] VSITEMID itemidLoc, [in] VSSLNOPENOPTIONS grfOpenOpts, [in] LPCOLESTR pszFilename);
2546 //---------------------------------------------------------------------------
2547 // Specifyes the persistent location for IVsBuildPropertyStorage and IPersistXMLFragment
2548 //---------------------------------------------------------------------------
2549 enum _PersistStorageType
2551 PST_PROJECT_FILE = 1,
2552 PST_USER_FILE = 2
2554 typedef DWORD PersistStorageType;
2556 //---------------------------------------------------------------------------
2557 // IVsBuildPropertyStorage
2558 //---------------------------------------------------------------------------
2559 // Used to access property values from XMAKE section of project file
2561 uuid(uuid_IVsBuildPropertyStorage),
2562 version(1.0),
2563 pointer_default(unique)
2565 interface IVsBuildPropertyStorage : IUnknown
2567 HRESULT GetPropertyValue( [in] LPCOLESTR pszPropName, [in] LPCOLESTR pszConfigName, [in] PersistStorageType storage, [out, retval] BSTR* pbstrPropValue);
2568 HRESULT SetPropertyValue( [in] LPCOLESTR pszPropName, [in] LPCOLESTR pszConfigName, [in] PersistStorageType storage, [in] LPCOLESTR pszPropValue);
2569 HRESULT RemoveProperty( [in] LPCOLESTR pszPropName, [in] LPCOLESTR pszConfigName, [in] PersistStorageType storage);
2570 HRESULT GetItemAttribute( [in] VSITEMID item, [in] LPCOLESTR pszAttributeName, [out] BSTR *pbstrAttributeValue);
2571 HRESULT SetItemAttribute( [in] VSITEMID item, [in] LPCOLESTR pszAttributeName, [in] LPCOLESTR pszAttributeValue);
2574 // Flags used in IVsProjectBuildSystem.GetBuildSystemKind. Flag values 0x0001-0x8000 are reserved for Visual Studio use
2575 enum _BuildSystemKindFlags
2577 BSK_MSBUILD = 1 // indicates that the build system stores files in the MSBuild format
2579 typedef DWORD BuildSystemKindFlags;
2581 //---------------------------------------------------------------------------
2582 // IVsProjectBuildSystem
2583 //---------------------------------------------------------------------------
2584 // Used to access MSBuild system objects
2586 uuid(uuid_IVsProjectBuildSystem),
2587 version(1.0),
2588 pointer_default(unique)
2590 interface IVsProjectBuildSystem : IUnknown
2592 HRESULT SetHostObject( [in] LPCOLESTR pszTargetName, [in] LPCOLESTR pszTaskName, [in] IUnknown* punkHostObject);
2594 // These methods are used to force the build system into "batch mode". That is,
2595 // any changes/properties set between StartBatchEdit() and EndBatchEdit() will not
2596 // be committed to the IDE compilers until EndBatchEdit() is called.
2597 HRESULT StartBatchEdit();
2598 HRESULT EndBatchEdit();
2599 HRESULT CancelBatchEdit();
2601 HRESULT BuildTarget( [in] LPCOLESTR pszTargetName, [out, retval] VARIANT_BOOL* pbSuccess );
2603 // Used to determine the kind of build system, in VS 2005 there's only one defined kind: MSBuild
2604 HRESULT GetBuildSystemKind([out, retval] BuildSystemKindFlags* pBuildSystemKind);
2607 //---------------------------------------------------------------------------
2608 // IPersistXMLFragment
2609 //---------------------------------------------------------------------------
2610 // Implemented by flavor object . Used to map persist non XMake (non build related)
2611 // flavor specific data.
2615 uuid(uuid_IPersistXMLFragment),
2616 version(1.0),
2617 pointer_default(unique)
2619 interface IPersistXMLFragment: IUnknown
2621 // Called to initialize the project extension properies and other data
2622 HRESULT InitNew([in] REFGUID guidFlavor, [in] PersistStorageType storage);
2624 HRESULT IsFragmentDirty([in] PersistStorageType storage, [out] BOOL *pfDirty);
2626 // Base project system will load the apropriate piece of XML from project and user file related to the given Flavor GUID and call the Flavors to depersit its data
2627 HRESULT Load([in] REFGUID guidFlavor, [in] PersistStorageType storage, [in] LPCOLESTR pszXMLFragment);
2629 // Base project system will ask the flavors to build their XML sections and save them in Project/User file
2630 HRESULT Save([in] REFGUID guidFlavor, [in] PersistStorageType storage, [out] BSTR *pbstrXMLFragment, [in] BOOL fClearDirty);
2635 //------------------------------------------------------------------
2636 // IVsProjectFlavorCfg
2637 //------------------------------------------------------------------
2638 // Implemented by a project flavor.
2639 // These objects are instantiated via the IVsProjectFlavorCfgProvider
2640 // interface.
2641 // This interface is implemented by a project flavor's configuration object
2642 // in order to enhance the base project configuration object implementation.
2643 // The object that implements this interface should also implement
2644 // IPersistXMLFragment to manage the persistance of its state into the
2645 // project file.
2647 uuid(uuid_IVsProjectFlavorCfg),
2648 version(1.0),
2649 pointer_default(unique)
2651 interface IVsProjectFlavorCfg : IUnknown
2653 // iidCfg can be any of the standard Cfg interfaces
2654 // (e.g. IVsDeployableProjectCfg, IVsDebuggableProjectCfg).
2655 HRESULT get_CfgType([in] REFIID iidCfg, [out, iid_is(iidCfg)] void **ppCfg);
2656 HRESULT Close(void);
2659 //------------------------------------------------------------------
2660 // IVsProjectFlavorCfgOutputGroups
2661 //------------------------------------------------------------------
2662 // Implemented by project flavors if they whant to control Output groups content
2663 // The base project ask for IVsProjectFlavorCfgOutputGroups via IVsProjectFlavorCfg::get_CfgType
2666 uuid(uuid_IVsProjectFlavorCfgOutputGroups),
2667 version(1.0),
2668 pointer_default(unique)
2670 interface IVsProjectFlavorCfgOutputGroups : IUnknown
2672 HRESULT CustomizeOutputGroup( [in] IVsOutputGroup *pIn, [out] IVsOutputGroup **pOut);
2675 //------------------------------------------------------------------
2676 // IVsProjectFlavorCfgProvider
2677 //------------------------------------------------------------------
2678 // Implemented by a project flavor.
2679 // This interface is retrieve by QueryInterface from the IVsProjectFlavor
2680 // object.
2681 // This interface functions as the factory for project flavor's configuration
2682 // objects. The base project system will ask the project flavor to create a // IVsProjectFlavorCfg object corresponding to each one of its configuration
2683 // objects. The ProjectFlavorCfg objects can implement IPersistXMLFragment to
2684 // manage persistence into the project file. The base project system will
2685 // call Init/Load/Save as appropriate. The ProjectFlavorCfg object can hold
2686 // an addref'ed pointer to the base project's IVsCfg object.
2688 uuid(uuid_IVsProjectFlavorCfgProvider),
2689 version(1.0),
2690 pointer_default(unique)
2692 interface IVsProjectFlavorCfgProvider : IUnknown
2694 HRESULT CreateProjectFlavorCfg([in] IVsCfg *pBaseProjectCfg, [out] IVsProjectFlavorCfg **ppFlavorCfg);
2697 enum __UPDATE_REFERENCE_REASON
2699 URR_PROJECT_OPEN,
2700 URR_BUILD,
2701 URR_START_DEBUG,
2702 URR_REFERENCEPATH_CHANGED,
2703 URR_REFERENCE_ADDED,
2704 URR_REFERENCE_REMOVED,
2705 URR_EXPLICIT_USER_ACTION
2708 typedef DWORD UPDATE_REFERENCE_REASON;
2710 //------------------------------------------------------------------
2711 // IVsProjectFlavorReferences
2712 // Gives the flavor mechanism to control certain aspects of project reference handling.
2713 //------------------------------------------------------------------
2715 uuid(uuid_IVsProjectFlavorReferences),
2716 version(1.0),
2717 pointer_default(unique)
2719 interface IVsProjectFlavorReferences : IUnknown
2721 // Called before adding a refernece into a flavored project. Allow the flavor reject some particular reference
2722 HRESULT QueryAddProjectReference([in] IUnknown *pReferencedProject, [out, retval] BOOL *pbCanAdd);
2724 // Called before other project attempts to aquire reference to a flavor. Flavor can deny being referenced
2725 HRESULT QueryCanBeReferenced([in] IUnknown *pReferencingProject, [out, retval] BOOL *pbAllowReferenced);
2727 // Called before update reference is executed. Flavor may hint against updating the references.
2728 HRESULT QueryRefreshReferences([in] UPDATE_REFERENCE_REASON reason, [out, retval] BOOL *pbUpdate);
2732 //---------------------------------------------------------------------------
2733 // VSTRANSACCELEXFLAGS
2734 //---------------------------------------------------------------------------
2736 // Flags for IVsFilterKeys2::TranslateAcceleratorEx
2737 enum __VSTRANSACCELEXFLAGS
2739 VSTAEXF_Default = 0x00000000, // rgrguidKeyBindingScopes are
2740 // pre-pended to currently active
2741 // key binding scopes and command
2742 // is fired.
2743 VSTAEXF_NoFireCommand = 0x00000001, // do not fire the command through command routing.
2744 VSTAEXF_IgnoreActiveKBScopes = 0x00000002, // rgrguidKeyBindingScopes are
2745 // used INSTEAD of currently active
2746 // key binding scopes
2747 VSTAEXF_UseTextEditorKBScope = 0x00000004, // Translate keys using TextEditor key bindings.
2748 // equivalent to passing CMDUIGUID_TextEditor,
2749 // CMDSETID_StandardCommandSet97, and guidKeyDupe
2750 // for scopes and the VSTAEXF_IgnoreActiveKBScopes flag.
2751 // NOTE: use this flag instead of passing any GUIDS
2752 // (i.e. cKeyBindingScopes must be 0)
2753 VSTAEXF_UseGlobalKBScope = 0x00000008, // Translate keys using Global key bindings.
2754 // equivalent to passing CMDSETID_StandardCommandSet97
2755 // and guidKeyDupe for scopes and the
2756 // VSTAEXF_IgnoreActiveKBScopes flag.
2757 // NOTE: use this flag instead of passing any GUIDS
2758 // (i.e. cKeyBindingScopes must be 0)
2759 VSTAEXF_AllowModalState = 0x00000010, // By default this function cannot be called when
2760 // the shell is in a modal state, since command routing
2761 // is inherently dangerous. However if you must access
2762 // this in a modal state, specify this flag, but keep in
2763 // mind that many commands will cause unpredictable
2764 // behavior if fired.
2766 typedef DWORD VSTRANSACCELEXFLAGS;
2768 //---------------------------------------------------------------------------
2769 // IVsFilterKeys2
2770 //---------------------------------------------------------------------------
2771 // Implemented by the Environment.
2772 // Interface for clients to perform advanced keyboard message translation
2774 uuid(uuid_IVsFilterKeys2),
2775 version(1.0),
2776 pointer_default(unique)
2778 interface IVsFilterKeys2 : IUnknown
2780 // Called to determine what command the specified Windows message will be
2781 // translated into given a specified set of active keybinding scopes,
2782 // and optionally to fire the cmd through standard command routing. For
2783 // example, to use the text editor's key bindings CMDUIGUID_TextEditor would
2784 // be passed. If the msg did/will translate to a
2785 // command, this method returns *fCmdTranslated==TRUE and fills the out
2786 // params with the commands guid/id pair. If the msg did/will not translate
2787 // to a command, this method returns *fCmdTranslated==FALSE, and sets the
2788 // out params to zeros.
2790 // If VSTAEXF_IgnoreActiveKBScopes is not specified, then the currently active
2791 // scopes are searched after those specified by the caller through
2792 // cKeyBindingScopes/rgguidKeyBindingScopes.
2794 HRESULT TranslateAcceleratorEx(
2795 [in] LPMSG pMsg,
2796 [in] VSTRANSACCELEXFLAGS dwFlags,
2797 [in] DWORD cKeyBindingScopes,
2798 [in, size_is(cKeyBindingScopes)] const GUID rgguidKeyBindingScopes[],
2799 [out] GUID *pguidCmd,
2800 [out] DWORD *pdwCmd,
2801 [out] BOOL *fCmdTranslated,
2802 [out] BOOL *pfKeyComboStartsChord
2806 enum __UserSettingsFlags
2808 USF_None = 0x00000000,
2809 USF_ResetOnImport = 0x00000001,
2810 USF_DisableOptimizations = 0x00000002
2812 typedef DWORD UserSettingsFlags;
2814 enum __VSSETTINGSERRORTYPES
2816 vsSettingsErrorTypeSuccess = 0x00000000, //
2817 vsSettingsErrorTypeError = 0x00000001, //
2818 vsSettingsErrorTypeWarning = 0x00000002, //
2819 vsSettingsErrorTypeRestart = 0x00000004, //
2820 vsSettingsErrorTypeNotInstalled = 0x00000008, //
2821 vsSettingsErrorTypeMask = 0x0000000F, //
2823 typedef DWORD VSSETTINGSERRORTYPES;
2825 //---------------------------------------------------------------------------
2826 // IVsSettingsReader
2827 //---------------------------------------------------------------------------
2828 // Implemented by the IDE.
2829 // Interface to allow client packages to read settings from their category
2830 // of the vssettings file.
2832 // This interface is available as a parameter passed to IVsUserSettings.ImportSettings()
2835 uuid(uuid_IVsSettingsReader),
2836 version(1.0),
2837 pointer_default(unique)
2839 interface IVsSettingsReader : IUnknown
2841 HRESULT ReadSettingString([in] LPCOLESTR pszSettingName, [out, retval] BSTR *pbstrSettingValue);
2842 HRESULT ReadSettingLong([in] LPCOLESTR pszSettingName, [out, retval] long *plSettingValue);
2843 HRESULT ReadSettingBoolean([in] LPCOLESTR pszSettingName, [out, retval] BOOL *pfSettingValue);
2844 //pSettingValue must be allocated and passed in
2845 //passing NULL for pSettingValue will cause *plDataLength to be returned with the necessary size of the input buffer
2846 HRESULT ReadSettingBytes([in] LPCOLESTR pszSettingName, [in, out] BYTE *pSettingValue, [out] long *plDataLength, [in] long lDataMax);
2847 HRESULT ReadSettingAttribute([in] LPCOLESTR pszSettingName,[in] LPCOLESTR pszAttributeName, [out, retval] BSTR *pbstrSettingValue);
2848 HRESULT ReadSettingXml([in] LPCOLESTR pszSettingName, [out, retval] IUnknown **ppIXMLDOMNode);
2849 HRESULT ReadSettingXmlAsString([in] LPCOLESTR pszSettingName, [out, retval] BSTR *pbstrXML);
2850 HRESULT ReadCategoryVersion([out] int *pnMajor, [out] int *pnMinor, [out] int *pnBuild, [out] int *pnRevision);
2851 HRESULT ReadFileVersion([out] int *pnMajor, [out] int *pnMinor, [out] int *pnBuild, [out] int *pnRevision);
2852 HRESULT ReportError([in] LPCOLESTR pszError, VSSETTINGSERRORTYPES dwErrorType);
2855 //---------------------------------------------------------------------------
2856 // IVsSettingsWriter
2857 //---------------------------------------------------------------------------
2858 // Implemented by the IDE.
2859 // Interface to allow client packages to write settings into their category
2860 // of the vssettings file.
2862 // This interface is available as a parameter passed to IVsUserSettings.ImportSettings()
2865 uuid(uuid_IVsSettingsWriter),
2866 version(1.0),
2867 pointer_default(unique)
2869 interface IVsSettingsWriter : IUnknown
2871 HRESULT WriteSettingString([in] LPCOLESTR pszSettingName, [in] LPCOLESTR pszSettingValue);
2872 HRESULT WriteSettingLong([in] LPCOLESTR pszSettingName, [in] long lSettingValue);
2873 HRESULT WriteSettingBoolean([in] LPCOLESTR pszSettingName, [in] BOOL fSettingValue);
2874 HRESULT WriteSettingBytes([in] LPCOLESTR pszSettingName, [in, size_is(lDataLength)] BYTE *pSettingValue, long lDataLength);
2875 HRESULT WriteSettingAttribute([in] LPCOLESTR pszSettingName, [in] LPCOLESTR pszAttributeName, [in] LPCOLESTR pszSettingValue);
2876 HRESULT WriteSettingXml([in] IUnknown *pIXMLDOMNode);
2877 HRESULT WriteSettingXmlFromString([in] LPCOLESTR szXML);
2878 HRESULT WriteCategoryVersion([in] int nMajor, [in] int nMinor, [in] int nBuild, [in] int nRevision);
2879 HRESULT ReportError([in] LPCOLESTR pszError, [in] VSSETTINGSERRORTYPES dwErrorType);
2883 //---------------------------------------------------------------------------
2884 // IVsUserSettings
2885 //---------------------------------------------------------------------------
2886 // Implemented by client packages.
2887 // Interface to allow the IDE to request that a settings category imports/exports its settings.
2889 // This interface must be made available via a QueryInterface call on the IVsPackage object.
2892 uuid(uuid_IVsUserSettings),
2893 version(1.0),
2894 pointer_default(unique)
2896 interface IVsUserSettings : IUnknown
2898 HRESULT ExportSettings([in] LPCOLESTR pszCategoryGUID, [in] IVsSettingsWriter *pSettings);
2899 HRESULT ImportSettings([in] LPCOLESTR pszCategoryGUID, [in] IVsSettingsReader *pSettings, [in] UserSettingsFlags flags, [in, out] BOOL *pfRestartRequired);
2903 // declare the service type for interop
2904 [uuid(uuid_SVsSettingsReader)]
2905 interface SVsSettingsReader : IUnknown {}
2907 cpp_quote("#define SID_SVsSettingsReader IID_SVsSettingsReader")
2910 //---------------------------------------------------------------------------
2911 // IVsUserSettingsQuery
2912 //---------------------------------------------------------------------------
2913 // Implemented by client packages.
2914 // Interface to allow the IDE to find out whether a category requires an export of its settings.
2916 // This interface must be made available via a QueryInterface call on the IVsPackage object.
2919 uuid(uuid_IVsUserSettingsQuery),
2920 version(1.0),
2921 pointer_default(unique)
2923 interface IVsUserSettingsQuery : IUnknown
2925 HRESULT NeedExport([in] LPCOLESTR szCategoryGUID, [out] BOOL *pfNeedExport);
2929 interface IVsProfileSettingsFileInfo;
2930 interface IVsProfileSettingsFileCollection;
2931 interface IVsProfileSettingsTree;
2932 interface IVsProfileDataManager;
2933 interface IVsProfilesManagerUI;
2936 //Note: we use this list for sorting the filelist in the UI
2937 // keep the list ordered such that lower numbers have the highest priority
2938 enum __VSPROFILELOCATIONS
2940 PFL_LocationNone = 0x00000000, // used only for init
2941 PFL_InstallDir = 0x00000001, // File resides in the installation directory
2942 PFL_SettingsDir = 0x00000002, // File resides in the user's default settings directory
2943 PFL_Other = 0x00000004, // Custom file that the user has browsed to
2944 PFL_AutoSave = 0x00000008, // Add the current autosave file
2945 PFL_All = 0xFFFFFFFF, // Custom file that the user has browsed to
2947 typedef DWORD VSPROFILELOCATIONS;
2949 enum __VSPROFILETEAMSETTINGSFLAGS
2951 PTSF_CHECKFORUPDATE = 0x00000000, // Import from the teamsettings file if it is newer than remember
2952 PTSF_UPDATEALWAYS = 0x00000001, // Force an import from the teamsettings file
2954 typedef DWORD VSPROFILETEAMSETTINGSFLAGS;
2956 enum __VSPROFILETEAMSETTINGSCHANGEDFLAGS
2958 PTSCF_TEAMFILE_NOCHANGE = 0x00000000, // The team file setting has not been touched
2959 PTSCF_TEAMFILE_CHANGED = 0x00000001, // The team file has been changed from its previous value
2960 PTSCF_TEAMFILE_SAME = 0x00000002, // The team file setting has been updated, but the value is the same as before
2962 typedef DWORD VSPROFILETEAMSETTINGSCHANGEDFLAGS;
2964 enum __VSPROFILECATEGORYSECURITY
2966 PCSEC_SAFE = 0x00000000, // The settings in this cateogy are safe
2967 PCSEC_THREAT_VS = 0x00000001, // The settings in this category could threaten the VS user experience
2968 PCSEC_THREAT_MACHINE = 0x00000002, // The settings in this category could threaten the machine, or user data
2970 typedef DWORD VSPROFILECATEGORYSECURITY;
2972 enum __VSPROFILECATEGORYSENSITIVITY
2974 PCSEN_SAFE = 0x00000000, // The settings in this category contain no sensitive information
2975 PCSEN_PRIVACY = 0x00000001, // The settings in this category could compromise a user's privacy
2977 typedef DWORD VSPROFILECATEGORYSENSITIVITY;
2979 enum __VSPROFILEGETFILENAME
2981 PGFN_EXPORT = 0x00000001, // Use the default export root file name
2982 PGFN_SAVECURRENT = 0x00000002, // Use the default current settings root file name
2983 PGFN_AUTOSAVE = 0x00000004, // Use the default autosave root file name
2985 typedef DWORD VSPROFILEGETFILENAME;
2987 enum __VSSETTINGSCOMPLETIONSTATUS
2989 vsSettingsCompletionStatusNotStarted = 0x00000000, //
2990 vsSettingsCompletionStatusIncomplete = 0x00000001, //
2991 vsSettingsCompletionStatusComplete = 0x00000002, //
2992 vsSettingsCompletionStatusStateMask = 0x0000000F, //
2993 vsSettingsCompletionStatusSuccess = 0x00000000, //
2994 vsSettingsCompletionStatusWarnings = 0x00000010, //
2995 vsSettingsCompletionStatusErrors = 0x00000020, //
2996 vsSettingsCompletionStatusSuccessMask = 0x000000F0, //
2998 typedef DWORD VSSETTINGSCOMPLETIONSTATUS;
3001 //---------------------------------------------------------------------------
3002 // IVsProfileSettingsFileInfo
3003 //---------------------------------------------------------------------------
3004 // Implemented by the IDE.
3005 // This is an internal interface used to allow communication between native and
3006 // managed code in the IDE.
3009 uuid(uuid_IVsProfileSettingsFileInfo),
3010 version(1.0),
3011 pointer_default(unique)
3013 interface IVsProfileSettingsFileInfo : IUnknown
3015 HRESULT GetFilePath([out] BSTR *pbstrFilePath);
3016 HRESULT GetFileLocation([out] VSPROFILELOCATIONS *pfileLocation);
3017 HRESULT GetFriendlyName([out] BSTR *pbstrFriendlyName);
3018 HRESULT GetDescription([out] BSTR *pbstrDescription);
3020 HRESULT GetSettingsForImport([out] IVsProfileSettingsTree **ppSettingsTree);
3024 //---------------------------------------------------------------------------
3025 // IVsProfileSettingsFileCollection
3026 //---------------------------------------------------------------------------
3027 // Implemented by the IDE.
3028 // This is an internal interface used to allow communication between native and
3029 // managed code in the IDE.
3032 uuid(uuid_IVsProfileSettingsFileCollection),
3033 version(1.0),
3034 pointer_default(unique)
3036 interface IVsProfileSettingsFileCollection : IUnknown
3038 HRESULT GetCount([out] int *pCount);
3039 HRESULT GetSettingsFile([in] int index, [out] IVsProfileSettingsFileInfo **ppFileInfo);
3040 HRESULT AddBrowseFile([in] BSTR bstrFilePath, [out] IVsProfileSettingsFileInfo **ppFileInfo); //Add a file to the file collection
3044 //---------------------------------------------------------------------------
3045 // IVsProfileSettingsTree
3046 //---------------------------------------------------------------------------
3047 // Implemented by the IDE.
3048 // This is an internal interface used to allow communication between native and
3049 // managed code in the IDE.
3052 uuid(uuid_IVsProfileSettingsTree),
3053 version(1.0),
3054 pointer_default(unique)
3056 interface IVsProfileSettingsTree : IUnknown
3058 HRESULT GetChildCount([out] int *pCount);
3059 HRESULT GetChild([in] int index, [out] IVsProfileSettingsTree **ppChildTree);
3060 HRESULT GetEnabledChildCount([out] int *pCount);
3062 HRESULT GetDisplayName([out] BSTR *pbstrName);
3063 HRESULT GetDescription([out] BSTR *pbstrDescription);
3065 HRESULT GetCategory([out] BSTR *pbstrCategory);
3066 HRESULT GetRegisteredName([out] BSTR *pbstrRegisteredName);
3067 HRESULT GetNameForID([out] BSTR *pbstrNameForID);
3068 HRESULT GetFullPath([out] BSTR *pbstrFullPath);
3069 HRESULT GetPackage([out] BSTR *pbstrPackage);
3070 HRESULT GetIsAutomationPropBased([out] BOOL *pfAutoProp);
3072 HRESULT GetEnabled([out] BOOL *pfEnabled);
3073 HRESULT SetEnabled([in] BOOL fEnabled, [in] BOOL fIncludeChildren);
3075 HRESULT GetVisible([out] BOOL *pfVisible); //Nodes with placeholder nodes are invisible
3076 HRESULT GetAlternatePath([out] BSTR *pbstrAlternatePath); //The name of parent node for this node's placeholder node
3078 HRESULT GetIsPlaceholder([out] BOOL *pfPlaceholder); //Is this a placeholder node
3079 HRESULT GetRepresentedNode([out] IVsProfileSettingsTree **ppRepresentedNode); //A placeholder node has a represented node
3081 HRESULT GetSecurityLevel([out] VSPROFILECATEGORYSECURITY *pSecurityLevel);
3082 HRESULT GetSensitivityLevel([out] VSPROFILECATEGORYSENSITIVITY *pSensitivityLevel);
3084 HRESULT FindChildTree([in] BSTR bstrNameSearch, [out] IVsProfileSettingsTree **ppChildTree);
3086 HRESULT AddChildTree([in] IVsProfileSettingsTree *pChildTree); //Add the given tree as a child tree
3087 HRESULT RevisePlacements([in] IVsProfileSettingsTree *pTreeRoot, [in] IVsProfileSettingsTree *pTreeRootBasis, [in] BSTR bstrCurrentParent); //If this tree has an alternate root specified, then add self as a child in that tree
3091 //---------------------------------------------------------------------------
3092 // IVsSettingsErrorInformation
3093 //---------------------------------------------------------------------------
3094 // Implemented by the IDE.
3095 // This is an internal interface used to allow communication between native and
3096 // managed code in the IDE.
3099 uuid(uuid_IVsSettingsErrorInformation),
3100 version(1.0),
3101 pointer_default(unique)
3103 interface IVsSettingsErrorInformation : IUnknown
3105 HRESULT GetCompletionStatus([out, retval] VSSETTINGSCOMPLETIONSTATUS *pdwCompletionStatus);
3107 HRESULT GetErrorCount([out, retval] int *pnErrors);
3108 HRESULT GetErrorInfo([in] int nErrorIndex, [out] VSSETTINGSERRORTYPES *pdwErrorType, [out] BSTR *pbstrError);
3112 //---------------------------------------------------------------------------
3113 // IVsProfileDataManager
3114 //---------------------------------------------------------------------------
3115 // Implemented by the IDE.
3116 // Interface allows the settings features to be driven programatically. This is
3117 // predominantly used as an internal interface to allow communication between
3118 // native and managed code in the IDE.
3120 // This interface is available via QueryService(SVsProfileDataManager)
3123 uuid(uuid_IVsProfileDataManager),
3124 version(1.0),
3125 pointer_default(unique)
3127 interface IVsProfileDataManager : IUnknown
3129 //The path of the vssettings file chosen on first launch, or the last file the user reset to
3130 HRESULT LastResetPoint([out] BSTR *pbstrResetFilename);
3132 HRESULT GetSettingsFiles([in] VSPROFILELOCATIONS fileLocations, [out] IVsProfileSettingsFileCollection **ppCollection);
3133 HRESULT GetDefaultSettingsLocation([out] BSTR *pbstrSettingsLocation);
3134 HRESULT GetUniqueExportFileName([in] VSPROFILEGETFILENAME flags, [out] BSTR *pbstrExportFile);
3135 HRESULT GetSettingsFileExtension([out] BSTR *pbstrSettingsFileExtension);
3137 HRESULT GetSettingsForExport([out] IVsProfileSettingsTree **ppSettingsTree);
3139 HRESULT ExportSettings([in] BSTR bstrFilePath, [in] IVsProfileSettingsTree *pSettingsTree, [out] IVsSettingsErrorInformation **ppsettingsErrorInformation);
3140 HRESULT ImportSettings([in] IVsProfileSettingsTree *pSettingsTree, [out] IVsSettingsErrorInformation **ppsettingsErrorInformation);
3141 HRESULT ResetSettings([in] IVsProfileSettingsFileInfo *pFileInfo, [out] IVsSettingsErrorInformation **ppsettingsErrorInformation);
3142 HRESULT ExportAllSettings([in] BSTR bstrFilePath, [out] IVsSettingsErrorInformation **ppsettingsErrorInformation);
3143 HRESULT AutoSaveAllSettings([out] IVsSettingsErrorInformation **ppsettingsErrorInformation);
3145 HRESULT CheckUpdateTeamSettings([in] VSPROFILETEAMSETTINGSFLAGS dwFlags);
3146 HRESULT ReportTeamSettingsChanged([in] VSPROFILETEAMSETTINGSCHANGEDFLAGS dwFlags);
3148 HRESULT ShowProfilesUI();
3151 // declare the service type for interop
3152 [uuid(uuid_SVsProfileDataManager)]
3153 interface SVsProfileDataManager : IUnknown {}
3155 cpp_quote("#define SID_SVsProfileDataManager IID_SVsProfileDataManager")
3157 //---------------------------------------------------------------------------
3158 // IVsDeferredSaveProject
3159 //---------------------------------------------------------------------------
3160 // Implemented by a project that supports being a "zero-impact" project.
3161 // The flags in the VSDIR file for the project must include VSDIRFLAG_DeferredSaveProject.
3162 // This means that the project name will be automatically generated, as will the location,
3163 // which will be at some temporary location (imitating the "in-memory" project experience).
3164 // Then, when the project is created, CPF_DEFERREDSAVE is passed as one of the grfCreateFlags
3165 // to IVsProjectFactory::CreateProject and/or IVsAggregatableProject::InitializeForOuter.
3166 // The solution will be limited to containing one project, and nothing will be considered
3167 // "dirty" while the solution/project are "zero-impact".
3168 // When the user chooses to save the project permanently, he will use File.SaveAll, which
3169 // will present him with a file browser with which he is to choose the new filename/location
3170 // for his project file. Once he chooses the filename, SaveProjectToLocation is called and
3171 // the project must save itself to the specified filename and save all its other contents to
3172 // the folder where the filename was specified. At this point, the solution/project will no
3173 // longer be considered "zero-impact" and normal solution/project operations will be available.
3174 //---------------------------------------------------------------------------
3176 uuid(uuid_IVsDeferredSaveProject),
3177 version(1.0),
3178 pointer_default(unique)
3180 interface IVsDeferredSaveProject : IUnknown
3182 // tells the project to save itself and all its contents to the specified location on disk.
3183 HRESULT SaveProjectToLocation([in] LPCOLESTR pszProjectFilename);
3186 enum __VSCREATENEWPROJVIADLGEXFLAGS
3188 VNPVDE_ALWAYSNEWSOLUTION = 0x00000001, // new solution is always created (no Add To Solution and Close Solution radio buttons)
3189 VNPVDE_OVERRIDEBROWSEBUTTON = 0x00000002, // browse button functionality is overridden (requires IVsBrowseProjectLocation interface)
3190 VNPVDE_ALWAYSADDTOSOLUTION = 0x00000004, // project is always added to solution (Add New Project dialog is used)
3191 VNPVDE_ADDNESTEDTOSELECTION = 0x00000008, // project is added nested to currently selected project if supported
3192 VNPVDE_USENEWWEBSITEDLG = 0x00000010, // Uses the New WebSite flavor of the dialog
3194 typedef DWORD VSCREATENEWPROJVIADLGEXFLAGS;
3196 //---------------------------------------------------------------------------
3197 // IVsBrowseProjectLocation
3198 //---------------------------------------------------------------------------
3200 uuid(uuid_IVsBrowseProjectLocation),
3201 version(1.0),
3202 pointer_default(unique)
3204 interface IVsBrowseProjectLocation : IUnknown
3206 // This method will bring up a browse dialog for finding the location of a new project.
3207 HRESULT BrowseProjectLocation([in] LPCOLESTR pszStartDirectory, [out] BSTR *pbstrProjectLocation);
3210 enum __VSSAVEDEFERREDSAVEFLAGS
3212 VSDSF_HIDEADDTOSOURCECONTROL = 0x00000001, // hide the "Add Solution to Source Control" checkbox on the Save dialog
3214 typedef DWORD VSSAVEDEFERREDSAVEFLAGS;
3216 //---------------------------------------------------------------------------
3217 // IVsSolution3
3218 //---------------------------------------------------------------------------
3220 uuid(uuid_IVsSolution3),
3221 version(1.0),
3222 pointer_default(unique)
3224 interface IVsSolution3 : IUnknown
3226 // This method will bring up the New Project dialog with the specified title and restricted to the
3227 // specified template directory, as well as expanding and selecting the specified tree and list nodes.
3228 HRESULT CreateNewProjectViaDlgEx([in] LPCOLESTR pszDlgTitle,
3229 [in] LPCOLESTR pszTemplateDir,
3230 [in] LPCOLESTR pszExpand,
3231 [in] LPCOLESTR pszSelect,
3232 [in] LPCOLESTR pszHelpTopic,
3233 [in] VSCREATENEWPROJVIADLGEXFLAGS cnpvdeFlags,
3234 [in] IVsBrowseProjectLocation *pBrowse);
3235 // This method will generate a unique UI name for the project whose hierarchy is passed in.
3236 // This is necessary in the case where there are two projects in the solution with the same
3237 // name, but which reside in different solution folders. The solution will generate a name
3238 // by prepending as many of the parent folder names as necessary to make the name unique.
3239 HRESULT GetUniqueUINameOfProject([in] IVsHierarchy *pHierarchy, [out] BSTR *pbstrUniqueName);
3240 // This method will check the solution to see if the solution is in the deferred-save state,
3241 // and if it is, it will prompt with a MessageBox-like dialog for confirmation then a Save
3242 // dialog will appear. If fCloseSolution is set to TRUE, the solution will be closed after
3243 // it is saved; also the user will be given the option of discarding his changes. If
3244 // fCloseSolution is set to FALSE, the solution will not be closed after it is saved.
3245 // The two string are Message and Title: this is just like MessageBox. The buttons on the
3246 // 'messagebox' are Save, Discard and Cancel. If fCloseSolution is FALSE, Discard will not
3247 // appear. The default button is always Save.
3248 HRESULT CheckForAndSaveDeferredSaveSolution([in] BOOL fCloseSolution, [in] LPCOLESTR pszMessage, [in] LPCOLESTR pszTitle, [in] VSSAVEDEFERREDSAVEFLAGS grfFlags);
3249 // This method will tell the solution to update the internal filenames it is keeping for a project. This is
3250 // used, for example, when a web project is upgraded so the solution knows the correct path to the upgraded web.
3251 HRESULT UpdateProjectFileLocationForUpgrade([in] LPCOLESTR pszCurrentLocation, [in] LPCOLESTR pszUpgradedLocation);
3255 //---------------------------------------------------------------------------
3256 // IVsConfigurationManagerDlg
3257 //---------------------------------------------------------------------------
3258 // Used to display the configuration manager dialog.
3260 uuid(uuid_IVsConfigurationManagerDlg),
3261 version(1.0),
3262 pointer_default(unique)
3264 interface IVsConfigurationManagerDlg : IUnknown
3266 // Show the configuration manager dialog. The dialog is responsible for choosing an appropriate parent window.
3267 HRESULT ShowConfigurationManagerDlg();
3270 // declare the service type for interop
3271 [uuid(uuid_SVsConfigurationManagerDlg)]
3272 interface SVsConfigurationManagerDlg : IUnknown {}
3274 cpp_quote("#define SID_SVsConfigurationManagerDlg IID_SVsConfigurationManagerDlg")
3276 //---------------------------------------------------------------------------
3277 // IVsUpdateSolutionEvents3
3278 //---------------------------------------------------------------------------
3279 // Events informing about active solution configuration changes
3281 uuid(uuid_IVsUpdateSolutionEvents3),
3282 version(1.0),
3283 pointer_default(unique)
3285 interface IVsUpdateSolutionEvents3 : IUnknown
3287 //fired before the active solution config is changed (pOldActiveSlnCfg can be NULL).
3288 HRESULT OnBeforeActiveSolutionCfgChange([in] IVsCfg *pOldActiveSlnCfg, [in] IVsCfg *pNewActiveSlnCfg);
3290 //fired after the active solution config is changed (pOldActiveSlnCfg can be NULL).
3291 HRESULT OnAfterActiveSolutionCfgChange([in] IVsCfg *pOldActiveSlnCfg, [in] IVsCfg *pNewActiveSlnCfg);
3294 // Flag passed into IVsSolutionBuildManager3::AreProjectsUpToDate() as well as
3295 // IVsSolutionBuildManager::QueryStartUpToDateCheck() and IVsSolutionBuildManager::
3296 // StartUpToDateCheck() to indicate that the operation is done for purposes of
3297 // DTEE (design time expression evaluation, as called from the debugger's immediate
3298 // or watch windows) build as opposed to regular build.
3299 typedef enum _vsuptodatecheckflags
3301 VSUTDCF_DTEEONLY = 0x00000001
3302 } VsUpToDateCheckFlags;
3304 //---------------------------------------------------------------------------
3305 // IVsSolutionBuildManager3
3306 //---------------------------------------------------------------------------
3307 // Provides access to IVsUpdateSolutionEvents3 events.
3309 uuid(uuid_IVsSolutionBuildManager3),
3310 version(1.0),
3311 pointer_default(unique)
3313 interface IVsSolutionBuildManager3 : IUnknown
3315 HRESULT AdviseUpdateSolutionEvents3([in] IVsUpdateSolutionEvents3 *pIVsUpdateSolutionEvents3, [out] VSCOOKIE *pdwCookie);
3316 HRESULT UnadviseUpdateSolutionEvents3([in] VSCOOKIE dwCookie);
3318 // S_OK if all projects are up to date, or S_FALSE if one or more projects are not
3319 HRESULT AreProjectsUpToDate(DWORD dwOptions);
3321 // Returns S_OK if the currently selected hierarchy is the same as when we started the last
3322 // DTEE session. Returns S_FALSE if the hierarchy has changed.
3323 HRESULT HasHierarchyChangedSinceLastDTEE();
3325 // Check what operation the SolutionBuildManager is performing. BuildManager operations are
3326 // identified by values taken from the SBF_OPERATION_MASK portion of the
3327 // VSSOLNBUILDUPDATEFLAGS enum. This can be used by a implementer of IVsBuildableProjectCfg
3328 // to know whether a Build vs. Build/Deploy vs. Build/Deploy/LaunchDebug vs. Build/Deploy/Launch
3329 // (no debug) operation is being performed. In addition if the operation is performed on the selected
3330 // project(s) then SBF_OPERATION_SELECTION is specified; otherwise the operation is being
3331 // performed on the entire Solution.
3332 HRESULT QueryBuildManagerBusyEx([out] DWORD *pdwBuildManagerOperation /* VSSOLNBUILDUPDATEFLAGS */);
3336 //---------------------------------------------------------------------------
3337 // IVsSingleFileGeneratorFactory
3338 //---------------------------------------------------------------------------
3340 uuid(uuid_IVsSingleFileGeneratorFactory)
3342 interface IVsSingleFileGeneratorFactory : IUnknown
3344 // Get the default generator prog-id given a filename
3345 HRESULT GetDefaultGenerator([in] LPCOLESTR wszFilename,
3346 [out, retval] BSTR* pbstrGenProgID);
3348 // Instantiation
3349 HRESULT CreateGeneratorInstance([in] LPCOLESTR wszProgId,
3350 [out] BOOL* pbGeneratesDesignTimeSource,
3351 [out] BOOL* pbGeneratesSharedDesignTimeSource,
3352 [out] BOOL* pbUseTempPEFlag,
3353 [out] IVsSingleFileGenerator** ppGenerate);
3355 HRESULT GetGeneratorInformation([in] LPCWSTR wszProgID,
3356 [out] BOOL* pbGeneratesDesignTimeSource,
3357 [out] BOOL* pbGeneratesSharedDesignTimeSource,
3358 [out] BOOL* pbUseTempPEFlag,
3359 [out] GUID* pguidGenerator);
3364 //---------------------------------------------------------------------------
3365 // IVsStartPageDownload
3366 //---------------------------------------------------------------------------
3367 // Implemented by the Start Page Download service. Allows the Start Page client to
3368 // kick a downloading service for the Start Page on a background thread
3369 // This should only be used internally by the Start Page implementation!
3371 uuid(uuid_IVsStartPageDownload),
3372 version(1.0),
3373 pointer_default(unique)
3375 interface IVsStartPageDownload : IUnknown {
3376 HRESULT StartDownloadService(void);
3377 HRESULT StopDownloadService(void);
3381 uuid(uuid_SVsStartPageDownload)
3383 interface SVsStartPageDownload : IUnknown {
3385 cpp_quote("#define SID_SVsStartPageDownload IID_SVsStartPageDownload")
3389 // MEINIT dwFlag values
3390 enum __VSMEINIT2
3392 /********************************************** defined in vsshell.idl
3393 MD_ACCELSUPPORT = 0x00000001, // first value should be one,
3394 MD_VISIBLESUPPORT = 0x00000002, // following values should use
3395 MD_BOLDSUPPORT = 0x00000004, // consecutive powers of two
3396 MD_CONTEXTMENU = 0x00000008, //
3397 MD_RADIOCHECKSUPPORT = 0x00000010, //
3398 MD_COMMANDIDSUPPORT = 0x00000020, // << Means NO Control names! Like VC
3399 MD_VIEWCODESUPPORT = 0x00000040, // Supports the ViewCode cmd
3400 MD_NOPROPERTIESSUPPORT = 0x00000080, // Does not support the Properties cmd
3401 MD_TEXTLIMIT = 0x00000100, // Use the MEINIT dwTextLimit field
3402 MD_TOPLEVELSEPSUPPORT = 0x00000200, // Allow separators on the top-level menu
3403 MD_EDITIDSNOTEDITNAMES = 0x00000400, // Menu item "Edit Names" is displayed as "Edit ID's"
3404 MD_NAMELIMIT = 0x00000800, // Use the MEINIT dwNameLimit field
3405 MD_NOUNDOSUPPORT = 0x00001000, // Do not store undo information, even if passed an undo manager
3406 MD_BOTTOMDOCKED = 0x00002000, // this menu should dock on the bottom and popups should cascade upward.
3407 MD_BREAKSUPPORT = 0x00004000, // Supports the break and barbreak flags on menu items
3408 MD_RIGHTJUSTIFYSUPPORT = 0x00008000 // Supports the right justification of menu bar items (moves all to the right of the bar)
3409 **********************************************/
3410 MD_ITEMICONSUPPORT = 0x00010000
3412 typedef DWORD VSMEINIT2;
3414 enum __MENUEDITOR_TRANSACTION
3416 MENUEDITOR_TRANSACTION_DISCARD=-1, // discard the current transaction
3417 MENUEDITOR_TRANSACTION_ALL, // force a reset
3418 MENUEDITOR_TRANSACTION_CUT,
3419 MENUEDITOR_TRANSACTION_PASTE,
3420 MENUEDITOR_TRANSACTION_COPY,
3421 MENUEDITOR_TRANSACTION_DELETE
3423 typedef DWORD MENUEDITOR_TRANSACTION;
3425 //---------------------------------------------------------------------------
3426 // interface IVsMenuEditorTransactionEvents
3428 // this interface is designed to assist the form designer in
3429 // processing their own undo redo stack
3430 //---------------------------------------------------------------------------
3432 uuid(uuid_IVsMenuEditorTransactionEvents),
3433 version(1.0),
3434 pointer_default(unique)
3437 interface IVsMenuEditorTransactionEvents : IUnknown
3439 HRESULT BeginTransaction([in] MENUEDITOR_TRANSACTION trans);
3440 HRESULT EndTransaction([in] MENUEDITOR_TRANSACTION trans);
3444 //---------------------------------------------------------------------------
3445 // IVsThreadedWaitDialog
3446 //---------------------------------------------------------------------------
3447 // Implemented by the IDE.
3448 // Interface allows a modal dialog to be displayed on a background thread to
3449 // allow the IDE to appear responsive even when the foreground thread is busy
3450 // with an extended operationl
3452 // Available via QueryService(SVsThreadedWaitDialog)
3455 // Flags passed to StartWaitDialog
3456 enum __VSTWDFLAGS
3458 VSTWDFLAGS_NOFLAGS = 0x00000000,
3459 VSTWDFLAGS_CANCELLABLE = 0x00000001, // should we show the Cancel button?
3460 VSTWDFLAGS_TOPMOST = 0x00000002 // should we force the window above all others?
3462 typedef DWORD VSTWDFLAGS;
3465 uuid(uuid_IVsThreadedWaitDialog),
3466 version(1.0),
3467 pointer_default(unique)
3469 interface IVsThreadedWaitDialog : IUnknown
3471 HRESULT StartWaitDialog(
3472 [in] BSTR bstrWaitCaption,
3473 [in] BSTR bstrWaitMessage,
3474 [in] BSTR bstrIfTruncateAppend, //can be NULL
3475 [in] VSTWDFLAGS dwFlags,
3476 [in] VARIANT varStatusBmpAnim, //optional: should be a VT_INT_PTR containing a valid BMP, or VT_NULL
3477 [in] BSTR bstrStatusBarText); //can be NULL
3479 HRESULT EndWaitDialog(BOOL *pfCancelled);
3481 HRESULT GiveTimeSlice(
3482 [in] BSTR bstrUpdatedWaitMessage, //can be NULL
3483 [in] BSTR bstrIfTruncateAppend, //can be NULL, should be a short string e.g. L"..." or L"...\""
3484 [in] BOOL fDisableCancel, //if the operation becomes uncancel-able, disable the button
3485 [out] BOOL *pfCancelled);
3488 // declare the service type for interop
3489 [uuid(uuid_SVsThreadedWaitDialog)]
3490 interface SVsThreadedWaitDialog : IUnknown {}
3492 cpp_quote("#define SID_SVsThreadedWaitDialog IID_SVsThreadedWaitDialog")
3495 //---------------------------------------------------------------------------
3496 // IVsProfilesManagerUI
3497 //---------------------------------------------------------------------------
3498 // Implemented by the IDE.
3499 // This is an internal interface used to allow communication between native and
3500 // managed code in the IDE.
3502 // Available via QueryService(SVsProfilesManagerUI)
3505 uuid(uuid_IVsProfilesManagerUI),
3506 version(1.0),
3507 pointer_default(unique)
3509 interface IVsProfilesManagerUI : IUnknown
3511 HRESULT ShowProfilesUI([in] IVsProfileDataManager *pDataManager);
3514 // declare the service type for interop
3515 [uuid(uuid_SVsProfilesManagerUI)]
3516 interface SVsProfilesManagerUI : IUnknown {}
3518 cpp_quote("#define SID_SVsProfilesManagerUI IID_SVsProfilesManagerUI")
3521 //---------------------------------------------------------------------------
3522 // IVsXMLMemberDataCallBack
3523 //---------------------------------------------------------------------------
3525 enum __XMLMEMBERDATA_TAGTYPE
3527 XMLMEMBERDATA_TAGTYPE_CREF
3529 typedef DWORD XMLMEMBERDATA_TAGTYPE;
3532 uuid(uuid_IVsXMLMemberDataCallBack)
3534 interface IVsXMLMemberDataCallBack : IUnknown
3536 HRESULT GetDisplayNameForTag(
3537 [in] XMLMEMBERDATA_TAGTYPE nTagType,
3538 [in] LPCOLESTR wszBufferIn,
3539 [out] BSTR* pbstrBufferOut);
3542 //---------------------------------------------------------------------------
3543 // IVsXMLMemberDataRegisterCallBack
3544 //---------------------------------------------------------------------------
3546 uuid(uuid_IVsXMLMemberDataRegisterCallBack)
3548 interface IVsXMLMemberDataRegisterCallBack : IUnknown
3550 HRESULT RegisterCallBack([in] IVsXMLMemberDataCallBack* pIVsXMLMemberDataCallBack);
3551 HRESULT UnregisterCallBack();
3555 //---------------------------------------------------------------------------
3556 // IVsXMLMemberData3
3557 //---------------------------------------------------------------------------
3558 // This is just a handy wrapper over the XML for a given member. It extracts
3559 // text from the XML (honoring tags like <see>, <paramref>, etc.) for things
3560 // of interest. If the tag for whatever is asked for doesn't exist, the
3561 // text returned is empty and the function returns S_FALSE.
3562 //---------------------------------------------------------------------------
3564 enum __XMLMEMBERDATA_OPTIONS
3566 XMLMEMBERDATA_OPTIONS_NONE = 0x0000, // No options set.
3567 XMLMEMBERDATA_OPTIONS_PRESERVE_NEWLINES = 0x0001 // Keep newlines.
3569 typedef DWORD XMLMEMBERDATA_OPTIONS;
3572 uuid(uuid_IVsXMLMemberData3)
3574 interface IVsXMLMemberData3 : IUnknown
3576 HRESULT SetOptions([in] XMLMEMBERDATA_OPTIONS options);
3577 HRESULT GetSummaryText ([out] BSTR *pbstrSummary);
3578 HRESULT GetParamCount ([out] long *piParams);
3579 HRESULT GetParamTextAt ([in] long iParam, [out] BSTR *pbstrName, [out] BSTR *pbstrText);
3580 HRESULT GetReturnsText ([out] BSTR *pbstrReturns);
3581 HRESULT GetRemarksText ([out] BSTR *pbstrRemarks);
3582 HRESULT GetExceptionCount ([out] long *piExceptions);
3583 HRESULT GetExceptionTextAt ([in] long iException, [out] BSTR *pbstrType, [out] BSTR *pbstrText);
3584 HRESULT GetFilterPriority ([out] long *piFilterPriority);
3585 HRESULT GetCompletionListText ([out] BSTR *pbstrCompletionList);
3586 HRESULT GetCompletionListTextAt ([in] long iParam, [out] BSTR *pbstrCompletionList);
3587 HRESULT GetPermissionSet ([out] BSTR *pbstrPermissionSetXML);
3588 HRESULT GetTypeParamCount ([out] long *piTypeParams);
3589 HRESULT GetTypeParamTextAt ([in] long iTypeParam, [out] BSTR *pbstrName, [out] BSTR *pbstrText);
3593 //------------------------------------------------------------------------------
3594 // Object Browser, Class View and Find Symbol related
3595 //------------------------------------------------------------------------------
3597 // Library Manager List Types (Symbol Provider List Types)
3598 enum _LIB_LISTTYPE2
3600 LLT_NIL = 0x000000,
3602 //LLT_HIERARCHY = 0x000001, // Taken from LIB_LISTTYPE in vsshell.idl
3603 //LLT_NAMESPACES = 0x000002, // Taken from LIB_LISTTYPE in vsshell.idl
3604 //LLT_CLASSES = 0x000004, // Taken from LIB_LISTTYPE in vsshell.idl
3605 //LLT_MEMBERS = 0x000008, // Taken from LIB_LISTTYPE in vsshell.idl
3606 //LLT_PHYSICALCONTAINERS = 0x000010, // Taken from LIB_LISTTYPE in vsshell.idl
3607 //LLT_PACKAGE = 0x000010, // Old name for LLT_PHYSICALCONTAINERS (Taken from LIB_LISTTYPE in vsshell.idl)
3609 LLT_MEMBERHIERARCHY = 0x000020, // Member hierarchy list type (Object Browser places lists of this type in the member pane)
3611 //LLT_DEFEREXPANSION = 0x100000, // Taken from LIB_LISTTYPE in vsshell.idl
3613 typedef DWORD LIB_LISTTYPE2;
3614 typedef LIB_LISTTYPE2 LIBCAT_LISTTYPE2;
3615 cpp_quote("#define COUNT_LIBCAT_LISTTYPE 6")
3617 // Library flags returned from IVsLibrary::GetLibFlags()
3618 enum _LIB_FLAGS2
3620 //LF_PROJECT = 0x0001, // Taken from LIB_FLAGS in vsshell.idl
3621 //LF_GLOBAL = 0x0002, // Taken from LIB_FLAGS in vsshell.idl
3622 //LF_EXPANDABLE = 0x0004, // Taken from LIB_FLAGS in vsshell.idl
3623 //LF_HIDEINLIBPICKER = 0x0008, // Taken from LIB_FLAGS in vsshell.idl
3625 LF_SUPPORTSPROJECTREFERENCES = 0x0010, // Supports exposing project references
3626 LF_SUPPORTSFILTERING = 0x0020, // Supports filtering (VSOBSO_FILTERING flag in VSOBSEARCHCRITERIA2)
3627 LF_SUPPORTSFILTERINGWITHEXPANSION = 0x0040, // Library supports search with expansion (VSOBSO_EXPANDCHILDREN flag in VSOBSEARCHCRITERIA2), implies LF_SUPPORTSFILTERING
3628 LF_SUPPORTSCALLBROWSER = 0x0080, // Supports Call Browser Calls To or Calls From
3629 LF_SUPPORTSLISTREFERENCES = 0x0100, // Can find symbol usages and present results as a flat list (VSOBSO_LISTREFERENCES flag in VSOBSEARCHCRITERIA2)
3630 LF_SUPPORTSALWAYSUPDATE = 0x0400, // Supports always update (even for find symbol results)
3631 LF_SUPPORTSBASETYPES = 0x0800, // Supports exposing base types
3632 LF_SUPPORTSDERIVEDTYPES = 0x1000, // Supports exposing derived types
3633 LF_SUPPORTSINHERITEDMEMBERS = 0x2000, // Supports exposing inherited members
3634 LF_SUPPORTSPRIVATEMEMBERS = 0x4000, // Supports exposing private members
3635 LF_SUPPORTSCLASSDESIGNER = 0x8000, // Supports class designer
3636 LF_SHOWFULLNAMESINFINDSYMBOLRESULTS = 0x10000, // Requests to show fully qualified names in find symbol results.
3638 typedef DWORD LIB_FLAGS2;
3640 // List flags returned from IVsObjectList::GetCapabilities()
3641 enum _LIB_LISTCAPABILITIES2
3643 //LLC_NONE = 0x0000, // Taken from LIB_LISTCAPABILITIES in vsshell.idl
3644 //LLC_HASBROWSEOBJ = 0x0001, // Taken from LIB_LISTCAPABILITIES in vsshell.idl
3645 //LLC_HASDESCPANE = 0x0002, // Taken from LIB_LISTCAPABILITIES in vsshell.idl
3646 //LLC_HASSOURCECONTEXT = 0x0004, // Taken from LIB_LISTCAPABILITIES in vsshell.idl
3647 //LLC_HASCOMMANDS = 0x0008, // Taken from LIB_LISTCAPABILITIES in vsshell.idl
3648 //LLC_ALLOWDRAGDROP = 0x0010, // Taken from LIB_LISTCAPABILITIES in vsshell.idl
3649 //LLC_ALLOWRENAME = 0x0020, // Taken from LIB_LISTCAPABILITIES in vsshell.idl
3650 //LLC_ALLOWDELETE = 0x0040, // Taken from LIB_LISTCAPABILITIES in vsshell.idl
3651 //LLC_ALLOWSCCOPS = 0x0080, // Taken from LIB_LISTCAPABILITIES in vsshell.idl
3653 LLC_ALLOWELEMENTSEARCH = 0x0100, // IVsObjectList2::GetList2() allows search starting at given element
3655 typedef DWORD LIB_LISTCAPABILITIES2;
3657 // Search option flags in VSOBSEARCHCRITERIA2 (passed to IVsLibrary2::GetList2() and IVsObjectList2::GetList2())
3658 enum _VSOBSEARCHOPTIONS2
3660 //VSOBSO_NONE = 0x0000, // Taken from VSOBSEARCHOPTIONS in vsshell.idl
3661 //VSOBSO_CASESENSITIVE = 0x0001, // Taken from VSOBSEARCHOPTIONS in vsshell.idl
3662 //VSOBSO_LOOKINREFS = 0x0002, // Taken from VSOBSEARCHOPTIONS in vsshell.idl
3664 VSOBSO_FILTERING = 0x0100, // filtering in CV and OB
3665 VSOBSO_EXPANDCHILDREN = 0x0200, // Comes together with VSOBSO_FILTERING if a library supports LF_SUPPORTSFILTERINGWITHEXPANSION
3667 VSOBSO_CALLSTO = 0x0400, // Obtain Calls To symbol specified in VSOBSEARCHCRITERIA2
3668 VSOBSO_CALLSFROM = 0x0800, // Obtain Calls From symbol specified in VSOBSEARCHCRITERIA2
3670 VSOBSO_LISTREFERENCES = 0x1000 // search results should contain references (usages) as a top level flat list (used for Find All References)
3673 typedef DWORD VSOBSEARCHOPTIONS2;
3675 interface IVsNavInfo;
3677 // Search options struct (passed to IVsLibrary2::GetList2() and IVsObjectList2::GetList2())
3678 typedef struct _VSOBSEARCHCRITERIA2
3680 LPCOLESTR szName;
3681 VSOBSEARCHTYPE eSrchType;
3682 VSOBSEARCHOPTIONS2 grfOptions;
3683 DWORD dwCustom;
3684 IVsNavInfo* pIVsNavInfo;
3685 } VSOBSEARCHCRITERIA2;
3687 // NavigationInfo node struct (passed to IVsObjectList2::GetNavigationInfo2() and IVsObjectList2::LocateNavigationInfo2())
3688 typedef struct _VSOBNAVNAMEINFONODE2
3690 WCHAR *pszName;
3691 LIB_LISTTYPE2 lltName;
3692 struct _VSOBNAVNAMEINFONODE2 *pNext;
3693 } VSOBNAVNAMEINFONODE2;
3695 // NavigationInfo struct (passed to IVsObjectList2::LocateNavigationInfo2())
3696 typedef struct _VSOBNAVIGATIONINFO3
3698 GUID *pguidLib;
3699 WCHAR *pszLibName;
3700 VSOBNAVNAMEINFONODE2 *pName;
3701 DWORD dwCustom;
3702 } VSOBNAVIGATIONINFO3;
3704 // Library Manager List Element Categories (Symbol Provider List Element Attribute Domains)
3705 enum _LIB_CATEGORY2
3707 LC_NIL = 0,
3709 //LC_MEMBERTYPE = 1, // Taken from LIB_CATEGORY in vsshell.idl
3710 //LC_MEMBERACCESS = 2, // Taken from LIB_CATEGORY in vsshell.idl
3711 //LC_CLASSTYPE = 3, // Taken from LIB_CATEGORY in vsshell.idl
3712 //LC_CLASSACCESS = 4, // Taken from LIB_CATEGORY in vsshell.idl
3713 //LC_ACTIVEPROJECT = 5, // Taken from LIB_CATEGORY in vsshell.idl
3714 //LC_LISTTYPE = 6, // Taken from LIB_CATEGORY in vsshell.idl
3715 //LC_VISIBILITY = 7, // Taken from LIB_CATEGORY in vsshell.idl
3716 //LC_MODIFIER = 8, // Taken from LIB_CATEGORY in vsshell.idl
3717 //LC_NODETYPE = 9, // Taken from LIB_CATEGORY in vsshell.idl
3719 LC_PHYSICALCONTAINERTYPE = 10, // Physical Container element type
3720 LC_HIERARCHYTYPE = 11, // Hierarchy element type
3721 LC_MEMBERINHERITANCE = 12, // Member inheritance
3722 LC_SEARCHMATCHTYPE = 13, // search match type (OM supports it, libraries are not required to implement)
3723 LC_Last2 = LC_SEARCHMATCHTYPE
3725 typedef LONG LIB_CATEGORY2;
3726 cpp_quote("#define COUNT_LIB_CATEGORY2 13")
3728 // Class (Type) Type
3729 enum _LIBCAT_CLASSTYPE2
3731 //LCCT_NSPC = 0x000001, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3732 //LCCT_CLASS = 0x000002, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3733 //LCCT_INTERFACE = 0x000004, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3734 //LCCT_STRUCT = 0x000008, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3735 //LCCT_UNION = 0x000010, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3736 //LCCT_ENUM = 0x000020, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3737 //LCCT_TYPEDEF = 0x000040, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3738 //LCCT_MODULE = 0x000080, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3739 //LCCT_INTRINSIC = 0x000100, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3740 //LCCT_DELEGATE = 0x000200, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3741 //LCCT_EXCEPTION = 0x000400, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3742 //LCCT_MAP = 0x000800, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3743 //LCCT_GLOBAL = 0x001000, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3744 //LCCT_ERROR = 0x002000, // Taken from LIBCAT_CLASSTYPE in vsshell.idl
3746 LCCT_TEMPLATE = 0x004000, // Template class
3747 LCCT_GENERIC = 0x008000, // Generic class
3748 LCCT_ITERATOR = 0x010000 // Iterator class
3750 typedef DWORD LIBCAT_CLASSTYPE2;
3751 cpp_quote("#define COUNT_LIBCAT_CLASSTYPE2 17")
3753 // Member Type
3754 enum _LIBCAT_MEMBERTYPE2
3756 //LCMT_METHOD = 0x000001, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3757 //LCMT_FUNCTION = 0x000002, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3758 //LCMT_OPERATOR = 0x000004, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3759 //LCMT_PROPERTY = 0x000008, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3760 //LCMT_FIELD = 0x000010, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3761 //LCMT_VARIABLE = 0x000020, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3762 //LCMT_EVENT = 0x000040, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3763 //LCMT_CONSTANT = 0x000080, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3764 //LCMT_ENUMITEM = 0x000100, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3765 //LCMT_TYPEDEF = 0x000200, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3766 //LCMT_MAPITEM = 0x000400, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3767 //LCMT_DECLARATION = 0x000800, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3768 //LCMT_MACRO = 0x001000, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3769 //LCMT_ERROR = 0x002000, // Taken from LIBCAT_MEMBERTYPE in vsshell.idl
3771 LCMT_TEMPLATE = 0x004000, // Template method
3772 LCMT_GENERIC = 0x008000, // Generic method
3774 typedef DWORD LIBCAT_MEMBERTYPE2;
3775 cpp_quote("#define COUNT_LIBCAT_MEMBERTYPE2 16")
3777 // Physical Container Type
3778 enum _LIBCAT_PHYSICALCONTAINERTYPE
3780 LCPT_GLOBAL = 0x0001, // Global physical container type
3781 LCPT_PROJECTREFERENCE = 0x0002, // Project Reference physical container type
3782 LCPT_PROJECT = 0x0004 // Project physical container type
3784 typedef DWORD LIBCAT_PHYSICALCONTAINERTYPE;
3785 cpp_quote("#define COUNT_LIBCAT_PHYSICALCONTAINERTYPE 3")
3787 // Hierarchy Element Type
3788 enum _LIBCAT_HIERARCHYTYPE
3790 LCHT_UNKNOWN = 0x0001, // Unknown (Generic) hierarchy element type
3791 LCHT_FOLDER = 0x0002, // Folder hierarchy element type
3792 LCHT_BASESANDINTERFACES = 0x0004, // "Bases and Interfaces" hierarchy element type
3793 LCHT_PROJECTREFERENCES = 0x0008, // "Project References" hierarchy element type
3794 LCHT_DERIVEDTYPES = 0x0010, // "Derived Types" hierarchy element type
3795 LCHT_INFO = 0x0020 // "Info" hierarchy element type
3797 typedef DWORD LIBCAT_HIERARCHYTYPE;
3798 cpp_quote("#define COUNT_LIBCAT_HIERARCHYTYPE 5")
3800 // Member Inheritance
3801 enum _LIBCAT_MEMBERINHERITANCE
3803 LCMI_IMMEDIATE = 0x0001, // Immediate member of class (type)
3804 LCMI_OVERRIDABLE = 0x0002, // Overridable (virtual), but not overridden, member of parent class (type)
3805 LCMI_OVERRIDEREQUIRED = 0x0004, // Override required (pure virtual), but not overridden, member of parent class (type)
3806 LCMI_OVERRIDDEN = 0x0008, // Overridden (virtual or pure virtual) member of parent class (type)
3807 LCMI_NOTOVERRIDABLE = 0x0010, // Not overridable member of parent class (type)
3808 LCMI_INHERITED = 0x0020 // Inherited member of class (type)
3810 typedef DWORD LIBCAT_MEMBERINHERITANCE;
3811 cpp_quote("#define COUNT_LIBCAT_MEMBERINHERITANCE 6")
3813 // Member Inheritance
3814 enum _LIBCAT_SEARCHMATCHTYPE
3816 LSMT_WHOLEWORD = 0x0001,
3817 LSMT_WHOLEWORD_NO_CASE = 0x0002,
3818 LSMT_LEAF_WHOLEWORD = 0x0004,
3819 LSMT_LEAF_WHOLEWORD_NO_CASE = 0x0008,
3820 LSMT_PART_WHOLEWORD = 0x0010,
3821 LSMT_PART_WHOLEWORD_NO_CASE = 0x0020,
3822 LSMT_PRESTRING = 0x0040,
3823 LSMT_PRESTRING_NO_CASE = 0x0080,
3824 LSMT_LEAF_PRESTRING = 0x0100,
3825 LSMT_LEAF_PRESTRING_NO_CASE = 0x0200,
3826 LSMT_PART_PRESTRING = 0x0400,
3827 LSMT_PART_PRESTRING_NO_CASE = 0x0800,
3828 LSMT_SUBSTRING = 0x1000,
3829 LSMT_SUBSTRING_NO_CASE = 0x2000,
3830 LSMT_NO_MATCH = 0x4000
3833 typedef DWORD LIBCAT_SEARCHMATCHTYPE;
3834 cpp_quote("#define COUNT_LIBCAT_SEARCHMATCHTYPE 15")
3836 // IVsObjectList2 List Element Properties
3837 enum _VSOBJLISTELEMPROPID
3839 VSOBJLISTELEMPROPID_FIRST = 1,
3840 VSOBJLISTELEMPROPID_HELPKEYWORD = 1, // VT_BSTR
3841 VSOBJLISTELEMPROPID_COMPONENTPATH = 2, // VT_BSTR
3842 VSOBJLISTELEMPROPID_CODEDEFVIEWCONTEXT = 3, // VT_UNKNOWN
3843 VSOBJLISTELEMPROPID_SUPPORTSCALLSTO = 4, // VT_BOOLEAN
3844 VSOBJLISTELEMPROPID_SUPPORTSCALLSFROM = 5, // VT_BOOLEAN
3845 VSOBJLISTELEMPROPID_FULLNAME = 6, // VT_BSTR
3846 VSOBJLISTELEMPROPID_LEAFNAME = 7, // VT_BSTR
3847 VSOBJLISTELEMPROPID_NAME_FOR_RENAME = 8, // VT_BSTR
3848 VSOBJLISTELEMPROPID_LAST = 8,
3850 typedef LONG VSOBJLISTELEMPROPID;
3852 // NavInfo related interfaces
3854 // IVsNavInfoNode
3856 uuid(uuid_IVsNavInfoNode),
3857 version(1.0),
3858 pointer_default(unique)
3861 interface IVsNavInfoNode : IUnknown
3863 HRESULT get_Type([out] DWORD * pllt); // LIB_LISTTYPE2 + registered types when we have them (not in VS 2005)
3864 HRESULT get_Name([out] BSTR * pbstrName); //Name should be unique for the list, might be different from the display text, if object was renamed get_Name should return its new name
3868 // IVsEnumNavInfoNodes
3870 uuid(uuid_IVsEnumNavInfoNodes),
3871 version(1.0),
3872 pointer_default(unique)
3874 interface IVsEnumNavInfoNodes : IUnknown
3876 HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IVsNavInfoNode **rgelt, [out] ULONG *pceltFetched);
3877 HRESULT Skip([in] ULONG celt);
3878 HRESULT Reset(void);
3879 HRESULT Clone([out] IVsEnumNavInfoNodes **ppenum);
3883 //IVsNavInfo
3886 uuid(uuid_IVsNavInfo),
3887 version(1.0),
3888 pointer_default(unique)
3890 interface IVsNavInfo : IUnknown
3892 HRESULT GetLibGuid([out] GUID * pGuid);
3893 HRESULT GetSymbolType([out] DWORD * pdwType); // LIB_LISTTYPE2 + registered types when we have them (not in VS 2005)
3894 HRESULT EnumPresentationNodes([in] DWORD dwFlags, [out] IVsEnumNavInfoNodes ** ppEnum); // flags can be those for CV or OB
3895 HRESULT EnumCanonicalNodes([out] IVsEnumNavInfoNodes ** ppEnum);
3898 // SymbolDescriptionNode
3899 typedef struct tagSymbolDescriptionNode
3901 DWORD dwType; // LIB_LISTTYPE2
3902 LPCOLESTR pszName;
3903 } SYMBOL_DESCRIPTION_NODE;
3906 // Replacement for IVsObjectBrowserDescription2 interface
3908 uuid(uuid_IVsObjectBrowserDescription3),
3909 version(1.0),
3910 pointer_default(unique)
3912 interface IVsObjectBrowserDescription3 : IUnknown
3914 HRESULT AddDescriptionText3([in] LPCWSTR pText, [in] VSOBDESCRIPTIONSECTION obdSect, [in] IVsNavInfo *pHyperJump);
3915 HRESULT ClearDescriptionText();
3918 // IVsObjectList2 interface
3920 // This interface is a replacement for the IVsObjectList interface.
3922 // A list which implements this interface must also implement IVsLiteTreeList, the
3923 // interface from which this interface effectively inherits.
3925 // The GetText(), GetTipText() and GetSourceContext() methods return strings which are owned
3926 // by the underlying list. The underlying list is expected to keep a returned string "alive"
3927 // until the next request for a string, or until the list is released. Underlying lists which
3928 // would prefer to return strings with ownership should implement IVsSimpleObjectList2 instead
3929 // of IVsObjectList2 (this interface). IVsSimpleObjectList2 has the GetTextWithOwnership(),
3930 // GetTipTextWithOwnership() and GetSourceContextWithOwnership() methods which return strings
3931 // with ownership.
3933 // It is recommended that managed list implementations implement IVsSimpleObjectList2 instead
3934 // of IVsObjectList2 (this interface), as managed GetText(), GetTipText() and GetSourceContext()
3935 // implementations will leak CoTaskMemAlloc'ed string buffers.
3937 uuid(uuid_IVsObjectList2),
3938 version(1.0),
3939 pointer_default(unique)
3941 interface IVsObjectList2 : IUnknown
3943 //--------------------------------------------------------------------------
3944 // Methods taken from IVsLiteTreeList
3945 //--------------------------------------------------------------------------
3947 HRESULT GetFlags([out] VSTREEFLAGS *pFlags);
3948 HRESULT GetItemCount([out] ULONG* pCount);
3949 HRESULT GetExpandedList([in] ULONG Index, [out] BOOL *pfCanRecurse, [out] IVsLiteTreeList **pptlNode);
3950 HRESULT LocateExpandedList([in] IVsLiteTreeList* ExpandedList, [out] ULONG *iIndex);
3951 HRESULT OnClose([out] VSTREECLOSEACTIONS *ptca);
3952 HRESULT GetText([in] ULONG Index, [in] VSTREETEXTOPTIONS tto, [out, string] const WCHAR **ppszText);
3953 HRESULT GetTipText([in] ULONG Index, [in] VSTREETOOLTIPTYPE eTipType, [out, string] const WCHAR **ppszText);
3954 HRESULT GetExpandable([in] ULONG Index, [out] BOOL *pfExpandable);
3955 [local] HRESULT GetDisplayData([in] ULONG Index, [out] VSTREEDISPLAYDATA *pData);
3956 HRESULT UpdateCounter([out] ULONG *pCurUpdate, [out] VSTREEITEMCHANGESMASK *pgrfChanges);
3957 HRESULT GetListChanges([in,out] ULONG *pcChanges, [in, size_is(*pcChanges)] VSTREELISTITEMCHANGE *prgListChanges);
3958 HRESULT ToggleState([in] ULONG Index, [out] VSTREESTATECHANGEREFRESH *ptscr);
3960 //--------------------------------------------------------------------------
3961 // Methods taken from IVsObjectList (with some replacements)
3962 //--------------------------------------------------------------------------
3964 // Get list capabilities
3965 // This method is replacing
3966 //HRESULT GetCapabilities([out] LIB_LISTCAPABILITIES *pCapabilities);
3967 HRESULT GetCapabilities2([out] LIB_LISTCAPABILITIES2 *pgrfCapabilities);
3969 // Get IVsObjectList2 interface for sub-list for given element index and list type
3970 // This method is replacing
3971 //HRESULT GetList([in] ULONG Index, [in] LIB_LISTTYPE ListType, [in] LIB_LISTFLAGS Flags, [in] VSOBSEARCHCRITERIA *pobSrch, [out] IVsObjectList **ppList);
3972 HRESULT GetList2([in] ULONG Index, [in] LIB_LISTTYPE2 ListType, [in] LIB_LISTFLAGS Flags, [in] VSOBSEARCHCRITERIA2 *pobSrch, [out, retval] IVsObjectList2 **ppIVsObjectList2);
3974 // Get category field (attribute value) for given list element
3975 // Gets category fields (attribute values) supported by list, if given NIL list element index ((ULONG)(-1))
3976 // Returns E_FAIL if given category not supported
3977 // This method is replacing
3978 //HRESULT GetCategoryField([in] ULONG Index, [in] LIB_CATEGORY Category, [out,retval] DWORD* pField);
3979 HRESULT GetCategoryField2([in] ULONG Index, [in] LIB_CATEGORY2 Category, [out,retval] DWORD *pfCatField);
3981 // Get whether given list element is expandable, excluding from consideration given list types
3982 // This method is replacing
3983 //HRESULT GetExpandable2([in] ULONG Index, [in] LIB_LISTTYPE ListTypeExcluded, [out] BOOL *pfExpandable);
3984 HRESULT GetExpandable3([in] ULONG Index, [in] LIB_LISTTYPE2 ListTypeExcluded, [out] BOOL *pfExpandable);
3986 // Get NavigationInfo for given list element
3987 // This method is replacing
3988 //HRESULT GetNavigationInfo([in] ULONG Index, [in, out] VSOBNAVIGATIONINFO2 *pobNav);
3989 HRESULT GetNavigationInfo2([in] ULONG Index, [in, out] VSOBNAVIGATIONINFO3 *pobNav);
3991 // Locate list element for given NavigationInfo
3992 // This method is replacing
3993 //HRESULT LocateNavigationInfo([in] VSOBNAVIGATIONINFO2 *pobNav, [in] VSOBNAVNAMEINFONODE *pobName, [in] BOOL fDontUpdate, [out] BOOL *pfMatchedName, [out] ULONG *pIndex);
3994 HRESULT LocateNavigationInfo2([in] VSOBNAVIGATIONINFO3 *pobNav, [in] VSOBNAVNAMEINFONODE2 *pobName, [in] BOOL fDontUpdate, [out] BOOL *pfMatchedName, [out] ULONG *pIndex);
3996 HRESULT GetBrowseObject([in] ULONG Index, [out] IDispatch **ppdispBrowseObj);
3997 HRESULT GetUserContext([in] ULONG Index, [out] IUnknown **ppunkUserCtx);
3998 HRESULT ShowHelp([in] ULONG Index);
3999 HRESULT GetSourceContext([in] ULONG Index, [out, string] const WCHAR **pszFileName, [out] ULONG *pulLineNum);
4000 HRESULT CountSourceItems([in] ULONG Index, [out] IVsHierarchy **ppHier, [out] VSITEMID *pitemid, [out, retval] ULONG *pcItems);
4001 HRESULT GetMultipleSourceItems([in] ULONG Index, [in] VSGSIFLAGS grfGSI, [in] ULONG cItems, [out, size_is(cItems)] VSITEMSELECTION rgItemSel[]);
4002 HRESULT CanGoToSource([in] ULONG Index, [in] VSOBJGOTOSRCTYPE SrcType, [out] BOOL *pfOK);
4003 HRESULT GoToSource([in] ULONG Index, [in] VSOBJGOTOSRCTYPE SrcType);
4004 HRESULT GetContextMenu([in] ULONG Index, [out] CLSID *pclsidActive, [out] LONG *pnMenuId, [out] IOleCommandTarget **ppCmdTrgtActive);
4005 HRESULT QueryDragDrop([in] ULONG Index, [in] IDataObject *pDataObject, [in] DWORD grfKeyState, [in, out]DWORD * pdwEffect);
4006 HRESULT DoDragDrop([in] ULONG Index, [in] IDataObject * pDataObject, [in] DWORD grfKeyState, [in, out]DWORD * pdwEffect);
4007 HRESULT CanRename([in] ULONG Index, [in] LPCOLESTR pszNewName, [out] BOOL *pfOK);
4008 HRESULT DoRename([in] ULONG Index, [in] LPCOLESTR pszNewName, [in] VSOBJOPFLAGS grfFlags);
4009 HRESULT CanDelete([in] ULONG Index, [out] BOOL *pfOK);
4010 HRESULT DoDelete([in] ULONG Index, [in] VSOBJOPFLAGS grfFlags);
4011 // this method is going to be removed
4012 HRESULT FillDescription([in] ULONG Index, [in] VSOBJDESCOPTIONS grfOptions, [in] IVsObjectBrowserDescription2 *pobDesc);
4013 // Used to add the description pane text in OBject Browser. Also an alternate
4014 // mechanism for providing tooltips (ODO_TOOLTIPDESC is set in that case)
4015 // This method is replacing
4016 //HRESULT FillDescription([in] ULONG Index, [in] VSOBJDESCOPTIONS grfOptions, [in] IVsObjectBrowserDescription2 *pobDesc);
4017 HRESULT FillDescription2([in] ULONG Index, [in] VSOBJDESCOPTIONS grfOptions, [in] IVsObjectBrowserDescription3 *pobDesc);
4019 HRESULT EnumClipboardFormats([in] ULONG Index, [in] VSOBJCFFLAGS grfFlags, [in] ULONG celt, [in, out, size_is(celt)] VSOBJCLIPFORMAT rgcfFormats[], [out, optional] ULONG *pcActual);
4020 HRESULT GetClipboardFormat([in] ULONG Index, [in] VSOBJCFFLAGS grfFlags, [in] FORMATETC *pFormatetc, [in] STGMEDIUM *pMedium);
4021 HRESULT GetExtendedClipboardVariant([in] ULONG Index, [in] VSOBJCFFLAGS grfFlags, [in] const VSOBJCLIPFORMAT *pcfFormat, [out] VARIANT *pvarFormat);
4023 //--------------------------------------------------------------------------
4024 // Methods new to IVsObjectList2
4025 //--------------------------------------------------------------------------
4027 HRESULT GetProperty([in] ULONG Index, [in] VSOBJLISTELEMPROPID propid, [out] VARIANT *pvar);
4028 HRESULT GetNavInfo([in] ULONG Index, [out] IVsNavInfo ** ppNavInfo);
4029 HRESULT GetNavInfoNode([in] ULONG Index, [out] IVsNavInfoNode ** ppNavInfoNode);
4030 HRESULT LocateNavInfoNode([in] IVsNavInfoNode * pNavInfoNode, [out] ULONG * pulIndex);
4033 // IVsSimpleObjectList2 interface
4035 // A list which implements this interface need not implement IVsLiteTreeList, the
4036 // interface from which this interface indirectly inherits.
4038 // This interface is a simplified version of the IVsObjectList2 interface.
4039 // A few of the IVsObjectList2 methods have been removed or modified. The removed
4040 // methods are methods effectively inherited from IVsLiteTreeList which are unused.
4041 // The modified methods include GetText(), GetTipText(), GetSourceContext() and
4042 // GetList2(). GetText(), GetTipText() and GetSourceContext() are replaced with
4043 // GetTextWithOwnership(), GetTipTextWithOwnership() and GetSourceContextWithOwnership(),
4044 // respectively, to allow the return of strings with ownership. GetList2() has been
4045 // modified to return IVsSimpleObjectList2 (this interface) pointers rather than
4046 // IVsObjectList2 pointers.
4048 // It is recommended that managed list implementations implement IVsSimpleObjectList2
4049 // (this interface) instead of IVsObjectList2, as managed IVsObjectList2::GetText(),
4050 // IVsObjectList2::GetTipText() and IVsObjectList2::GetSourceContext() implementations
4051 // will leak CoTaskMemAlloc'ed string buffers.
4053 uuid(uuid_IVsSimpleObjectList2),
4054 version(1.0),
4055 pointer_default(unique)
4057 interface IVsSimpleObjectList2 : IUnknown
4059 HRESULT GetFlags([out] VSTREEFLAGS *pFlags);
4060 HRESULT GetCapabilities2([out] LIB_LISTCAPABILITIES2 *pgrfCapabilities);
4061 HRESULT UpdateCounter([out] ULONG *pCurUpdate);
4062 HRESULT GetItemCount([out] ULONG* pCount);
4063 [local] HRESULT GetDisplayData([in] ULONG Index, [out] VSTREEDISPLAYDATA *pData);
4064 HRESULT GetTextWithOwnership([in] ULONG Index, [in] VSTREETEXTOPTIONS tto, [out] BSTR *pbstrText);
4065 HRESULT GetTipTextWithOwnership([in] ULONG Index, [in] VSTREETOOLTIPTYPE eTipType, [out] BSTR *pbstrText);
4066 HRESULT GetCategoryField2([in] ULONG Index, [in] LIB_CATEGORY2 Category, [out,retval] DWORD *pfCatField);
4067 HRESULT GetBrowseObject([in] ULONG Index, [out] IDispatch **ppdispBrowseObj);
4068 HRESULT GetUserContext([in] ULONG Index, [out] IUnknown **ppunkUserCtx);
4069 HRESULT ShowHelp([in] ULONG Index);
4070 HRESULT GetSourceContextWithOwnership([in] ULONG Index, [out] BSTR *pbstrFileName, [out] ULONG *pulLineNum);
4071 HRESULT CountSourceItems([in] ULONG Index, [out] IVsHierarchy **ppHier, [out] VSITEMID *pitemid, [out, retval] ULONG *pcItems);
4072 HRESULT GetMultipleSourceItems([in] ULONG Index, [in] VSGSIFLAGS grfGSI, [in] ULONG cItems, [out, size_is(cItems)] VSITEMSELECTION rgItemSel[]);
4073 HRESULT CanGoToSource([in] ULONG Index, [in] VSOBJGOTOSRCTYPE SrcType, [out] BOOL *pfOK);
4074 HRESULT GoToSource([in] ULONG Index, [in] VSOBJGOTOSRCTYPE SrcType);
4075 HRESULT GetContextMenu([in] ULONG Index, [out] CLSID *pclsidActive, [out] LONG *pnMenuId, [out] IOleCommandTarget **ppCmdTrgtActive);
4076 HRESULT QueryDragDrop([in] ULONG Index, [in] IDataObject *pDataObject, [in] DWORD grfKeyState, [in, out]DWORD * pdwEffect);
4077 HRESULT DoDragDrop([in] ULONG Index, [in] IDataObject * pDataObject, [in] DWORD grfKeyState, [in, out]DWORD * pdwEffect);
4078 HRESULT CanRename([in] ULONG Index, [in] LPCOLESTR pszNewName, [out] BOOL *pfOK);
4079 HRESULT DoRename([in] ULONG Index, [in] LPCOLESTR pszNewName, [in] VSOBJOPFLAGS grfFlags);
4080 HRESULT CanDelete([in] ULONG Index, [out] BOOL *pfOK);
4081 HRESULT DoDelete([in] ULONG Index, [in] VSOBJOPFLAGS grfFlags);
4082 HRESULT FillDescription2([in] ULONG Index, [in] VSOBJDESCOPTIONS grfOptions, [in] IVsObjectBrowserDescription3 *pobDesc);
4083 HRESULT EnumClipboardFormats([in] ULONG Index, [in] VSOBJCFFLAGS grfFlags, [in] ULONG celt, [in, out, size_is(celt)] VSOBJCLIPFORMAT rgcfFormats[], [out, optional] ULONG *pcActual);
4084 HRESULT GetClipboardFormat([in] ULONG Index, [in] VSOBJCFFLAGS grfFlags, [in] FORMATETC *pFormatetc, [in] STGMEDIUM *pMedium);
4085 HRESULT GetExtendedClipboardVariant([in] ULONG Index, [in] VSOBJCFFLAGS grfFlags, [in] const VSOBJCLIPFORMAT *pcfFormat, [out] VARIANT *pvarFormat);
4086 HRESULT GetProperty([in] ULONG Index, [in] VSOBJLISTELEMPROPID propid, [out] VARIANT *pvar);
4087 HRESULT GetNavInfo([in] ULONG Index, [out] IVsNavInfo ** ppNavInfo);
4088 HRESULT GetNavInfoNode([in] ULONG Index, [out] IVsNavInfoNode ** ppNavInfoNode);
4089 HRESULT LocateNavInfoNode([in] IVsNavInfoNode * pNavInfoNode, [out] ULONG * pulIndex);
4090 HRESULT GetExpandable3([in] ULONG Index, [in] LIB_LISTTYPE2 ListTypeExcluded, [out] BOOL *pfExpandable);
4091 HRESULT GetList2([in] ULONG Index, [in] LIB_LISTTYPE2 ListType, [in] LIB_LISTFLAGS Flags, [in] VSOBSEARCHCRITERIA2 *pobSrch, [out, retval] IVsSimpleObjectList2 **ppIVsSimpleObjectList2);
4092 HRESULT OnClose([out] VSTREECLOSEACTIONS *ptca);
4095 // Lists of Physical Containers (LLT_PHYSICALCONTAINERS) should implement this interface
4096 // and provide for VSCOMPONENTSELECTORDATA for all its items
4098 uuid(uuid_IVsBrowseContainersList),
4099 version(1.0),
4100 pointer_default(unique)
4102 interface IVsBrowseContainersList : IUnknown
4104 HRESULT GetContainerData([in] ULONG ulIndex, [out] VSCOMPONENTSELECTORDATA * pData);
4105 HRESULT FindContainer([in] VSCOMPONENTSELECTORDATA * pData, [out] ULONG * pulIndex);
4108 // IVsLibrary2 interface
4110 // This interface is a replacement for the IVsLibrary interface.
4112 // The GetSeparatorString() method returns a string which is owned by the underlying library.
4113 // The underlying library is expected to keep a returned string "alive" until the next request
4114 // for a string, or until the library is released. Underlying libraries which would prefer to
4115 // return strings with ownership should implement IVsSimpleLibrary2 instead of IVsLibrary2
4116 // (this interface). IVsSimpleLibrary2 has the GetSeparatorStringWithOwnership() method which
4117 // returns a string with ownership. Note that IVsSimpleLibrary2 also has the GetGuid() method
4118 // which populates a given GUID buffer rather than returning a pointer to a library owned GUID.
4120 // It is recommended that managed library implementations implement IVsSimpleLibrary2 instead
4121 // of IVsLibrary2 (this interface), as managed IVsLibrary2::GetSeparatorString GetSourceContext()
4122 // implementations will leak CoTaskMemAlloc'ed string buffers and managed IVsLibrary2::GetGuid()
4123 // implementations require working with IntPtr's.
4125 uuid(uuid_IVsLibrary2),
4126 version(1.0),
4127 pointer_default(unique)
4129 interface IVsLibrary2 : IUnknown
4131 //--------------------------------------------------------------------------
4132 // Methods taken from IVsLibrary
4133 //--------------------------------------------------------------------------
4135 // Get category fields (attribute values) supported by library's list elements
4136 // Returns E_FAIL if given category not supported
4137 // This method is replacing
4138 //HRESULT GetSupportedCategoryFields([in] LIB_CATEGORY Category, [out, retval] DWORD *pCatField);
4139 HRESULT GetSupportedCategoryFields2([in] LIB_CATEGORY2 Category, [out, retval] DWORD *pgrfCatField);
4141 // Get IVsObjectList2 interface for root list for given list type
4142 // This method is replacing
4143 //HRESULT GetList([in] LIB_LISTTYPE ListType, [in] LIB_LISTFLAGS Flags, [in] VSOBSEARCHCRITERIA *pobSrch, [out, retval] IVsObjectList **ppList);
4144 HRESULT GetList2([in] LIB_LISTTYPE2 ListType, [in] LIB_LISTFLAGS Flags, [in] VSOBSEARCHCRITERIA2 *pobSrch, [out, retval] IVsObjectList2 **ppIVsObjectList2);
4146 HRESULT GetLibList([in] LIB_PERSISTTYPE lptType, [out, retval] IVsLiteTreeList **ppList);
4148 // Get library flags
4149 // This method is replacing
4150 //HRESULT GetLibFlags([out, retval] LIB_FLAGS *pfFlags);
4151 HRESULT GetLibFlags2([out, retval] LIB_FLAGS2 *pgrfFlags);
4153 HRESULT UpdateCounter([out] ULONG *pCurUpdate);
4154 HRESULT GetGuid([out] const GUID **ppguidLib);
4155 HRESULT GetSeparatorString([out, string] LPCWSTR *pszSeparator);
4156 HRESULT LoadState([in] IStream *pIStream, [in] LIB_PERSISTTYPE lptType);
4157 HRESULT SaveState([in] IStream *pIStream, [in] LIB_PERSISTTYPE lptType);
4158 HRESULT GetBrowseContainersForHierarchy([in] IVsHierarchy *pHierarchy, [in] ULONG celt, [in, out, size_is(celt)] VSBROWSECONTAINER rgBrowseContainers[], [out, optional] ULONG *pcActual);
4159 HRESULT AddBrowseContainer([in] PVSCOMPONENTSELECTORDATA pcdComponent, [in, out] LIB_ADDREMOVEOPTIONS *pgrfOptions, [out, optional] BSTR *pbstrComponentAdded);
4160 HRESULT RemoveBrowseContainer([in] DWORD dwReserved, [in] LPCWSTR pszLibName);
4162 //--------------------------------------------------------------------------
4163 // Methods new to IVsLibrary2
4164 //--------------------------------------------------------------------------
4166 HRESULT CreateNavInfo([in, size_is(ulcNodes)] SYMBOL_DESCRIPTION_NODE rgSymbolNodes[], [in] ULONG ulcNodes, [out] IVsNavInfo ** ppNavInfo);
4169 // IVsSimpleLibrary2 interface
4171 // This interface is a simplified version of the IVsLibrary2 interface. A few of the
4172 // IVsLibrary2 methods have been removed or modified. The removed methods are methods
4173 // effectively inherited from IVsLibrary which are unused. The modified methods include
4174 // GetSeparatorString() and GetGuid(). GetSeparatorString() is replaced with
4175 // GetSeparatorStringWithOwnership() to allow the return of strings with ownership.
4176 // GetGuid() has been modified to populate a given GUID buffer.
4178 // It is recommended that managed list implementations implement IVsSimpleLibrary2
4179 // (this interface) instead of IVsLibrary2, as managed IVsLibrary2::GetSeparatorString()
4180 // implementations will leak CoTaskMemAlloc'ed string buffers and managed IVsLibrary2::GetGuid()
4181 // implementations require working with IntPtr's..
4183 // Note that libraries that implement IVsSimpleLibrary2 register themselves using
4184 // IVsObjectManager2::RegisterSimpleLibrary().
4186 uuid(uuid_IVsSimpleLibrary2),
4187 version(1.0),
4188 pointer_default(unique)
4190 interface IVsSimpleLibrary2 : IUnknown
4192 HRESULT GetSupportedCategoryFields2([in] LIB_CATEGORY2 Category, [out, retval] DWORD *pgrfCatField);
4193 HRESULT GetList2([in] LIB_LISTTYPE2 ListType, [in] LIB_LISTFLAGS Flags, [in] VSOBSEARCHCRITERIA2 *pobSrch, [out, retval] IVsSimpleObjectList2 **ppIVsSimpleObjectList2);
4194 HRESULT GetLibFlags2([out, retval] LIB_FLAGS2 *pgrfFlags);
4195 HRESULT UpdateCounter([out] ULONG *pCurUpdate);
4196 HRESULT GetGuid([out] GUID *pguidLib);
4197 HRESULT GetSeparatorStringWithOwnership([out] BSTR *pbstrSeparator);
4198 HRESULT LoadState([in] IStream *pIStream, [in] LIB_PERSISTTYPE lptType);
4199 HRESULT SaveState([in] IStream *pIStream, [in] LIB_PERSISTTYPE lptType);
4200 HRESULT GetBrowseContainersForHierarchy([in] IVsHierarchy *pHierarchy, [in] ULONG celt, [in, out, size_is(celt)] VSBROWSECONTAINER rgBrowseContainers[], [out, optional] ULONG *pcActual);
4201 HRESULT AddBrowseContainer([in] PVSCOMPONENTSELECTORDATA pcdComponent, [in, out] LIB_ADDREMOVEOPTIONS *pgrfOptions, [out] BSTR *pbstrComponentAdded);
4202 HRESULT RemoveBrowseContainer([in] DWORD dwReserved, [in] LPCWSTR pszLibName);
4203 HRESULT CreateNavInfo([in, size_is(ulcNodes)] SYMBOL_DESCRIPTION_NODE rgSymbolNodes[], [in] ULONG ulcNodes, [out] IVsNavInfo ** ppNavInfo);
4207 // IVsLibrary2Ex - extension for libraries, which allow add/remove browse components and
4208 // might give NavInfo pointing to a not loaded component as a hyperjump in OB Details Pane
4210 uuid(D9C7D24D-7ED2-4a9d-93D1-450426CB27DF),
4211 version(1.0),
4212 pointer_default(unique)
4214 interface IVsLibrary2Ex : IUnknown
4216 // Libraries receive notifications that profile settings changed through this method.
4217 HRESULT ProfileSettingsChanged();
4219 HRESULT GetNavInfoContainerData([in] IVsNavInfo * pNavInfo, [out] VSCOMPONENTSELECTORDATA * pcsdComponent);
4221 // Give library idle time
4222 HRESULT DoIdle();
4224 // Used to give the library the hint whether the given physical container is unchanging
4225 // As an example, the .NET library is given the hint that the .NET framework containers are unchanging
4226 HRESULT SetContainerAsUnchanging([in] VSCOMPONENTSELECTORDATA *pcsdComponent, [in] BOOL fUnchanging);
4230 // IVsEnumLibraries2
4232 uuid(uuid_IVsEnumLibraries2),
4233 version(1.0),
4234 pointer_default(unique)
4236 interface IVsEnumLibraries2 : IUnknown
4238 HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IVsLibrary2 **rgelt, [out] ULONG *pceltFetched);
4239 HRESULT Skip([in] ULONG celt);
4240 HRESULT Reset(void);
4241 HRESULT Clone([out] IVsEnumLibraries2 **ppenum);
4244 interface IVsSelectedSymbols;
4245 interface IVsBrowseComponentSet;
4246 interface IVsSimpleBrowseComponentSet;
4247 interface IVsCombinedBrowseComponentSet;
4249 // IVsObjectManager2 - Replacement for IVsObjectManager interface
4250 // The old interface is depricated and it is recommended to use this new one to register
4251 // Libraries instead of LibraryManagers.
4253 enum _BROWSE_COMPONENT_SET_TYPE
4255 BCST_EXCLUDE_LIBRARIES = 0x0000,
4256 BCST_INCLUDE_LIBRARIES = 0x0001
4259 typedef DWORD BROWSE_COMPONENT_SET_TYPE;
4262 uuid(uuid_IVsObjectManager2),
4263 version(1.0),
4264 pointer_default(unique)
4266 interface IVsObjectManager2 : IUnknown
4268 HRESULT RegisterLibrary([in] IVsLibrary2 * pLib, [out] VSCOOKIE* pdwCookie);
4269 HRESULT RegisterSimpleLibrary([in] IVsSimpleLibrary2 * pLib, [out] VSCOOKIE* pdwCookie);
4270 HRESULT UnregisterLibrary([in] VSCOOKIE dwCookie);
4271 HRESULT EnumLibraries([out]IVsEnumLibraries2 ** ppEnum);
4272 HRESULT FindLibrary([in] REFGUID guidLibrary, [out] IVsLibrary2 **ppLib);
4274 // helpers to deal with NavInfos and DataObjects coming from Class View, Object Browser and other nav tools
4275 HRESULT GetListAndIndex([in] IVsNavInfo * pNavInfo, [in] DWORD dwFlags, [out] IVsObjectList2 ** ppList, [out] ULONG * pIndex);
4276 HRESULT ParseDataObject([in]IDataObject * pIDataObject, [out] IVsSelectedSymbols ** ppSymbols);
4278 // Creates an empty set for specified libraries.
4279 HRESULT CreateSimpleBrowseComponentSet([in] BROWSE_COMPONENT_SET_TYPE Type, [in, size_is(ulcLibs)] const GUID rgguidLibs[], [in] ULONG ulcLibs, [out, retval] IVsSimpleBrowseComponentSet ** ppSet);
4280 // Creates a set automatically populated with project references and keeps them in sync
4281 // pProject should implement VSProject
4282 HRESULT CreateProjectReferenceSet([in] IUnknown * pProject, [out, retval] IVsSimpleBrowseComponentSet ** ppSet);
4283 // Creates an empty set, which can be populated with other sets
4284 HRESULT CreateCombinedBrowseComponentSet([out, retval] IVsCombinedBrowseComponentSet ** ppCombinedSet);
4287 // VS browse libraries
4289 // VB
4290 // {414AC972-9829-4B6A-A8D7-A08152FEB8AA}
4291 cpp_quote("DEFINE_GUID(GUID_VB_BrowseLibrary, 0x414AC972, 0x9829, 0x4B6A, 0xA8, 0xD7, 0xA0, 0x81, 0x52, 0xFE, 0xB8, 0xAA);")
4293 // CSharp
4294 // {58f1bad0-2288-45b9-ac3a-d56398f7781d}
4295 cpp_quote("DEFINE_GUID(GUID_CSharp_BrowseLibrary, 0x58f1bad0, 0x2288, 0x45b9, 0xac, 0x3a, 0xd5, 0x63, 0x98, 0xf7, 0x78, 0x1d);")
4297 // JSharp
4298 // {7B1DC85B-E430-4187-8177-EF97DD390D9A}
4299 cpp_quote("DEFINE_GUID(GUID_VJSharp_BrowseLibrary, 0x7B1DC85B, 0xE430, 0x4187, 0x81, 0x77, 0xEF, 0x97, 0xDD, 0x39, 0x0D, 0x9A);")
4301 // VC
4302 // {6C1AC90E-09FC-4f23-90FF-87F8CFC2A445}
4303 cpp_quote("DEFINE_GUID(GUID_VC_BrowseLibrary, 0x6c1ac90e, 0x09fc, 0x4f23, 0x90, 0xff, 0x87, 0xf8, 0xcf, 0xc2, 0xa4, 0x45);")
4305 // BSC
4306 // {26E73A17-0D6C-4a33-B833-22C76C50949F}
4307 cpp_quote("DEFINE_GUID(GUID_BSC_BrowseLibrary, 0x26e73a17, 0x0d6c, 0x4a33, 0xb8, 0x33, 0x22, 0xc7, 0x6c, 0x50, 0x94, 0x9f);")
4309 // .Net
4310 // {1ec72fd7-c820-4273-9a21-777a5c522e03}
4311 cpp_quote("DEFINE_GUID(GUID_Assembly_BrowseLibrary, 0x1ec72fd7, 0xc820, 0x4273, 0x9a, 0x21, 0x77, 0x7a, 0x5c, 0x52, 0x2e, 0x03);")
4313 // COM
4314 // {18E32C04-58BA-4a1e-80DE-1C291634166A}
4315 cpp_quote("DEFINE_GUID(GUID_TypeLib_BrowseLibrary, 0x18e32c04, 0x58ba, 0x4a1e, 0x80, 0xde, 0x1c, 0x29, 0x16, 0x34, 0x16, 0x6a);")
4317 // Folders
4318 // {DC534E0E-EFBE-4d0c-8A25-98BF029F15F8}
4319 cpp_quote("DEFINE_GUID(GUID_Folder_BrowseLibrary, 0xdc534e0e, 0xefbe, 0x4d0c, 0x8a, 0x25, 0x98, 0xbf, 0x2, 0x9f, 0x15, 0xf8);")
4321 // Resource View
4322 // {D22514E7-23AF-4723-B6E5-E17D27626D34}
4323 cpp_quote("DEFINE_GUID(GUID_ResourceView_BrowseLibrary, 0xD22514E7, 0x23AF, 0x4723, 0xB6, 0xE5, 0xE1, 0x7D, 0x27, 0x62, 0x6D, 0x34);")
4325 #ifdef INTEROPLIB
4326 module BrowseLibraryGuids80
4328 // VS browse libraries
4329 const LPSTR VB = "{414AC972-9829-4B6A-A8D7-A08152FEB8AA}";
4330 const LPSTR CSharp = "{58f1bad0-2288-45b9-ac3a-d56398f7781d}";
4331 const LPSTR VJSharp = "{7B1DC85B-E430-4187-8177-EF97DD390D9A}";
4332 const LPSTR VC = "{6C1AC90E-09FC-4f23-90FF-87F8CFC2A445}";
4333 const LPSTR BSC = "{26E73A17-0D6C-4a33-B833-22C76C50949F}";
4334 const LPSTR Assembly = "{1ec72fd7-c820-4273-9a21-777a5c522e03}";
4335 const LPSTR TypeLib = "{18E32C04-58BA-4a1e-80DE-1C291634166A}";
4336 const LPSTR Folder = "{DC534E0E-EFBE-4d0c-8A25-98BF029F15F8}";
4337 const LPSTR ResourceView = "{D22514E7-23AF-4723-B6E5-E17D27626D34}";
4339 #endif // INTEROPLIB
4342 // BrowseComponentSet list options to modify behavior provided by a real library
4343 enum _BROWSE_COMPONENT_SET_OPTIONS
4345 BCSO_NO_REMOVE = 0x0001, // IVsObjectList2::CanDelete will always return FALSE
4346 BCSO_NO_RENAME = 0x0002, // IVsObjectList2::CanRename will always return FALSE
4347 BCSO_NO_DRAG_DROP = 0x0004, // IVsObjectList2::QueryDragDrop will always return FALSE
4348 BCSO_PROJECT_REFERENCES = 0x0008, // IVsObjectList2::GetCategoryField2 will return LCPT_PROJECTREFERENCE for LC_PHYSICALCONTAINERTYPE category. This is needed to show/hide project references class view functionality
4351 cpp_quote("#define BCSO_NO_EDIT (BCSO_NO_REMOVE | BCSO_NO_RENAME | BCSO_NO_DRAG_DROP)")
4353 typedef DWORD BROWSE_COMPONENT_SET_OPTIONS;
4355 // IVsBrowseComponentSet
4356 // generic interface to get data from a set of components
4359 uuid(uuid_IVsBrowseComponentSet),
4360 version(1.0),
4361 pointer_default(unique)
4363 interface IVsBrowseComponentSet : IUnknown
4365 HRESULT put_ComponentsListOptions([in] BROWSE_COMPONENT_SET_OPTIONS dwOptions);
4366 HRESULT get_ComponentsListOptions([out, retval] BROWSE_COMPONENT_SET_OPTIONS * pdwOptions);
4368 HRESULT put_ChildListOptions([in] BROWSE_COMPONENT_SET_OPTIONS dwOptions);
4369 HRESULT get_ChildListOptions([out, retval] BROWSE_COMPONENT_SET_OPTIONS * pdwOptions);
4371 // gives/searches combined data for all project references (for OB)
4372 // it also can combine the resulting list with pExtraListToCombineWith [optional]
4373 HRESULT GetList2([in] LIB_LISTTYPE2 ListType, [in] LIB_LISTFLAGS Flags, [in] VSOBSEARCHCRITERIA2 *pobSrch, [in] IVsObjectList2 * pExtraListToCombineWith/* can be NULL*/, [out, retval] IVsObjectList2 **ppIVsObjectList2);
4374 // this allows a library to give correct info about all its children (including this set)
4375 HRESULT GetSupportedCategoryFields2([in] LIB_CATEGORY2 Category, [out, retval] DWORD *pgrfCatField);
4376 // symbol nodes should include root NavInfo nodes and the resulting NavInfo will have it as a root
4377 HRESULT CreateNavInfo([in] REFGUID guidLib /* can be GUID_NULL*/, [in, size_is(ulcNodes)] SYMBOL_DESCRIPTION_NODE rgSymbolNodes[], [in] ULONG ulcNodes, [out, retval] IVsNavInfo ** ppNavInfo);
4378 // in case somebody is interested if set has been changed
4379 HRESULT UpdateCounter([out] ULONG *pCurUpdate);
4383 // IVsSimpleBrowseComponentSet
4384 // interface to populate a set of components
4386 uuid(uuid_IVsSimpleBrowseComponentSet),
4387 version(1.0),
4388 pointer_default(unique)
4390 interface IVsSimpleBrowseComponentSet : IVsBrowseComponentSet
4392 // RootNavInfo defines the object to show this set of components under. All NavInfos returned from
4393 // set lists will start with this NavInfo (that is its nodes and lib guid).
4394 HRESULT put_RootNavInfo([in] IVsNavInfo * pRootNavInfo);
4395 HRESULT get_RootNavInfo([out, retval] IVsNavInfo ** pRootNavInfo);
4397 HRESULT put_Owner([in] IUnknown * pOwner); // in project references pOwner is VsProject
4398 HRESULT get_Owner([out, retval] IUnknown ** ppOwner);
4400 HRESULT FindComponent([in] REFGUID guidLib /* can be GUID_NULL*/, [in] VSCOMPONENTSELECTORDATA * pcsdComponent, [out]IVsNavInfo ** ppRealLibNavInfo, [out] VSCOMPONENTSELECTORDATA * pcsdExistingComponent);
4401 HRESULT AddComponent([in] REFGUID guidLib /* can be GUID_NULL*/, [in] VSCOMPONENTSELECTORDATA * pcsdComponent, [out]IVsNavInfo ** ppRealLibNavInfo, [out] VSCOMPONENTSELECTORDATA * pcsdAddedComponent);
4402 HRESULT RemoveComponent([in] IVsNavInfo * pRealLibNavInfo);
4403 HRESULT RemoveAllComponents();
4406 // IVsCombinedBrowseComponentSet
4407 // combines multiple component sets and gives/searches deduplicated list of components
4408 // (can be used for project references presentation in OB as a top level list)
4410 uuid(uuid_IVsCombinedBrowseComponentSet),
4411 version(1.0),
4412 pointer_default(unique)
4414 interface IVsCombinedBrowseComponentSet : IVsBrowseComponentSet
4416 HRESULT AddSet([in] IVsSimpleBrowseComponentSet * pSet);
4417 HRESULT GetSetCount([in] ULONG * pulCount);
4418 HRESULT GetSetAt([in] ULONG ulIndex, [out, retval] IVsSimpleBrowseComponentSet ** ppSet);
4419 HRESULT RemoveSetAt([in] ULONG ulIndex);
4420 HRESULT RemoveAllSets();
4421 HRESULT RemoveOwnerSets([in] IUnknown * pOwner);
4425 // IVsSelectedSymbol
4427 uuid(uuid_IVsSelectedSymbol),
4428 version(1.0),
4429 pointer_default(unique)
4431 interface IVsSelectedSymbol : IUnknown
4433 HRESULT GetNavInfo([out] IVsNavInfo **ppNavInfo);
4434 HRESULT GetName([out] BSTR *pbstrName);
4437 // IVsEnumSelectedSymbols
4439 uuid(uuid_IVsEnumSelectedSymbols),
4440 version(1.0),
4441 pointer_default(unique)
4443 interface IVsEnumSelectedSymbols : IUnknown
4445 HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IVsSelectedSymbol **rgpIVsSelectedSymbol, [out] ULONG *pceltFetched);
4446 HRESULT Skip([in] ULONG celt);
4447 HRESULT Reset(void);
4448 HRESULT Clone([out] IVsEnumSelectedSymbols **ppIVsEnumSelectedSymbols);
4451 // IVsSelectedSymbols
4453 uuid(uuid_IVsSelectedSymbols),
4454 version(1.0),
4455 pointer_default(unique)
4457 interface IVsSelectedSymbols : IUnknown
4459 HRESULT GetCount([out] ULONG *pcItems);
4460 HRESULT GetItem([in] ULONG iItem, [out] IVsSelectedSymbol **ppIVsSelectedSymbol);
4461 HRESULT EnumSelectedSymbols([out] IVsEnumSelectedSymbols **ppIVsEnumSelectedSymbols);
4462 HRESULT GetItemTypes([out] DWORD *pgrfTypes);
4465 //new interface for CV and OB, as a replacement for IVsClassView and IVsObjectBrowser (the CV and OB services will continue to have different SIDs)
4467 uuid(uuid_IVsNavigationTool),
4468 version(1.0),
4469 pointer_default(unique)
4471 interface IVsNavigationTool : IUnknown
4473 HRESULT NavigateToSymbol([in] REFGUID guidLib, [in, size_is(ulcNodes)] SYMBOL_DESCRIPTION_NODE rgSymbolNodes[], [in] ULONG ulcNodes);
4474 HRESULT NavigateToNavInfo([in] IVsNavInfo * pNavInfo);
4475 HRESULT GetSelectedSymbols([out] IVsSelectedSymbols **ppIVsSelectedSymbols);
4478 // to get IVsNavigationTool and IVsSelectedSymbols use
4479 // SID_SVsClassView service - for class view
4480 // SID_SVsObjBrowser service - for object browser
4484 //-----------------------------------------------------------------------------
4485 // IVsFindSymbol
4486 //-----------------------------------------------------------------------------
4487 // Implemented by the Environment on the Find Symbol (replacement for IVsObjectSearch)
4490 uuid(uuid_IVsFindSymbol),
4491 version(1.0),
4492 pointer_default(unique)
4494 interface IVsFindSymbol : IUnknown
4496 // guidScope here can be only one of GUID_VsSymbolScope_*
4497 HRESULT GetUserOptions([out] GUID * pguidScope, [out] VSOBSEARCHCRITERIA2 *pobSrch);
4498 HRESULT SetUserOptions([in] REFGUID guidScope, [in] const VSOBSEARCHCRITERIA2 *pobSrch);
4499 // guidSymbolScope here can be one of GUID_VsSymbolScope_* or a library guid.
4500 HRESULT DoSearch([in] REFGUID guidSymbolScope, [in] const VSOBSEARCHCRITERIA2 *pobSrch);
4503 // Find Symbol events
4505 uuid(uuid_IVsFindSymbolEvents),
4506 version(1.0)
4508 interface IVsFindSymbolEvents : IUnknown
4510 HRESULT OnUserOptionsChanged([in] REFGUID guidSymbolScope, [in] const VSOBSEARCHCRITERIA2 *pobSrch);
4513 // use SID_SVsObjectSearch service to get IVsFindSymbol and IConnectionPointContainer
4516 // VS Symbol Scopes
4517 // {A5A527EA-CF0A-4abf-B501-EAFE6B3BA5C6}
4518 cpp_quote("DEFINE_GUID(GUID_VsSymbolScope_All, 0xa5a527ea, 0xcf0a, 0x4abf, 0xb5, 0x1, 0xea, 0xfe, 0x6b, 0x3b, 0xa5, 0xc6);")
4520 // {41FD0B24-8D2B-48c1-B1DA-AACF13A5570F}
4521 cpp_quote("DEFINE_GUID(GUID_VsSymbolScope_OBSelectedComponents, 0x41fd0b24, 0x8d2b, 0x48c1, 0xb1, 0xda, 0xaa, 0xcf, 0x13, 0xa5, 0x57, 0xf);")
4523 // {C2146638-C2FE-4c1e-A49D-64AE971EEF39}
4524 cpp_quote("DEFINE_GUID(GUID_VsSymbolScope_FSSelectedComponents, 0xc2146638, 0xc2fe, 0x4c1e, 0xa4, 0x9d, 0x64, 0xae, 0x97, 0x1e, 0xef, 0x39);")
4526 // {3168518C-B7C9-4e0c-BD51-E3321CA7B4D8}
4527 cpp_quote("DEFINE_GUID(GUID_VsSymbolScope_Frameworks, 0x3168518c, 0xb7c9, 0x4e0c, 0xbd, 0x51, 0xe3, 0x32, 0x1c, 0xa7, 0xb4, 0xd8);")
4529 // {B1BA9461-FC54-45b3-A484-CB6DD0B95C94}
4530 cpp_quote("DEFINE_GUID(GUID_VsSymbolScope_Solution, 0xb1ba9461, 0xfc54, 0x45b3, 0xa4, 0x84, 0xcb, 0x6d, 0xd0, 0xb9, 0x5c, 0x94);")
4533 #ifdef INTEROPLIB
4534 module SymbolScopeGuids80
4536 // VS Symbol Scopes
4537 const LPSTR All = "{A5A527EA-CF0A-4ABF-B501-EAFE6B3BA5C6}";
4538 const LPSTR OBSelectedComponents = "{41FD0B24-8D2B-48C1-B1DA-AACF13A5570F}";
4539 const LPSTR FSSelectedComponents = "{C2146638-C2FE-4C1E-A49D-64AE971EEF39}";
4540 const LPSTR Frameworks = "{3168518C-B7C9-4E0C-BD51-E3321CA7B4D8}";
4541 const LPSTR Solution = "{B1BA9461-FC54-45B3-A484-CB6DD0B95C94}";
4543 #endif // INTEROPLIB
4546 //----------------------------------------------------------------------------
4547 // interface IVsCallBrowser (Call Browser service)
4548 //----------------------------------------------------------------------------
4549 // Implemented by the Environment.
4550 // Used by VsPackages that want to manipulate CallBrowser.
4552 enum __VSCALLBROWSERMODE
4554 CBM_CALLSTO = 0,
4555 CBM_CALLSTO_NEWWINDOW = 1,
4556 CBM_CALLSFROM = 2,
4557 CBM_CALLSFROM_NEWWINDOW = 3
4559 typedef LONG CALLBROWSERMODE;
4562 uuid(uuid_IVsCallBrowser),
4563 version(1.0),
4564 pointer_default(unique)
4566 interface IVsCallBrowser : IUnknown
4568 HRESULT SetRootAtSymbol([in] CALLBROWSERMODE cbMode, [in] REFGUID guidLib, [in, size_is(ulcNodes)] SYMBOL_DESCRIPTION_NODE rgSymbolNodes[], [in] ULONG ulcNodes);
4569 HRESULT SetRootAtNavInfo([in] CALLBROWSERMODE cbMode, [in] IVsNavInfo * pNavInfo);
4571 // Currently there is a limit on the number of Call Browser instances opened simultaneously.
4572 // This function sets pfOK = TRUE if can create new instance of Call Browser.
4573 HRESULT CanCreateNewInstance([out] BOOL *pfOK);
4576 // Call Browser service.
4578 uuid(uuid_SVsCallBrowser)
4580 interface SVsCallBrowser : IUnknown
4584 cpp_quote("#define SID_SVsCallBrowser IID_SVsCallBrowser")
4586 // Primary Call Browser tool window GUID
4587 // {5415EA3A-D813-4948-B51E-562082CE0887}
4588 cpp_quote("extern const __declspec(selectany) GUID GUID_CallBrowser = { 0x5415ea3a, 0xd813, 0x4948, { 0xb5, 0x1e, 0x56, 0x20, 0x82, 0xce, 0x8, 0x87 } };")
4590 // multiinstance (secondary) Call Browser tool windows GUID
4591 // {F78BCC56-71F7-4e7d-8215-F690CAE4F452}
4592 cpp_quote("extern const __declspec(selectany) GUID GUID_CallBrowserSecondary = { 0xf78bcc56, 0x71f7, 0x4e7d, { 0x82, 0x15, 0xf6, 0x90, 0xca, 0xe4, 0xf4, 0x52 } };")
4596 // replacement for IVsComponentSelectorDlg - new interface allows to prepopulate selected components
4598 enum __VSCOMPSELFLAGS2
4600 VSCOMSEL2_MultiSelectMode = 0x00000001, // allow selection of multiple components
4601 VSCOMSEL2_ShowSelectedList = 0x00000080, // list of selected components is visible. Ignored in single select mode
4602 VSCOMSEL2_ShowAllPagesOfSpecifiedTypes = 0x00000100, // Add pages, which are not specified in rgcstiTabInitializers, but produce the same components (have the same ComponentType string value in the registry).
4605 typedef DWORD VSCOMPSELFLAGS2;
4608 uuid(uuid_IVsComponentSelectorDlg2),
4609 version(1.0),
4610 pointer_default(unique)
4612 interface IVsComponentSelectorDlg2 : IUnknown
4614 HRESULT ComponentSelectorDlg2([in] VSCOMPSELFLAGS2 grfFlags, // VSCOMSEL_* flags
4615 [in] IVsComponentUser *pUser, // interface on which AddComponent will be called
4616 [in] ULONG cComponents,
4617 [in, size_is(cComponents)] PVSCOMPONENTSELECTORDATA rgpcsdComponents[], //prepopulation of Selected Components
4618 [in] LPCOLESTR lpszDlgTitle, // dialog caption (NULL == "Component Selector")
4619 [in] LPCOLESTR lpszHelpTopic, // F1 help topic (NULL == "VS.ComponentPicker")
4620 [in, out] ULONG * pxDlgSize, // 0 to use default
4621 [in, out] ULONG * pyDlgSize, // 0 to use default
4622 [in] ULONG cTabInitializers, // number of tabs
4623 [in, size_is(cTabInitializers)] VSCOMPONENTSELECTORTABINIT rgcstiTabInitializers[], // tabs in show order and their initialization info
4624 [in, out] GUID * pguidStartOnThisTab, // tab to show when the dialog starts up
4625 [in] LPCOLESTR pszBrowseFilters, // list of filters to use in 'Browse...' dialog
4626 [in, out] BSTR *pbstrBrowseLocation); // directory (initial/return value) to start the 'Browse...' dialog in
4631 uuid(uuid_SVsComponentSelectorDlg2)
4633 interface SVsComponentSelectorDlg2 : IUnknown
4637 cpp_quote("#define SID_SVsComponentSelectorDlg2 IID_SVsComponentSelectorDlg2")
4639 // Component Selector page GUIDs
4641 // GUID_BrowseFilesPage {2483F435-673D-4fa3-8ADD-B51442F65349}
4642 cpp_quote("DEFINE_GUID(GUID_BrowseFilesPage, 0x2483f435, 0x673d, 0x4fa3, 0x8a, 0xdd, 0xb5, 0x14, 0x42, 0xf6, 0x53, 0x49);")
4644 // GUID_MRUPage {19B97F03-9594-4c1c-BE28-25FF030113B3}
4645 cpp_quote("DEFINE_GUID(GUID_MRUPage, 0x19b97f03, 0x9594, 0x4c1c, 0xbe, 0x28, 0x25, 0xff, 0x3, 0x1, 0x13, 0xb3);")
4647 // the following are defined in vsshell.idl
4649 // GUID_COMPlusPage -- {9A341D95-5A64-11d3-BFF9-00C04F990235}
4650 //cpp_quote("DEFINE_GUID(GUID_COMPlusPage, 0x9a341d95, 0x5a64, 0x11d3, 0xbf, 0xf9, 0x00, 0xc0, 0x4f, 0x99, 0x02, 0x35);")
4651 // GUID_COMClassicPage -- {9A341D96-5A64-11d3-BFF9-00C04F990235}
4652 //cpp_quote("DEFINE_GUID(GUID_COMClassicPage, 0x9a341d96, 0x5a64, 0x11d3, 0xbf, 0xf9, 0x00, 0xc0, 0x4f, 0x99, 0x02, 0x35);")
4653 // GUID_SolutionPage -- {9A341D97-5A64-11d3-BFF9-00C04F990235}
4654 //cpp_quote("DEFINE_GUID(GUID_SolutionPage, 0x9a341d97, 0x5a64, 0x11d3, 0xbf, 0xf9, 0x00, 0xc0, 0x4f, 0x99, 0x02, 0x35);")
4657 #ifdef INTEROPLIB
4659 module ComponentSelectorGuids80
4661 const LPSTR BrowseFilesPage = "{2483F435-673D-4fa3-8ADD-B51442F65349}";
4662 const LPSTR MRUPage = "{19B97F03-9594-4c1c-BE28-25FF030113B3}";
4663 // the following are defined in vsshell.idl
4664 const LPSTR COMPlusPage = "{9A341D95-5A64-11d3-BFF9-00C04F990235}";
4665 const LPSTR COMClassicPage = "{9A341D96-5A64-11d3-BFF9-00C04F990235}";
4666 const LPSTR SolutionPage = "{9A341D97-5A64-11d3-BFF9-00C04F990235}";
4668 #endif // INTEROPLIB
4671 // New interface for retrieving macro values from a project system
4673 uuid(uuid_IVsBuildMacroInfo),
4674 version(1.0),
4675 pointer_default(unique)
4677 interface IVsBuildMacroInfo : IUnknown
4679 HRESULT GetBuildMacroValue([in] BSTR bstrBuildMacroName, [out] BSTR *pbstrBuildMacroValue);
4683 //------------------------------------------------------------------------------
4684 // Preview Changes Tool Window
4685 //------------------------------------------------------------------------------
4687 // This is the check-state of an item.
4688 enum __PREVIEWCHANGESITEMCHECKSTATE
4690 PCCS_None = 0, // Item doesn't have a checkbox channel
4691 PCCS_Unchecked = 1, // Item and all its descendants are unchecked.
4692 PCCS_PartiallyChecked = 2, // Some descendants of this item are checked and some others are unchecked.
4693 PCCS_Checked = 3 // Item and all its descendants are checked.
4695 typedef LONG PREVIEWCHANGESITEMCHECKSTATE;
4697 // IVsPreviewChangesList interface
4699 // This interface is implemented on lists of items which represent the changes tree
4700 // in the Preview Changes dialog.
4702 // A list which implements this interface must also implement IVsLiteTreeList, the
4703 // interface from which this interface effectively inherits.
4705 // The GetText() and GetTipText() methods return strings which are owned by the
4706 // underlying list. The underlying list is expected to keep a returned string "alive"
4707 // until the next request for a string, or until the list is released. Underlying lists
4708 // which would prefer to return strings with ownership should implement IVsSimplePreviewChangesList
4709 // instead of IVsPreviewChangesList (this interface). IVsSimplePreviewChangesList has
4710 // the GetTextWithOwnership() and GetTipTextWithOwnership() methods which return
4711 // strings with ownership.
4713 // It is recommended that managed list implementations implement IVsSimplePreviewChangesList
4714 // instead of IVsPreviewChangesList (this interface), as managed GetText() and GetTipText()
4715 // implementations will leak CoTaskMemAlloc'ed string buffers.
4717 uuid(uuid_IVsPreviewChangesList),
4718 version(1.0),
4719 pointer_default(unique)
4721 interface IVsPreviewChangesList : IUnknown
4723 //--------------------------------------------------------------------------
4724 // Methods "inherited" from IVsLiteTreeList
4725 //--------------------------------------------------------------------------
4727 HRESULT GetFlags([out] VSTREEFLAGS *pFlags);
4728 HRESULT GetItemCount([out] ULONG* pCount);
4729 HRESULT GetExpandedList([in] ULONG Index, [out] BOOL *pfCanRecurse, [out] IVsLiteTreeList **pptlNode);
4730 HRESULT LocateExpandedList([in] IVsLiteTreeList* ExpandedList, [out] ULONG *iIndex);
4731 HRESULT OnClose([out] VSTREECLOSEACTIONS *ptca);
4732 HRESULT GetText([in] ULONG Index, [in] VSTREETEXTOPTIONS tto, [out, string] const WCHAR **ppszText);
4733 HRESULT GetTipText([in] ULONG Index, [in] VSTREETOOLTIPTYPE eTipType, [out, string] const WCHAR **ppszText);
4734 HRESULT GetExpandable([in] ULONG Index, [out] BOOL *pfExpandable);
4735 [local] HRESULT GetDisplayData([in] ULONG Index, [out] VSTREEDISPLAYDATA *pData);
4736 HRESULT UpdateCounter([out] ULONG *pCurUpdate, [out] VSTREEITEMCHANGESMASK *pgrfChanges);
4737 HRESULT GetListChanges([in,out] ULONG *pcChanges, [in, size_is(*pcChanges)] VSTREELISTITEMCHANGE *prgListChanges);
4738 HRESULT ToggleState([in] ULONG Index, [out] VSTREESTATECHANGEREFRESH *ptscr);
4740 //--------------------------------------------------------------------------
4741 // Methods extending IVsLiteTreeList
4742 //--------------------------------------------------------------------------
4744 // Request source for list element to be hung off text view
4745 HRESULT OnRequestSource([in] ULONG Index, [in] IUnknown *pIUnknownTextView);
4748 // IVsSimplePreviewChangesList interface.
4750 // This interface is implemented on lists of items which represent the changes tree
4751 // in the Preview Changes dialog.
4753 // A list which implements this interface need not implement IVsLiteTreeList, the
4754 // interface from which this interface indirectly inherits.
4756 // This interface is a simplified version of the IVsPreviewChangesList interface.
4757 // A few of the IVsPreviewChangesList methods have been removed or modified. The removed
4758 // methods are methods effectively inherited from IVsLiteTreeList which are unused.
4759 // The modified methods include GetText(), GetTipText(), GetExpandedList() and
4760 // LocateExpandedList(). GetText() and GetTipText() are replaced with GetTextWithOwnership()
4761 // and GetTipTextWithOwnership(), respectively, to allow the return of strings with ownership.
4762 // GetExpandedList() and LocateExpandedList() have been modified to take and return
4763 // IVsSimplePreviewChangesList (this interface) pointers rather than IVsLiteTreeList pointers.
4765 // It is recommended that managed list implementations implement IVsSimplePreviewChangesList
4766 // (this interface) instead of IVsPreviewChangesList, as managed IVsPreviewChangesList::GetText()
4767 // and IVsPreviewChangesList::GetTipText() implementations will leak CoTaskMemAlloc'ed string buffers.
4769 uuid(uuid_IVsSimplePreviewChangesList),
4770 version(1.0),
4771 pointer_default(unique)
4773 interface IVsSimplePreviewChangesList : IUnknown
4775 HRESULT GetItemCount([out] ULONG* pCount);
4776 [local] HRESULT GetDisplayData([in] ULONG Index, [out] VSTREEDISPLAYDATA *pData);
4777 HRESULT GetTextWithOwnership([in] ULONG Index, [in] VSTREETEXTOPTIONS tto, [out] BSTR *pbstrText);
4778 HRESULT GetTipTextWithOwnership([in] ULONG Index, [in] VSTREETOOLTIPTYPE eTipType, [out] BSTR *pbstrText);
4779 HRESULT GetExpandable([in] ULONG Index, [out] BOOL *pfExpandable);
4780 HRESULT GetExpandedList([in] ULONG Index, [out] BOOL *pfCanRecurse, [out] IVsSimplePreviewChangesList **ppIVsSimplePreviewChangesList);
4781 HRESULT LocateExpandedList([in] IVsSimplePreviewChangesList *pIVsSimplePreviewChangesListChild, [out] ULONG *piIndex);
4782 HRESULT ToggleState([in] ULONG Index, [out] VSTREESTATECHANGEREFRESH *ptscr);
4783 HRESULT OnRequestSource([in] ULONG Index, [in] IUnknown *pIUnknownTextView);
4784 HRESULT OnClose([out] VSTREECLOSEACTIONS *ptca);
4787 // Preview changes warning level
4788 enum __PREVIEWCHANGESWARNINGLEVEL
4790 PCWL_None = 0,
4791 PCWL_Information = 1,
4792 PCWL_Warning = 2,
4793 PCWL_Error = 3
4795 typedef LONG PREVIEWCHANGESWARNINGLEVEL;
4797 // IVsPreviewChangesEngine interface (implemented by refactoring engine)
4799 uuid(uuid_IVsPreviewChangesEngine),
4800 version(1.0),
4801 pointer_default(unique)
4803 interface IVsPreviewChangesEngine : IUnknown
4805 // Get dialog title text
4806 HRESULT GetTitle([out] BSTR *pbstrTitle);
4807 // Get dialog description text (tree view description text)
4808 HRESULT GetDescription([out] BSTR *pbstrDescription);
4809 // Get dialog text view description text
4810 HRESULT GetTextViewDescription([out] BSTR *pbstrTextViewDescription);
4811 // Get dialog warning text and level
4812 HRESULT GetWarning([out] BSTR *pbstrWarning, [out] PREVIEWCHANGESWARNINGLEVEL *ppcwlWarningLevel);
4813 // Get dialog help context (defaults to "VS.PreviewChanges")
4814 HRESULT GetHelpContext([out] BSTR *pbstrHelpContext);
4815 // Get dialog confirmation button text
4816 HRESULT GetConfirmation([out] BSTR *pbstrConfirmation);
4817 // Get root changes list
4818 HRESULT GetRootChangesList([out] IUnknown **ppIUnknownPreviewChangesList);
4819 // Apply changes
4820 HRESULT ApplyChanges();
4823 // IVsPreviewChangesService interface (implemented by preview changes service)
4825 uuid(uuid_IVsPreviewChangesService),
4826 version(1.0),
4827 pointer_default(unique)
4829 interface IVsPreviewChangesService : IUnknown
4831 // Preview Changes (calling back to given refactoring engine)
4832 HRESULT PreviewChanges([in] IVsPreviewChangesEngine *pIVsPreviewChangesEngine);
4836 uuid(uuid_SVsPreviewChangesService)
4838 interface SVsPreviewChangesService : IUnknown
4842 cpp_quote("#define SID_SVsPreviewChangesService IID_SVsPreviewChangesService")
4845 //----------------------------------------------------------------------------
4846 // interface IVsCodeDefViewContext (Code Definition View context)
4847 //----------------------------------------------------------------------------
4848 // Passed to IVsCodeDefView::SetContext()
4850 uuid(uuid_IVsCodeDefViewContext),
4851 version(1.0),
4852 pointer_default(unique)
4854 interface IVsCodeDefViewContext : IUnknown
4856 HRESULT GetCount([out] ULONG *pcItems);
4857 HRESULT GetSymbolName([in] ULONG iItem, [out] BSTR *pbstrSymbolName);
4858 HRESULT GetFileName([in] ULONG iItem, [out] BSTR *pbstrFileName);
4859 HRESULT GetLine([in] ULONG iItem, [out] ULONG *piLine);
4860 HRESULT GetCol([in] ULONG iItem, [out] ULONG *piCol);
4863 //----------------------------------------------------------------------------
4864 // interface IVsCodeDefView (Code Definition Window service)
4865 //----------------------------------------------------------------------------
4866 // Implemented by the Environment.
4868 // This interface is available on the SID_SVsCodeDefView service. It is used
4869 // by VsPackages that want to manipulate the Code Definition Window. It can
4870 // be used to show and hide the Code Definition tool window, to check whether
4871 // the tool window is currently visible and to alter the context presented by
4872 // the tool window. Context is set using the SetContext() method. For the
4873 // most part, the last context set wins. The exception is when the tool
4874 // window is active, at which time SetContext() has no effect. This is a
4875 // failsafe to avoid having events (selection, etc.) in the tool window push
4876 // a new context to the tool window itself. The expectation is that
4877 // VsPackages will use the IsCodeDefView() method to check whether a given
4878 // IVsTextView is owned by the Code Definition tool window and avoid pushing
4879 // context to the tool window itself.
4881 // On idle, the Code Definition tool window gets and presents the most
4882 // recently pushed context. It doesn't do this on every idle, but instead
4883 // after a refresh delay time. A VSPackage can obtain the refresh delay time
4884 // using the GetRefreshDelay() method, using it to optimize pushing context.
4886 // A VsPackage can force idle time processing using the ForceIdleProcessing()
4887 // method. It is expected that this method only be called on the main UI
4888 // thread.
4891 uuid(uuid_IVsCodeDefView),
4892 version(1.0),
4893 pointer_default(unique)
4895 interface IVsCodeDefView : IUnknown
4897 HRESULT ShowWindow();
4898 HRESULT HideWindow();
4899 HRESULT IsVisible();
4900 HRESULT SetContext([in] IVsCodeDefViewContext *pIVsCodeDefViewContext);
4901 HRESULT GetRefreshDelay([out] ULONG *pcMilliseconds);
4902 HRESULT ForceIdleProcessing();
4903 HRESULT IsCodeDefView([in] IVsTextView *pIVsTextView, [out] BOOL *pfIsCodeDefView);
4906 //----------------------------------------------------------------------------
4907 // interface IVsSupportCodeDefView
4908 //----------------------------------------------------------------------------
4909 // Implemented by a doc data to indicate that it supports Code Def View.
4910 // Presense of this interface on a doc data indicates that the doc data
4911 // supports Code Def View; so, this interface has no methods. The shell
4912 // provided text buffer (CLSID_VsTextBuffer) implements this interface,
4913 // and therefore supports Code Def View.
4915 uuid(uuid_IVsSupportCodeDefView)
4917 interface IVsSupportCodeDefView : IUnknown
4922 uuid(uuid_SVsCodeDefView)
4924 interface SVsCodeDefView : IUnknown
4928 cpp_quote("#define SID_SVsCodeDefView IID_SVsCodeDefView")
4931 //----------------------------------------------------------------------------
4932 // interface IVsCoTaskMemFreeMyStrings
4933 //----------------------------------------------------------------------------
4934 // Implementing this interface on an object indicates to the object consumer
4935 // that strings returned by methods on other interfaces on the object should
4936 // be freed by the caller using ::CoTaskMemFree(). This is necessary because
4937 // some older interfaces have contracts where strings are returned without
4938 // ownership. Some implementations of these interfaces may choose to, or in
4939 // some cases are forced to, return strings with ownership. The methods whose
4940 // contract is to return strings without ownership return strings using
4941 // parameters of type const WCHAR **. These include:
4943 // IVsLiteTreeList::GetText()
4944 // IVsLiteTreeList::GetTipText()
4945 // IVsObjectList::GetSourceContext()
4946 // IVsLibraryMgr::GetNameAt()
4947 // IVsLibrary::GetSeparatorString()
4948 // IVsCompletionSet::GetDisplayText()
4949 // IVsFullTextScanner::FullTextRead()
4950 // IVsTextScanner::Read()
4951 // IVsDropdownBarClient::GetEntryText()
4952 // IVsPersistentTextImage::Image_FullTextRead()
4953 // IVsLangSpecificSyntax::GetText() [OBSOLETE]
4955 // The managed interop for these methods treats the const WCHAR ** parameters
4956 // as out strings, so managed implementations of these methods hand out strings
4957 // with ownership. In order to indicate to the caller that the handed out
4958 // strings should be freed, managed implementations of these methods should also
4959 // implement IVsCoTaskMemFreeMyStrings (this interface).
4961 uuid(uuid_IVsCoTaskMemFreeMyStrings)
4963 interface IVsCoTaskMemFreeMyStrings : IUnknown
4967 //----------------------------------------------------------------------------
4968 // IVsRunningDocumentTable
4969 //----------------------------------------------------------------------------
4970 // Implemented by the Environment.
4971 // Used by projects and editors to coordinate open documents.
4973 typedef enum __VSRDTFLAGS2
4975 /*********************** defined in vsshell.idl
4976 RDT_NoLock = 0x00000000, // can be used with FindAndLockDocument(RDT_NoLock,...,&docCookie) to get DocCookie w/o taking a lock
4977 RDT_ReadLock = 0x00000001,
4978 RDT_EditLock = 0x00000002,
4979 RDT_RequestUnlock = 0x00000004,
4980 RDT_LOCKMASK = 0x00000007,
4982 RDT_DontSaveAs = 0x00000008,
4983 RDT_NonCreatable = 0x00000010,
4984 RDT_DontSave = 0x00000020,
4985 RDT_DontAutoOpen = 0x00000040,
4986 RDT_CaseSensitive = 0x00000080,
4987 RDT_CantSave = RDT_DontSave | RDT_DontSaveAs,
4988 RDT_VirtualDocument = 0x00001000,
4989 RDT_ProjSlnDocument = 0x00002000,
4990 RDT_PlaceHolderDoc = 0x00004000,
4991 RDT_CanBuildFromMemory = 0x00008000,
4992 RDT_DontAddToMRU = 0x00010000,
4993 RDT_DOCMASK = 0xFFFFF0F8, // allow __VSCREATEDOCWIN flags in doc mask
4995 RDT_Unlock_NoSave = 0x00000100,
4996 RDT_Unlock_SaveIfDirty = 0x00000200,
4997 RDT_Unlock_PromptSave = 0x00000400,
4998 ***********************/
4999 RDT_Lock_WeakEditLock = 0x00000800,
5000 /*********************** defined in vsshell.idl
5001 RDT_SAVEMASK = 0x00000F00,
5002 ***********************/
5003 RDT_LOCKUNLOCKMASK = 0x00000F00,
5004 } _VSRDTFLAGS2;
5005 typedef DWORD VSRDTFLAGS2;
5007 enum __VSRDTSAVEOPTIONS2
5010 RDTSAVEOPT_SaveIfDirty = 0x00000000, // save only if dirty (this is the default)
5011 RDTSAVEOPT_PromptSave = 0x00000001, // prompt user whether to save
5012 RDTSAVEOPT_ForceSave = 0x00000002, // force save even if not dirty
5013 RDTSAVEOPT_SaveNoChildren = 0x00000004, // save only the root of the hierarchy passed in, don't include its children
5014 RDTSAVEOPT_SaveOnlyChildren = 0x00000008, // save only children of the hierarchy passed in, don't include hierarchy itself
5015 RDTSAVEOPT_ActivateDocOnErr = 0x00000010, // activates the editor window of a doc if it errors on save*/
5016 RDTSAVEOPT_SkipNewUnsaved = 0x00000020, // indicates that new unsaved files (created via File.New File) should be skipped
5017 RDTSAVEOPT_SaveAllButThis = 0x00000040, // the supplied document token indicates the exception and everything but it will be saved normaly
5018 /*RDTSAVEOPT_DocClose = 0x00010000, // indicates save is a result of a document close*/
5019 RDTSAVEOPT_FSaveAs = 0x20000000, //determine if we should bring up a SaveAs dialog - IMPORTANT: this value must be kept
5020 //in sync with the internal flag RDTSAVEOPT_FSAVEAS defined in d:\vs7vnext\env\msenv\core\vsrdtbl.h !!!
5021 /*RDTSAVEOPT_Reserved = 0xFFFF0000, // reserved internal bits*/
5023 typedef DWORD VSRDTSAVEOPTIONS2;
5026 uuid(uuid_IVsRunningDocumentTable2),
5027 version(1.0),
5028 pointer_default(unique)
5030 interface IVsRunningDocumentTable2 : IUnknown
5032 // CloseDocuments
5033 // Closes all DocumentWindows and IVsDocumentLockHolders for a specified document or all documents that belong to an IVsHierarchy. Similar
5034 // to IVsSolution::CloseSolutionElements but is useable also by non-Solution hierarchies, whereas CloseSolutionElements only works for
5035 // solution-related documents (i.e. solution, projects, project items, etc.). Calling CloseDocuments(grfSave, pHierarchy, VSDOCCOOKIE_NIL)
5036 // will only close the documents that belong to pHierarchy as opposed to CloseSolutionElements which will do this and also remove the project
5037 // referenced by pHierarchy from the solution (i.e. RemoveProject). You can pass either a pHierarchy or a docCookie but not both.
5038 HRESULT CloseDocuments([in] FRAMECLOSE grfSaveOptions, [in] IVsHierarchy *pHierarchy, [in] VSCOOKIE docCookie);
5040 // Prompt (if appropriate) to close a document that is open in an incompatible editor. This method will close the document if the user says OK.
5041 // This method shows the same prompt that is normally shown when VS_E_INCOMPATIBLEDOCDATA is returned from IVsEditorFactory::CreateEditorInstance.
5042 // This method determines whether the specified document is in the running document table.
5043 // If the document is in the table and has edit locks, it prompts the user to close the document.
5044 // If user chooses not to close, then it returns OLE_E_PROMPTSAVECANCELLED/*pfFoundAndClosed==FALSE.
5045 // If the document is in the table and has only read locks, it closes the document without prompting.
5046 // If the document is not in the table, it just returns NOERROR/*pfFoundAndClosed==FALSE.
5047 // If the document is actually closed by this method, then it returns NOERROR/*pfFoundAndClosed==TRUE.
5048 HRESULT QueryCloseRunningDocument([in] LPCOLESTR pszMkDocument, [out] BOOL *pfFoundAndClosed);
5050 // FindAndLockDocumentEx is similar to FindAndLockDocument but also allows the specification of a preferred hierarchy/itemid pair for the document in
5051 // case an RDT_EditLock is desired and the document is currently registered with only a RDT_ReadLock with no hierarchy/itemid assigned. In this case
5052 // FindAndLockDocument would have returned E_UNEXPECTED. This method will not register the document in the RDT if it is not currently registered.
5053 HRESULT FindAndLockDocumentEx([in] VSRDTFLAGS grfRDTLockType, [in] LPCOLESTR pszMkDocument, [in] IVsHierarchy *pHierPreferred, [in] VSITEMID itemidPreferred,
5054 [out] IVsHierarchy **ppHierActual, [out] VSITEMID *pitemidActual, [out] IUnknown **ppunkDocDataActual, [out] VSCOOKIE *pdwCookie);
5056 // FindOrRegisterAndLockDocument handles all cases to add a lock to a document whether the document is already registered or not. This is a convenience
5057 // method that combines the functionality of RegisterAndLockDocument and FindAndLockDocumentEx. RegisterAndLockDocument returns an error if the document
5058 // is already registered. FindAndLockDocumentEx returns an error if it is not registered. In the case where an RDT_EditLock is desired and the document
5059 // is currently registered only with a RDT_ReadLock with no pHier/itemid assigned, this function will assign the preferred pHier/itemid to the document.
5060 HRESULT FindOrRegisterAndLockDocument([in] VSRDTFLAGS grfRDTLockType, [in] LPCOLESTR pszMkDocument, [in] IVsHierarchy *pHierPreferred, [in] VSITEMID itemidPreferred,
5061 [in] IUnknown *punkDocData, [out] IVsHierarchy **ppHierActual, [out] VSITEMID *pitemidActual, [out] IUnknown **ppunkDocDataActual, [out] VSCOOKIE *pdwCookie);
5064 //----------------------------------------------------------------------------
5065 // IVsRunningDocTableEvents4
5066 //----------------------------------------------------------------------------
5067 // The event is called before a document is locked in RDT for the very first time.
5068 // The event can be used for example by SCCI to download a document immediately,
5069 // while the rest of the project content is being retrieved asynchronously.
5071 uuid(uuid_IVsRunningDocTableEvents4),
5072 version(1.0)
5074 interface IVsRunningDocTableEvents4 : IUnknown
5076 HRESULT OnBeforeFirstDocumentLock([in] IVsHierarchy* pHier, [in] VSITEMID itemid, [in] LPCOLESTR pszMkDocument);
5077 HRESULT OnAfterSaveAll(void); // Fired after SaveAll command is executed. Parties that have user state not managed via a document in the RDT can use this event to know to save their state.
5078 HRESULT OnAfterLastDocumentUnlock([in] IVsHierarchy* pHier, [in] VSITEMID itemid, [in] LPCOLESTR pszMkDocument, [in] BOOL fClosedWithoutSaving);
5082 cpp_quote("extern const __declspec(selectany) GUID UICONTEXT_NotBuildingAndNotDebugging = { 0x48ea4a80, 0xf14e, 0x4107, { 0x88, 0xfa, 0x8d, 0x0, 0x16, 0xf3, 0xb, 0x9c } };")
5083 cpp_quote("extern const __declspec(selectany) GUID UICONTEXT_SolutionOrProjectUpgrading = { 0xef4f870b, 0x7b85, 0x4f29, { 0x9d, 0x15, 0xce, 0x1a, 0xbf, 0xbe, 0x73, 0x3b } };")
5084 cpp_quote("extern const __declspec(selectany) GUID UICONTEXT_DataSourceWindowSupported = { 0x95c314c4, 0x660b, 0x4627, { 0x9f, 0x82, 0x1b, 0xaf, 0x1c, 0x76, 0x4b, 0xbf } };")
5085 cpp_quote("extern const __declspec(selectany) GUID UICONTEXT_DataSourceWindowAutoVisible = { 0x2e78870d, 0xac7c, 0x4460, { 0xa4, 0xa1, 0x3f, 0xe3, 0x7d, 0x00, 0xef, 0x81 } };")
5086 cpp_quote("extern const __declspec(selectany) GUID UICONTEXT_ToolboxInitialized = { 0xdc5db425, 0xf0fd, 0x4403, { 0x96, 0xa1, 0xf4, 0x75, 0xcd, 0xba, 0x9e, 0xe0 } };")
5087 cpp_quote("extern const __declspec(selectany) GUID UICONTEXT_SolutionExistsAndNotBuildingAndNotDebugging = { 0xd0e4deec, 0x1b53, 0x4cda, { 0x85, 0x59, 0xd4, 0x54, 0x58, 0x3a, 0xd2, 0x3b } };")
5090 uuid(uuid_IVsToolboxDataProviderRegistry),
5091 version(1.0)
5093 interface IVsToolboxDataProviderRegistry : IUnknown
5095 HRESULT RegisterDataProvider ([in]IVsToolboxDataProvider* pDP, [out, retval]VSCOOKIE* pdwProvider);
5096 HRESULT UnregisterDataProvider([in]VSCOOKIE dwProvider);
5100 uuid(uuid_SVsToolboxDataProviderRegistry)
5102 interface SVsToolboxDataProviderRegistry : IUnknown
5105 cpp_quote("#define SID_SVsToolboxDataProviderRegistry IID_SVsToolboxDataProviderRegistry")
5109 uuid(uuid_IVsFontAndColorCacheManager),
5110 version(1.0)
5112 interface IVsFontAndColorCacheManager : IUnknown
5114 HRESULT CheckCache ([in] REFGUID rguidCategory, [out] BOOL *pfHasData);
5115 HRESULT ClearCache ([in] REFGUID rguidCategory);
5116 HRESULT RefreshCache ([in] REFGUID rguidCategory);
5117 HRESULT CheckCacheable([in] REFGUID rguidCategory, [out] BOOL *pfCacheable);
5118 HRESULT ClearAllCaches();
5122 uuid(uuid_SVsFontAndColorCacheManager)
5124 interface SVsFontAndColorCacheManager : IUnknown
5127 cpp_quote("#define SID_SVsFontAndColorCacheManager IID_SVsFontAndColorCacheManager")
5130 // IVSUpgradeLogger
5132 // Upgrade logger used by implementers of IVSProjectUpgradeViaFactory to report errors and informational
5133 // messages.
5134 enum __VSUL_ERRORLEVEL
5136 VSUL_INFORMATIONAL = 0x00000000
5137 ,VSUL_WARNING = 0x00000001
5138 ,VSUL_ERROR = 0x00000002
5139 ,VSUL_STATUSMSG = 0x00000003
5140 ,VSUL_PROJECT_HYPERLINK = 0x00000004
5142 typedef DWORD VSUL_ERRORLEVEL;
5145 uuid(uuid_IVsUpgradeLogger),
5146 version(1.0),
5147 pointer_default(unique)
5149 interface IVsUpgradeLogger : IUnknown
5151 HRESULT LogMessage(
5152 [in] VSUL_ERRORLEVEL ErrorLevel
5153 ,[in] BSTR bstrProject
5154 ,[in] BSTR bstrSource
5155 ,[in] BSTR bstrDescription
5157 HRESULT Flush();
5160 // declare the service type for interop
5161 [uuid(uuid_SVsUpgradeLogger)]
5162 interface SVsUpgradeLogger : IUnknown {}
5164 cpp_quote("#define SID_SVsUpgradeLogger IID_SVsUpgradeLogger")
5165 cpp_quote("#define SID_IVsUpgradeLogger IID_SVsUpgradeLogger") // Obsolete -- use SID_SVsUpgradeLogger instead
5168 // IVsFileUpgrade
5170 // This interface should be used to do any kind of file upgrade that needs to happen as part of
5171 // project upgrade.
5173 // Implementation detail: These methods will NOT be called from IVsProjectUpgradeViaFactory.
5174 // For source control reasons, the project will delay calling these until the project is fully
5175 // opened. The prject should iterate through the files in the project, identify those files
5176 // requiring an upgrade, check those files out of source code control, then upgrade each one.
5179 uuid(uuid_IVsFileUpgrade),
5180 version(1.0),
5181 pointer_default(unique)
5183 interface IVsFileUpgrade : IUnknown
5185 HRESULT UpgradeFile(
5186 [in] BSTR bstrProjectName
5187 ,[in] BSTR bstrFileName
5188 ,[in] BOOL bNoBackup
5189 ,[in] IVsUpgradeLogger * pLogger
5190 ,[out] BOOL * pUpgradeRequired
5192 HRESULT UpgradeFile_CheckOnly(
5193 [in] BSTR bstrProjectName
5194 ,[in] BSTR bstrFileName
5195 ,[in] BOOL bNoBackup
5196 ,[in] IVsUpgradeLogger * pLogger
5197 ,[out] BOOL * pUpgradeRequired
5202 // IVsProjectUpgradeViaFactory
5204 // This interface is implemented by the project factory (or at least QI’able from IVsProjectFactory).
5205 // IVSProjectUpgradeViaFactory is called by the solution, before the project is opened. This provides
5206 // a level of abstraction and keeps knowledge of previous file formats out of the project implementation.
5208 // This new interface is optional; but recommended for all Microsoft implemented projects. Third party
5209 // projects should be encouraged to support the new upgrade method. This is the only mechanism to support
5210 // copy upgrade.
5212 // IVSProjectUpgrade will be called whether upgrade via factory is implemented or called. This approach
5213 // allows IVSProjectUpgradeViaFactory to implement the copy and project only portions of the upgrade, and
5214 // delegate the rest of the work to be done in-place (at possibly the new location).
5216 // All implementations that return either PUVFF_SXSBACKUP or PUVFF_COPYBACKUP should also return
5217 // PUVFF_BACKUPSUPPORTED. This allows aggregated project systems to AND together capabilites. VS will
5218 // interpret a value of 0x80 as being 'multiple projects support mutually exclusive backup types'. This
5219 // allows us to differentiate between that and 'no backup options available'.
5221 // By default, copy backup occurs in a subfolder of the solution. There are times where this is undesireable.
5222 // In those cases UpgradeProject_CheckOnly can return PUVFF_USE_ALT_BACKUP_LOCATION. This will default to
5223 // using a subfolder under the user's default project location folder. This alternate location should be
5224 // avoided if possible, as it presents greater limitations regarding backup filename length.
5226 enum __VSPPROJECTUPGRADEVIAFACTORYFLAGS
5228 PUVFF_SXSBACKUP = 0x00000020
5229 ,PUVFF_COPYBACKUP = 0x00000040
5230 ,PUVFF_BACKUPSUPPORTED = 0x00000080
5231 ,PUVFF_USE_ALT_BACKUP_LOCATION = 0x00000100
5233 typedef DWORD VSPUVF_FLAGS;
5236 uuid(uuid_IVsProjectUpgradeViaFactory),
5237 version(1.0),
5238 pointer_default(unique)
5240 interface IVsProjectUpgradeViaFactory : IUnknown
5242 HRESULT UpgradeProject(
5243 [in] BSTR bstrFileName
5244 ,[in] VSPUVF_FLAGS fUpgradeFlag //only one may be specified
5245 ,[in] BSTR bstrCopyLocation //location of the copy upgrade OR the backup copy location
5246 ,[out] BSTR * pbstrUpgradedFullyQualifiedFileName //copy upgrade will have a different path - others may change the project name
5247 ,[in] IVsUpgradeLogger * pLogger
5248 ,[out] BOOL * pUpgradeRequired
5249 ,[out] GUID * pguidNewProjectFactory //If a different prj factory should be used to create the upgraded proj, the guid should be returned here
5251 HRESULT UpgradeProject_CheckOnly(
5252 [in] BSTR bstrFileName
5253 ,[in] IVsUpgradeLogger * pLogger
5254 ,[out] BOOL * pUpgradeRequired
5255 ,[out] GUID * pguidNewProjectFactory //If a different prj factory should be used to create the upgraded proj, the guid should be returned here
5256 ,[out] VSPUVF_FLAGS * pUpgradeProjectCapabilityFlags //Some kinds of projects may support different backup styles
5258 HRESULT GetSccInfo(
5259 [in] BSTR bstrProjectFileName
5260 ,[out] BSTR* pbstrSccProjectName
5261 ,[out] BSTR* pbstrSccAuxPath
5262 ,[out] BSTR* pbstrSccLocalPath
5263 ,[out] BSTR* pbstrProvider);
5266 //---------------------------------------------------------------------------
5267 // IVsProjectUpgradeViaFactory2
5269 // The new IVsProjectUpgradeViaFactory architecture requires two calls: the first call
5270 // to check the project to see if upgrade is required, the second to actually perform
5271 // the upgrade. In some cases, this requires the factory to open the project file
5272 // twice. For performance reasons, it may be desirable to cache the 'open' required in
5273 // the UpgradeProject_CheckOnly. Then when no upgrade is required, a portion of the
5274 // 'open' has already taken place and the project will be able to finish opening faster.
5275 // This leaves an opportunity for the cached 'open' to be orphaned: cancelled upgrade.
5277 // Any project system that caches information as part of UpgradeProject_CheckOnly should
5278 // implement this interface to clean up cached items associated with the given project
5279 // file.
5281 // NOTE: This method may be called even if the project does NOT require upgrade. This
5282 // is because a different project in the solution MAY require upgrade, thus the
5283 // possibility of a cancelled upgrade exists even though the specific project does not
5284 // require upgrade.
5286 uuid(uuid_IVsProjectUpgradeViaFactory2),
5287 version(1.0),
5288 pointer_default(unique)
5290 interface IVsProjectUpgradeViaFactory2 : IUnknown
5292 HRESULT OnUpgradeProjectCancelled(
5293 [in] BSTR bstrFileName
5297 //---------------------------------------------------------------------------
5298 // IVsSolutionEventsProjectUpgrade
5300 // This event set can be advised for via IVsSolution::AdviseSolutionEvents.
5301 // Third Parties that add/manage items inside projects they don't implement may need to participate
5302 // in the Project Upgrade process. This event is fired after the project implementation has completed
5303 // its upgrade operations and the project is created. It will fire after OnAfterOpenSolution,
5304 // OnAfterOpenProject, or OnAfterLoadProject events depending on the scenario.
5305 // Third parties should carefully manage the file back process. In the case of a side-by-side backup
5306 // (PUVFF_SXSBACKUP) where backup files are placed along side existing files with a ".old" file
5307 // extension, then existing backup files that are older than stUpgradeTime can be assumed to be stale
5308 // files that can be overwritten.
5309 //---------------------------------------------------------------------------
5311 uuid(uuid_IVsSolutionEventsProjectUpgrade),
5312 version(1.0),
5313 pointer_default(unique)
5315 interface IVsSolutionEventsProjectUpgrade : IUnknown
5317 HRESULT OnAfterUpgradeProject([in] IVsHierarchy *pHierarchy, // project being upgraded
5318 [in] VSPUVF_FLAGS fUpgradeFlag, // PUVFF_COPYUPGRADE or PUVFF_SXSBACKUP or PUVFF_COPYBACKUP (only one will be specified)
5319 [in] BSTR bstrCopyLocation, // location of the copy upgrade (PUVFF_COPYUPGRADE) or the backup copy location (PUVFF_COPYBACKUP)
5320 [in] SYSTEMTIME stUpgradeTime, // time upgrade operation began (used to coordinate backup file writing)
5321 [in] IVsUpgradeLogger *pLogger); // upgrade log that messages can be logged to
5324 //---------------------------------------------------------------------------
5325 // IVsActivityLog
5327 // Implemented by the Environment.
5328 // Used by parties that want to add events to the IDE Activity Log. This log
5329 // is active when the shell receives the /log switch, or when an environment
5330 // variable ("VSLogActivity") is set. The log is intended to record high
5331 // level information for the purpose of quickly tracking down and routing
5332 // problems. This is not a tracing tool, and only key events should be logged.
5333 // When logging is turned on, the implementation will log an event in response
5334 // to each method on this interface. When logging is not turned on, the
5335 // implementation for each method is a fast no-op.
5336 //---------------------------------------------------------------------------
5338 typedef enum __tagACTIVITYLOG_ENTRYTYPE
5340 ALE_ERROR = 1, // Indicates a severe error, failure of major shell functionality
5341 ALE_WARNING = 2, // Indicates a warning or ignorable error
5342 ALE_INFORMATION = 3 // Indicates information that is not an error (e.g. SKU information)
5343 } __ACTIVITYLOG_ENTRYTYPE;
5345 typedef DWORD ACTIVITYLOG_ENTRYTYPE;
5348 uuid(uuid_IVsActivityLog),
5349 version(1.0),
5350 pointer_default(unique)
5352 interface IVsActivityLog : IUnknown
5354 HRESULT LogEntry(
5355 [in] ACTIVITYLOG_ENTRYTYPE actType, // type of log entry
5356 [in] LPCOLESTR pszSource, // name of the package making the call
5357 [in] LPCOLESTR pszDescription); // the text of the event
5359 HRESULT LogEntryGuid(
5360 [in] ACTIVITYLOG_ENTRYTYPE actType, // type of log entry
5361 [in] LPCOLESTR pszSource, // name of the package making the call
5362 [in] LPCOLESTR pszDescription, // the text of the event
5363 [in] GUID guid); // a guid to store in the event record
5365 HRESULT LogEntryHr(
5366 [in] ACTIVITYLOG_ENTRYTYPE actType, // type of log entry
5367 [in] LPCOLESTR pszSource, // name of the package making the call
5368 [in] LPCOLESTR pszDescription, // the text of the event
5369 [in] HRESULT hr); // an HRESULT to store in the event record
5371 HRESULT LogEntryGuidHr(
5372 [in] ACTIVITYLOG_ENTRYTYPE actType, // type of log entry
5373 [in] LPCOLESTR pszSource, // name of the package making the call
5374 [in] LPCOLESTR pszDescription, // the text of the event
5375 [in] GUID guid, // a guid to store in the event record
5376 [in] HRESULT hr); // an HRESULT to store in the event record
5378 HRESULT LogEntryPath(
5379 [in] ACTIVITYLOG_ENTRYTYPE actType, // type of log entry
5380 [in] LPCOLESTR pszSource, // name of the package making the call
5381 [in] LPCOLESTR pszDescription, // the text of the event
5382 [in] LPCOLESTR pszPath); // a full file path to store in the event record
5384 HRESULT LogEntryGuidPath(
5385 [in] ACTIVITYLOG_ENTRYTYPE actType, // type of log entry
5386 [in] LPCOLESTR pszSource, // name of the package making the call
5387 [in] LPCOLESTR pszDescription, // the text of the event
5388 [in] GUID guid, // a guid to store in the event record
5389 [in] LPCOLESTR pszPath); // a full file path to store in the event record
5391 HRESULT LogEntryHrPath(
5392 [in] ACTIVITYLOG_ENTRYTYPE actType, // type of log entry
5393 [in] LPCOLESTR pszSource, // name of the package making the call
5394 [in] LPCOLESTR pszDescription, // the text of the event
5395 [in] HRESULT hr, // an HRESULT to store in the event record
5396 [in] LPCOLESTR pszPath); // a full file path to store in the event record
5398 HRESULT LogEntryGuidHrPath(
5399 [in] ACTIVITYLOG_ENTRYTYPE actType, // type of log entry
5400 [in] LPCOLESTR pszSource, // name of the package making the call
5401 [in] LPCOLESTR pszDescription, // the text of the event
5402 [in] GUID guid, // a guid to store in the event record
5403 [in] HRESULT hr, // an HRESULT to store in the event record
5404 [in] LPCOLESTR pszPath); // a full file path to store in the event record
5407 // declare the service type for interop
5408 [uuid(uuid_SVsActivityLog)]
5409 interface SVsActivityLog : IUnknown {}
5411 cpp_quote("#define SID_SVsActivityLog IID_SVsActivityLog")
5413 //---------------------------------------------------------------------------
5414 // IVsPersistDocData3
5415 //---------------------------------------------------------------------------
5417 uuid(uuid_IVsPersistDocData3),
5418 version(1.0),
5419 pointer_default(unique)
5421 interface IVsPersistDocData3 : IUnknown
5423 // HandsOffDocDataStorage tells the DocData object to release any hold it has on its storage (e.g. release and file system locks on its file).
5424 // Following a call to HandsOffDocDataStorage either the document is closed (as result of reloading a changed project or solution file),
5425 // or the document is reloaded via a call to IVsPersistDocData->ReloadDocData or IVsPersistHierarchyItem2->ReloadItem if the storage
5426 // of the DocData object has been changed (e.g. a new version of the file retrieved from Source Code Control)
5427 // or HandsOnDocDataStorage will be called if the storage is not modified since the call to HandsOffDocDataStorage or if the reload is not
5428 // safe because the in-memory DocData is dirty.
5429 // While the DocData object is in HandsOff mode, most calls to the DocData object are expected to fail.
5430 // DocData functions that are expected to work in HandsOff mode are IsDocDataReloadable and IsDocDataDirty;
5431 // they will be used to determine whether DocData can be safely reloaded after the file was modified on disk.
5432 HRESULT HandsOffDocDataStorage(void);
5433 HRESULT HandsOnDocDataStorage(void);
5437 // Enable a window frame to send notifications to anyone who wants to be notified of IVsWindowFrameNotify* events
5439 uuid(uuid_IVsWindowFrame2),
5440 version(1.0),
5441 pointer_default(unique)
5443 interface IVsWindowFrame2 : IUnknown
5445 // This api will detect IVsWindowFrameNotify, IVsWindowFrameNotify2, and IVsWindowFrameNotify3
5446 HRESULT Advise([in] IVsWindowFrameNotify *pNotify, [out] VSCOOKIE *pdwCookie);
5447 HRESULT Unadvise([in] VSCOOKIE dwCookie);
5449 // ActivateOwnerDockedWindow gives focus to a child IVsWindowFrame and ensures that its Selection
5450 // is active. This method is only intended to be used by a parent container for an OwnerDocked
5451 // window (see VSFPROPID_ParentHwnd/VSFPROPID_ParentFrame) in order to forward focus in to the
5452 // currently active child “OwnerDocked” window. For normal, top-level document and tool windows
5453 // IVsWindowFrame::Show should be called to activate the window.
5454 HRESULT ActivateOwnerDockedWindow(void);
5458 // extend the property page interface to be able to retrieve properties on the page
5459 enum __VSPPPID
5461 VSPPPID_FIRST = 1,
5462 VSPPPID_PAGENAME = 1,
5463 VSPPPID_LAST = 1
5466 typedef DWORD VSPPPID;
5469 uuid(uuid_IVsPropertyPage2),
5470 version(1.0),
5471 pointer_default(unique)
5473 interface IVsPropertyPage2 : IUnknown
5475 HRESULT GetProperty([in] VSPPPID propid, [out] VARIANT *pvar);
5476 HRESULT SetProperty([in] VSPPPID propid, [in] VARIANT var);
5485 enum __FRAMESHOW2
5487 FRAMESHOW_Hidden = 0, // obsolete, use WinHidden
5488 FRAMESHOW_WinHidden = 0, // window (tabbed or otherwise) is hidden
5489 FRAMESHOW_WinShown = 1, // a non-tabbed window is made visible
5490 FRAMESHOW_TabActivated = 2, // a tabbed window is activated (made visible)
5491 FRAMESHOW_TabDeactivated = 3, // a tabbed window is deactivated
5492 FRAMESHOW_WinRestored = 4, // window is restored to normal state
5493 FRAMESHOW_WinMinimized = 5, // window is minimized
5494 FRAMESHOW_WinMaximized = 6, // window is maximized
5495 FRAMESHOW_WinClosed = 7, // window is closed and persisted
5496 FRAMESHOW_DestroyMultInst = 8, // multi instance toolwindow destroyed
5497 FRAMESHOW_AutoHideSlideBegin = 9, // autohidden window is about to slide into view
5499 FRAMESHOW_BeforeWinHidden = 10, // Before the Hide of single instance toolwindows
5500 FRAMESHOW_AutoHideSlideEnd = 11 // autohidden window is finished its slide into view
5502 typedef BOOL FRAMESHOW2;
5505 // this interface replaces the previous versions and extends OnMove and OnSize so that an additional query
5506 // to retrieve the size and position are not necessary
5508 uuid(uuid_IVsWindowFrameNotify3),
5509 version(1.0),
5510 pointer_default(unique)
5512 interface IVsWindowFrameNotify3 : IUnknown
5514 HRESULT OnShow([in] FRAMESHOW2 fShow);
5515 HRESULT OnMove([in] int x, [in] int y, [in] int w, [in] int h);
5516 HRESULT OnSize([in] int x, [in] int y, [in] int w, [in] int h);
5517 HRESULT OnDockableChange([in] BOOL fDockable, [in] int x, [in] int y, [in] int w, [in] int h);
5518 HRESULT OnClose([in, out] FRAMECLOSE *pgrfSaveOptions);
5523 //----------------------------------------------------------------------------
5524 // IVsPackageDynamicToolOwnerEx
5525 //----------------------------------------------------------------------------
5526 // In order for a package to successfully use this interface the package must
5527 // be registered with a "SupportsDynamicToolOwner" key. This enables tool windows
5528 // that are visible in a window layout persistance to be hidden by the owning package.
5529 // If the tool is persisted as visible and this key exists on its package regstration,
5530 // its package will be loaded so that this call can be made. Subsequent sessions
5531 // will not cause the package to be loaded if the tool was not shown again in
5532 // the previous session because the window layout will have been persisted with
5533 // it being hidden. Without the "SupportsDynamicToolOwner" registration, the tool
5534 // may be initialy visible due to the delay loading system.
5536 // This primerily affects tools that have the CTW_fForceCreate flag that causes them
5537 // to be loaded by the shell on startup or during mode switches. Secondarily this
5538 // also affects tools that have dynamic visibility via UI context.
5540 // This interface extends the previous version IVsPackageDynamicToolOwner by including
5541 // a parameter for the multi instance ID. The Ex version can control which or how
5542 // many instances may be shown where the non Ex version is only capable of asking
5543 // if that kind of tool may be shown regardless of the instance ID.
5545 uuid(uuid_IVsPackageDynamicToolOwnerEx),
5546 version(1.0),
5547 pointer_default(unique)
5549 interface IVsPackageDynamicToolOwnerEx : IUnknown
5551 // This method allows the Package to use dynamic logic to control
5552 // whether the ToolWindow should be shown or hidden. This method is
5553 // called by the Environment when the user switches which window view
5554 //set (or mode) is active, e.g. Design, Debugging, FullScreen, etc.
5555 HRESULT QueryShowTool([in] REFGUID rguidPersistenceSlot, [in] DWORD dwID, [out] BOOL *pfShowTool);
5559 //---------------------------------------------------------------------------
5560 // IVsContextualIntellisenseFilter
5561 //---------------------------------------------------------------------------
5563 uuid(uuid_IVsContextualIntellisenseFilter),
5564 version(1.0),
5565 pointer_default(unique)
5567 interface IVsContextualIntellisenseFilter : IUnknown
5569 HRESULT Initialize([in] IVsHierarchy* pHierarchy);
5570 HRESULT IsTypeVisible([in] LPCOLESTR szTypeName, [out] BOOL* pfVisible);
5571 HRESULT IsMemberVisible([in] LPCOLESTR szMemberSignature, [out] BOOL* pfVisible);
5572 HRESULT Close();
5576 //---------------------------------------------------------------------------
5577 // IVsContextualIntellisenseFilterProvider
5578 //---------------------------------------------------------------------------
5580 uuid(uuid_IVsContextualIntellisenseFilterProvider),
5581 version(1.0),
5582 pointer_default(unique)
5584 interface IVsContextualIntellisenseFilterProvider : IUnknown
5586 HRESULT GetFilter([in] IVsHierarchy* pHierarchy, [out] IVsContextualIntellisenseFilter** ppFilter);
5589 // Optionally implemented by toolbox users (IVsToolboxUser) and QI'd for by the toolbox. Only the
5590 // currently active toolbox user will recieve these notifications.
5592 uuid(uuid_IVsToolboxActiveUserHook),
5593 version(1.0),
5594 pointer_default(unique)
5596 interface IVsToolboxActiveUserHook : IUnknown
5598 // This method is called when an item is copied or dragged from the clipboard.
5599 HRESULT InterceptDataObject([in] IDataObject *pIn, [out] IDataObject **ppOut);
5601 // This method is called whenever the selected toolbox item changes.
5602 HRESULT ToolboxSelectionChanged([in] IDataObject *pSelected);
5606 //-------------------------------------------------------------------------------------------------
5607 // IVsDefaultToolboxTabState
5609 // This is optionally implemented by implementors of IVsToolboxUser. It allows a designer to
5610 // specify the default state of any toolbox tabs it cares about. The first time* that designer is
5611 // instantiated, GetDefaultTabExpansion will be called for each visible tab in the toolbox. On
5612 // subsequent instantiations, the most recent tab state for that designer will be cached and
5613 // restored (so that user changes are not lost).
5615 // *"first time" means the first time ever or the first time after a toolbox reset -- not the first
5616 // time during a particular IDE session.
5617 //-------------------------------------------------------------------------------------------------
5619 uuid(uuid_IVsDefaultToolboxTabState),
5620 version(1.0),
5621 pointer_default(unique)
5623 interface IVsDefaultToolboxTabState : IUnknown
5625 // Gets the default state of a given tab. The tab is specified by unique ID -- see IVsToolbox3
5626 // for more methods dealing with unique IDs. If this method fails, the toolbox sets the tab
5627 // state according to its own internal logic. Otherwise, the state is determined by the value
5628 // of *pfExpanded.
5629 HRESULT GetDefaultTabExpansion([in] LPCOLESTR pszTabID, [out] BOOL* pfExpanded);
5633 enum __VSPROFILEPATHRESOLVERFLAGS
5635 VSPPR_None = 0x00000000, // Use the standard behavior
5636 VSPPR_OnlyForProfiles = 0x00000001 // the IVsPathResolution code will just copy the inparam to the
5637 //outparam with no conversion if we're not in the middle of reading or writing a vssettings file.
5638 //(This allows automation interfaces to use the same input/output as previous versions when called
5639 //from automation code).
5641 typedef DWORD VSPROFILEPATHRESOLVERFLAGS;
5644 //---------------------------------------------------------------------------
5645 // IVsPathVariableResolver
5646 //---------------------------------------------------------------------------
5647 // Implemented by the IDE.
5648 // This interface allows filepaths to be encoded/decoded to allow settings to be
5649 // stored in a machine independent format with the vssettings files.
5651 // Available via QueryService(SVsPathVariableResolver)
5654 uuid(uuid_IVsPathVariableResolver),
5655 version(1.0),
5656 pointer_default(unique)
5658 interface IVsPathVariableResolver : IUnknown
5660 //The code for EncodePath() will look at strPath to see if it begins with one of the following paths:
5661 // - our install directory
5662 // - user app data
5663 // - (possibly others in the future)
5664 //If the code finds a match, it will replace it with:
5665 // - %VS_INSTALL_DIRECTORY%
5666 // - %USER_APPDATA%
5667 // - (possibly others in the future)
5668 HRESULT ResolvePath([in] LPCOLESTR strEncodedPath, [in] VSPROFILEPATHRESOLVERFLAGS dwFlags, [out] BSTR *pbstrPath);
5669 HRESULT EncodePath([in] LPCOLESTR strPath, [in] VSPROFILEPATHRESOLVERFLAGS dwFlags, [out] BSTR *pbstrEncodedPath);
5672 // declare the service type for interop
5673 [uuid(uuid_SVsPathVariableResolver)]
5674 interface SVsPathVariableResolver : IUnknown {}
5676 cpp_quote("#define SID_SVsPathVariableResolver IID_SVsPathVariableResolver")
5679 //---------------------------------------------------------------------------
5680 // interface IVsProjectFactory2
5681 //---------------------------------------------------------------------------
5683 enum __VSASYNCHOPENPROJECTTYPE
5685 AOPT_SYNCHRONOUS = 0x0000, // None of the flags are set - the project can be opened only synchronously
5686 AOPT_ASYNCHRONOUS = 0x0001, // The project system supports the special "loading" state and
5687 // needs only the project file to be successfully opened
5689 typedef DWORD VSASYNCHOPENPROJECTTYPE;
5692 uuid(uuid_IVsProjectFactory2),
5693 version(1.0)
5695 interface IVsProjectFactory2 : IUnknown
5697 // Returns the type of an asycnhronous open that the project supports.
5698 // If the interface or the method is not implemented
5699 // then the project should be assumed to be of AOPT_SYNCHRONOUS type
5700 HRESULT GetAsynchOpenProjectType
5702 [out, retval] VSASYNCHOPENPROJECTTYPE* pType
5706 //---------------------------------------------------------------------------
5707 // interface IVsAsynchOpenFromSccProjectEvents
5708 //---------------------------------------------------------------------------
5709 // The interface can be implemented by projects that support asynchronous open.
5710 // Whether a project supports this mode or not can be detected by calling
5711 // IVsProjectFactory2::GetAsynchOpenProjectType.
5712 // The interface allows a project to configure asynchronous downloading
5713 // of its content and receive events while the content is being retrieved.
5715 uuid(uuid_IVsAsynchOpenFromSccProjectEvents),
5716 version(1.0)
5718 interface IVsAsynchOpenFromSccProjectEvents : IUnknown
5720 // Called after one or more have been downloaded for a project.
5721 HRESULT OnFilesDownloaded
5723 [in] int cFiles, // Number of files: should be > 0
5724 [in, size_is(cFiles)] const LPCOLESTR rgpszFullPaths[] // Array of paths. Cannot be NULL
5727 // Called when all project content has been downloaded.
5728 HRESULT OnLoadComplete();
5730 // Called when downloading of project content failed.
5731 HRESULT OnLoadFailed();
5734 //---------------------------------------------------------------------------
5735 // interface IVsAsynchOpenFromScc
5736 //---------------------------------------------------------------------------
5738 uuid(uuid_IVsAsynchOpenFromScc),
5739 version(1.0)
5741 // The interface allows to manage asynchronous opening of projects from Source Control.
5742 interface IVsAsynchOpenFromScc : IUnknown
5744 // Allows to determine whether the given project must be loaded asynchronously.
5745 HRESULT LoadProjectAsynchronously
5747 [in] LPCOLESTR lpszProjectPath,
5748 [out] BOOL *pReturnValue
5751 // When a solution is being opened asynchronously, calling this method allows to load the specified project.
5752 // The project's content is still going to be retrieved asynchronously.
5753 HRESULT LoadProject([in] LPCOLESTR lpszProjectPath);
5754 // Allows to find out whether the content of the given hierarchy
5755 // is currently being asynchronously retrieved from SourceControl
5756 HRESULT IsLoadingContent
5758 [in] IVsHierarchy *pHierarchy, // The solution or project hierarchy to check the current mode for
5759 [out] BOOL *pfIsLoading // TRUE if the hierarchy's content is still being retrieved from SourceControl repository
5763 //----------------------------------------------------------------------------
5764 // IVsHierarchyDeleteHandler2
5765 //----------------------------------------------------------------------------
5766 // This interface is optional and is retrieved via QI from IVsHierarchy. This interface extends
5767 // IVsHierarchyDeleteHandler and need only be supported if the hierarchy wants to issue its own
5768 // deletion prompt in order to give more/different information than the standard shell message.
5770 // The following are the 2 major scenarios and behavior:
5772 // 1) If all the selected items belong to one project: the shell builds the "reduced" list of items,
5773 // then calls ShowSpecificDeleteRemoveMessage (if the hierarchy supports IVsHierarchyDeleteHandler2).
5774 // The project then shows its own message if it so desires, and returns whether it wants the standard
5775 // message shown. If the project wants the standard message, it gets shown, then the shell calls
5776 // IVsDeleteHierarchyHandler::DeleteItem as usual. The project must show the correct message UI--if
5777 // dwDelItemOps == DELITEMOP_DeleteFromStorage | DELITEMOP_RemoveFromProject, then the message must
5778 // contain buttons for Remove and Delete--and the selected operation must be returned to the shell.
5779 // If the project returns TRUE in pfShowStandardMessage, any value in pdwDelItemOp will be ignored.
5781 // 2) If the selected items belong to multiple projects: the shell build the "reduced" list of items, then
5782 // shows the standard message for multiple project selection, then calls ShowMultiSelDeleteOrRemoveMessage
5783 // on any hierarchy that supports IVsHierarchyDeleteHandler2. At this point, the operation has already been
5784 // chosen (whether Delete or Remove) and the projects are simply confirming the action. If the projects
5785 // allow the operation to continue (by returning FALSE in the pfCancelOperation parameter), the shell then
5786 // calls IVsDeleteHierarchyHandler::DeleteItem as usual.
5789 uuid(uuid_IVsHierarchyDeleteHandler2),
5790 version(1.0),
5791 pointer_default(unique)
5793 interface IVsHierarchyDeleteHandler2 : IUnknown
5795 HRESULT ShowSpecificDeleteRemoveMessage(
5796 [in] DWORD dwDelItemOps, // can be DELITEMOP_DeleteFromStorage | DELITEMOP_RemoveFromProject
5797 [in] ULONG cDelItems, // number of items in rgDelItems
5798 [in, size_is(cDelItems)] VSITEMID rgDelItems[], // array of itemids being deleted from the project
5799 [out] BOOL *pfShowStandardMessage, // set to TRUE to cause shell to ignore pdwDelItemOp and show standard message, else FALSE
5800 [out] VSDELETEITEMOPERATION *pdwDelItemOp); // return DELITEMOP_DeleteFromStorage or DELITEMOP_RemoveFromProject if delete/remove allowed
5801 HRESULT ShowMultiSelDeleteOrRemoveMessage(
5802 [in] VSDELETEITEMOPERATION dwDelItemOp, // can be DELITEMOP_DeleteFromStorage or DELITEMOP_RemoveFromProject
5803 [in] ULONG cDelItems, // number of items in rgDelItems
5804 [in, size_is(cDelItems)] VSITEMID rgDelItems[], // array of itemids being deleted from the project
5805 [out] BOOL *pfCancelOperation); // set to TRUE to cause shell to cancel entire delete/remove operation, else FALSE
5807 // Implemented by the environment (service SID_SVsToolbox). Provides additional functionality
5808 // beyond IVsToolbox[2] defined in vsshell.idl.
5810 uuid(uuid_IVsToolbox3),
5811 version(1.0),
5812 pointer_default(unique)
5814 interface IVsToolbox3 : IUnknown
5816 // Sets a unique ID for the given toolbox tab. Tab names are already required to be unique,
5817 // but may vary based on locale (because they should be localized strings). The ID must be
5818 // locale-invariant. It is recommended that you use the English name of your tab as the tab
5819 // ID, if possible.
5820 HRESULT SetIDOfTab([in] LPCOLESTR lpszTabName, [in] LPCOLESTR lpszTabID);
5822 // Retrieves the unique ID of the given toolbox tab.
5823 HRESULT GetIDOfTab([in] LPCOLESTR lpszTabName, [out] BSTR *pbstrTabID);
5825 // Given a tab ID, returns the localized name.
5826 HRESULT GetTabOfID([in] LPCOLESTR lpszTabID, [out] BSTR *pbstrTabName);
5828 // Returns the unique ID of the "General" tab, so packages that want to select that tab don't
5829 // have to hard-code the ID or attempt to look it up in a resource table.
5830 HRESULT GetGeneralTabID([out] BSTR* pbstrTabID);
5832 // Returns the unique ID for the given item. If the item is not found in the toolbox, an error
5833 // is returned. If the item is found but has no ID, *pbstrID is set to NULL.
5834 HRESULT GetItemID([in] IDataObject* pDO, [out] BSTR* pbstrID);
5836 // Returns the name of the given item. If the item is not found in the toolbox, an error is
5837 // returned.
5838 HRESULT GetItemDisplayName([in] IDataObject* pDO, [out] BSTR* pbstrName);
5840 // Returns the time at which the toolbox contents were last modified in any way. This
5841 // includes reordering and renaming items & tabs in addition to adding and removing them.
5842 HRESULT GetLastModifiedTime([out] SYSTEMTIME *pst);
5846 // Property names used by GetItemTipInfo() to populate the property bag.
5847 const LPCOLESTR lpszToolboxTipFieldName = L"Name";
5848 const LPCOLESTR lpszToolboxTipFieldVersion = L"Version";
5849 const LPCOLESTR lpszToolboxTipFieldCompany = L"Company";
5850 const LPCOLESTR lpszToolboxTipFieldComponentType = L"ComponentType";
5851 const LPCOLESTR lpszToolboxTipFieldDescription = L"Description";
5853 // Implemented by data providers and queried for by the toolbox.
5855 uuid(uuid_IVsToolboxDataProvider2),
5856 version(1.0),
5857 pointer_default(unique)
5859 interface IVsToolboxDataProvider2 : IUnknown
5861 // Returns the GUID of the package to which this data provider belongs.
5862 HRESULT GetPackageGUID([out] GUID* pguidPkg);
5864 // Returns the unique ID of this data provider. This is an arbitrary GUID of your choice
5865 // (i.e., it does not need to be used anywhere else).
5866 HRESULT GetUniqueID([out] GUID* pguidID);
5868 // Returns the human-readable (localized) name of this provider.
5869 HRESULT GetDisplayName([out] BSTR* pbstrName);
5871 // The data provider can set the content of an item's tip window by calling pStrings->Write().
5872 // The following strings are recognized:
5873 // "Name", which is displayed in bold.
5874 // "Version", which should be a series of numbers separated by periods (e.g. "1.2.34").
5875 // "Company".
5876 // "ComponentType", which should be something like "Managed .NET Control" or "COM Component".
5877 // "Description", which should be one or two sentences, on the order of 100 characters.
5878 // Any, all, or none of these strings may be supplied. lpszCurrentName is the current display
5879 // name of the item as it exists on the toolbox (which may be different from its original name
5880 // if the user has renamed it). The provider may want to set the "Name" field to a different
5881 // value of its choosing, but in most cases "Name" should be set to lpszCurrentName.
5882 HRESULT GetItemTipInfo([in] IDataObject *pDO, [in] LPCOLESTR lpszCurrentName, [in] IPropertyBag *pStrings);
5884 // This string contains any extra information needed to reconstruct the item on import from a
5885 // profile. The data must be portable and non-localized so that it can be transferred between
5886 // instances of VS in a profile. The data does not need to be sufficient to install the
5887 // control on the system, but it should be sufficient to identify the control and add it to the
5888 // toolbox if it is already installed on the system.
5889 HRESULT GetProfileData([in] IDataObject *pDO, [out] BSTR *pbstrData);
5891 // Given a data object, returns a unique ID. This should be a relatively short string that can
5892 // be used to identify the item in a locale-independent manner. If possible, you should use
5893 // the English name of the item as the unique ID.
5894 HRESULT GetItemID([in] IDataObject *pDO, [out] BSTR *pbstrID);
5896 // Recreates an item that was stored in a profile. Each data provider should be able to
5897 // recreate any type of item it knows about. If a profile contains an item that no currently
5898 // installed data provider is able to successfully recreate, it is assumed that either the
5899 // item is a control not installed on the current system, or that the data provider that would
5900 // normally know about that control has not been installed on the system. In either case, the
5901 // item is not imported from the profile.
5902 HRESULT ReconstituteItem([in] LPCOLESTR lpszCurrentName, [in] LPCOLESTR lpszID, [in] LPCOLESTR lpszData, [out] IDataObject **ppDO, [out] TBXITEMINFO *ptif);
5905 //----------------------------------------------------------------------------
5906 // interface IVsResourceManager
5907 //----------------------------------------------------------------------------
5908 // Implemented by the Environment.
5909 // This is a service to load managed and unmanaged resources from Satellite DLLs.
5910 // If no specific LCID is desired for the culture, a value of 0 will select the LCID that the user selected when the application was executed.
5911 // This interface should not be used in a background thread.
5913 uuid(uuid_IVsResourceManager),
5914 version(1.0),
5915 pointer_default(unique)
5917 interface IVsResourceManager : IUnknown
5919 HRESULT LoadResourceString([in] REFGUID guidPackage, [in] int culture, [in, string] LPCOLESTR pszResourceName, [out, retval] BSTR *pbstrValue);
5920 [local] HRESULT LoadResourceBitmap([in] REFGUID guidPackage, [in] int culture, [in, string] LPCOLESTR pszResourceName, [out, retval] HBITMAP *hbmpValue);
5921 [local] HRESULT LoadResourceIcon([in] REFGUID guidPackage, [in] int culture, [in, string] LPCOLESTR pszResourceName, [in] int cx, [in] int cy, [out, retval] HICON *hicoValue);
5922 // The format of the name of a blob resource is "ID:FORM" where ID is the resource ID. In a native resource,
5923 // the 'FORM' is used to identify the category of resource. In a managed resource the 'FORM' of the data is not used.
5924 // Ex: "101:RT_BITMAP"
5925 // Ex: "401:MYCUSTOMDATA"
5926 // The buffer returned by LoadResourceBlob is allocated by CoTaskMemAlloc and must be freed by the caller with CoTaskMemFree.
5927 HRESULT LoadResourceBlob([in] REFGUID guidPackage, [in] int culture, [in, string] LPCOLESTR pszResourceName, [out] BYTE **pBytes, [out] long *lAllocated);
5929 HRESULT LoadResourceString2([in, string] LPCOLESTR pszAssemblyPath, [in] int culture, [in, string] LPCOLESTR pszResourceName, [out, retval] BSTR *pbstrValue);
5930 [local] HRESULT LoadResourceBitmap2([in, string] LPCOLESTR pszAssemblyPath, [in] int culture, [in, string] LPCOLESTR szResourceName, [out, retval] HBITMAP *hbmpValue);
5931 [local] HRESULT LoadResourceIcon2([in, string] LPCOLESTR pszAssemblyPath, [in] int culture, [in, string] LPCOLESTR pszResourceName, [in] int cx, [in] int cy, [out, retval] HICON *hicoValue);
5932 // The buffer returned by LoadResourceBlob2 is allocated by CoTaskMemAlloc and must be freed by the caller with CoTaskMemFree.
5933 HRESULT LoadResourceBlob2([in, string] LPCOLESTR pszAssemblyPath, [in] int culture, [in, string] LPCOLESTR pszResourceName, [out] BYTE **pBytes, [out] long *lAllocated);
5935 HRESULT GetSatelliteAssemblyPath([in, string] LPCOLESTR assemblyPath, [in] int lcid, [out, retval] BSTR *pbstrPath);
5938 // declare the service type for interop
5939 [uuid(uuid_SVsResourceManager)]
5940 interface SVsResourceManager : IUnknown {}
5942 cpp_quote("#define SID_SVsResourceManager IID_SVsResourceManager")
5944 //---------------------------------------------------------------------------
5945 // IVsAddNewWebProjectItemDlg
5946 //---------------------------------------------------------------------------
5947 // Implemented by the Environment and can be QI'd from the SID_SVsAddProjectItemDlg
5948 // service. Used by web project implementations to display the AddItem dialog with
5949 // only a listview control and specific web related controls. This version implicitly
5950 // sets the following VSADDITEMFLAGS - the remainder can be assumed to be reset:
5951 // When the user presses OK, the dialog will QI the IVsProject interface for IVsWebProject
5952 // and will call IVsWebProjet::AddItem
5953 //VSADDITEM_SuggestTemplateName = 0x00000008, // suggest template name for item
5954 //VSADDITEM_AddNewItems = 0x00000100, // use the Add New Item dialog (mutually exclusive with VSADDITEM_AddExistingItems)
5955 //VSADDITEM_AllowHiddenTreeView = 0x00020000, // allow tree view to be hidden if only one template node present
5957 // These flags can be passed as an input parameter to the dialog to preset these
5958 // options (only valid if lpszSelect is set to some value). They also passed to
5959 // IVsWebProject::AddNewWebItem() when the user clicks OK.
5960 enum __VSADDNEWWEBITEMOPTIONS
5962 VSADDWEBITEM_SelectMaster = 0x00000001, // Set if "Select master page" is checked
5963 VSADDWEBITEM_SeparateCodeFile = 0x00000002, // Set if "Place code in separate disable the item name field
5964 VSADDWEBITEM_SelectMasterIsValid = 0x80000000, // Set if the SelectMaster valid is valid for the selected template
5965 VSADDWEBITEM_SeparateCodeFileIsValid = 0x40000000, // Set if the SeparateCodeFile is valid for the selected template
5966 VSADDWEBITEM_IsValidMask = 0xF0000000, // Masks the IsValid bits
5968 typedef DWORD VSADDNEWWEBITEMOPTIONS;
5971 uuid(uuid_IVsAddNewWebProjectItemDlg),
5972 version(1.0),
5973 pointer_default(unique)
5975 interface IVsAddNewWebProjectItemDlg : IUnknown
5977 HRESULT AddNewWebProjectItemDlg(
5978 [in] VSITEMID itemidLoc, // item to add into
5979 [in] REFGUID rguidProject, // guid of project
5980 [in] IVsProject *pProject, // project interface
5981 [in] LPCOLESTR pszDlgTitle, // Dialog caption (can be null)
5982 [in] LPCOLESTR lpszHelpTopic, // name of help topic (NULL == "vs.add[new|existing]item")
5983 [in] LPCOLESTR lpszLanguage, // directory (language) to select by default
5984 [in] LPCOLESTR lpszSelect, // item to select
5985 [in] VSADDNEWWEBITEMOPTIONS options); // options to set on the dialog
5988 //----------------------------------------------------------------------------
5989 // IVsWebProject
5990 //----------------------------------------------------------------------------
5991 // Implemented by web project objects that want to use the IVsAddWebProjectItemDlg.
5992 // Interface retrieved by QI from IVsHierarchy\IVsProject
5995 uuid(uuid_IVsWebProject),
5996 version(1.0),
5997 pointer_default(unique)
5999 interface IVsWebProject : IUnknown
6001 HRESULT AddNewWebItem([in] VSITEMID itemidLoc, // Folder to add the item to
6002 [in] VSADDITEMOPERATION dwAddItemOperation, // Add item operation: only VSADDITEMOP_CLONEFILE and
6003 // VSADDITEMOP_RUNWIZARD are valid
6004 [in] LPCOLESTR pszItemName, // Name of the item
6005 [in] LPCOLESTR pszFileTemplate, // Path to the template the user selected
6006 [in] VSADDNEWWEBITEMOPTIONS options, // The options checked on the dialog for the item
6007 [in] LPCOLESTR pszSelectedLanguage, // String selected from the languages dropdown (can be null)
6008 [in] HWND hwndDlgOwner,
6009 [out, retval] VSADDRESULT * pResult);
6012 //----------------------------------------------------------------------------
6013 // IVsUIHierarchyWindow2
6014 //----------------------------------------------------------------------------
6015 // Expands IVsUIHierarchyWindow
6017 enum __VSHIERITEMATTRIBUTE
6019 VSHIERITEMATTRIBUTE_Bold = 1,
6021 typedef DWORD VSHIERITEMATTRIBUTE;
6025 uuid(uuid_IVsUIHierarchyWindow2),
6026 version(1.0),
6027 pointer_default(unique)
6029 interface IVsUIHierarchyWindow2 : IVsUIHierarchyWindow
6031 HRESULT SetItemAttribute([in] IVsUIHierarchy* pUIH, [in] VSITEMID itemid, [in] VSHIERITEMATTRIBUTE attribute, [in] VARIANT value);
6035 //----------------------------------------------------------------------------
6036 // IVsProjectDataConnection
6037 //----------------------------------------------------------------------------
6038 // Debugger will use it to get the project DB connection
6041 uuid(uuid_IVsProjectDataConnection),
6042 version(1.0),
6043 pointer_default(unique)
6045 interface IVsProjectDataConnection : IUnknown
6047 HRESULT GetProjectSqlConnection([out] IUnknown **pConnection);
6053 interface IVsTaskProvider3;
6054 interface IVsTaskItem3;
6056 // Scrolling behavior for IVsTaskList2.SelectItems.
6057 typedef enum __tagVSTASKLISTSELECTIONSCROLLPOS
6059 TSSP_NOSCROLL = 0, // Don't scroll the tasklist at all.
6060 TSSP_CENTERCARET = 1, // Position the caret item in the center.
6061 TSSP_CARETATTOP = 2, // Position the caret item at the top (first visible item).
6062 TSSP_CARETATBOTTOM = 3, // Position the caret item at the bottom (last visible item).
6063 TSSP_MINSCROLL = 4, // Scroll the minimum distance required for the caret item to be visible.
6064 TSSP_SHOWALL = 5, // Show the caret item and as many of the other selected items as possible.
6065 } __VSTASKLISTSELECTIONSCROLLPOS;
6067 typedef DWORD VSTASKLISTSELECTIONSCROLLPOS;
6069 // Selection behavior for IVsTaskList2.SelectItems.
6070 typedef enum __tagVSTASKLISTSELECTIONTYPE
6072 TST_REPLACESEL = 0, // Any previously selected items will be unselected before the new selection is applied.
6073 TST_EXTENDSEL = 1, // The selection will be extended from the current caret item to include the new selection, as if the user had shift+clicked.
6074 TST_ADDTOSEL = 2, // The new items will be individually added to the previous selection, as if the user had ctrl+clicked.
6075 } __VSTASKLISTSELECTIONTYPE;
6077 typedef DWORD VSTASKLISTSELECTIONTYPE;
6080 // Implemented by the shell. QI between IVsTaskList and IVsTaskList2 (in either direction) is
6081 // guaranteed to succeed.
6083 uuid(uuid_IVsTaskList2),
6084 version(1.0),
6085 pointer_default(unique)
6087 interface IVsTaskList2 : IUnknown
6089 // --------------------------------------------------------------------------------------------
6090 // Selection methods: in order to handle commands, the task providers will need to know which
6091 // tasks are currently selected.
6093 // Returns the count of selected items, which may be anywhere from zero to the total count of
6094 // items in the task list.
6095 HRESULT GetSelectionCount([out] int* pnItems);
6097 // Returns the item that currently has the caret. This item is always among the selected
6098 // items. If no item has the caret, this method will return NULL.
6099 HRESULT GetCaretPos([out] IVsTaskItem** ppItem);
6101 // Returns an enumerator that will enumerate all the selected items, in order from last
6102 // selected to first selected.
6103 HRESULT EnumSelectedItems([out] IVsEnumTaskItems** ppEnum);
6105 // Selects zero or more items. Pass in zero for nItems to remove the selection entirely.
6106 // All non-filtered items in pItems will be selected and the last one will become the caret
6107 // item. Filtered items are ignored.
6108 HRESULT SelectItems([in] int nItems, [in, size_is(nItems)] IVsTaskItem* pItems[], [in] VSTASKLISTSELECTIONTYPE tsfSelType, [in] VSTASKLISTSELECTIONSCROLLPOS tsspScrollPos);
6110 // --------------------------------------------------------------------------------------------
6112 // Scrolls if necessary to make the task visible, selects it, and enters edit mode with the
6113 // focus on the specified field. If the task does not belong to the active provider or the
6114 // specified field is not a visible, editable field, the method will fail.
6115 HRESULT BeginTaskEdit([in] IVsTaskItem* pItem, [in] int iFocusField);
6117 // Returns the currently active task provider.
6118 HRESULT GetActiveProvider([out] IVsTaskProvider** ppProvider);
6120 // Selects the provider currently displayed in the tasklist. NOTE: this should not be done
6121 // automatically (e.g. in response to a build or run action), but only when explicitly
6122 // requested by the user. Users get annoyed when we switch things like this automatically.
6123 HRESULT SetActiveProvider([in] REFGUID rguidProvider);
6125 // --------------------------------------------------------------------------------------------
6126 // Task management
6128 // Refreshes all cached information for the given tasks. Tasks which do not yet exist in the
6129 // list will be added.
6130 HRESULT RefreshOrAddTasks([in] VSCOOKIE vsProviderCookie, [in] int nTasks, [in, size_is(nTasks)] IVsTaskItem* prgTasks[]);
6132 // Removes the given tasks from the tasklist.
6133 HRESULT RemoveTasks([in] VSCOOKIE vsProviderCookie, [in] int nTasks, [in, size_is(nTasks)] IVsTaskItem* prgTasks[]);
6135 // Refreshes all tasks from all registered providers. This is a potentially time-consuming
6136 // operation.
6137 HRESULT RefreshAllProviders();
6140 // Column definition returned from IVsTaskProvider3.GetColumn.
6141 typedef struct _VSTASKCOLUMN
6143 int iField; // Field index designated by the task provider.
6144 BSTR bstrHeading; // Text in header. May be NULL to indicate an image.
6145 int iImage; // Image in header (an index into the provider's image list). Only used if bstrHeading == NULL.
6146 BOOL fShowSortArrow; // Whether a sort arrow is shown in the header when the list is sorted by this column.
6147 BOOL fAllowUserSort; // Whether the user is allowed to sort by clicking on this column's header.
6148 BOOL fVisibleByDefault; // Whether this column is visible by default.
6149 BOOL fAllowHide; // Whether the user is allowed to change this column's visibility.
6150 BOOL fSizeable; // Whether the column may be resized by the user.
6151 BOOL fMoveable; // Whether the column may be dragged to another position by the user.
6152 int iDefaultSortPriority; // Priority value (0 is first, then 1, 2, ...) if this column is sorted by default; -1 otherwise.
6153 BOOL fDescendingSort; // Sort in descending order (default is ascending).
6154 int cxMinWidth; // The minimum column width, in pixels. Only used if fSizeable or fDynamicSize is set.
6155 int cxDefaultWidth; // The default column width, in pixels.
6156 BOOL fDynamicSize; // Whether the task list is allowed to resize the column automatically to make content fit better.
6157 BSTR bstrCanonicalName; // Non-localized name, must be unique within this provider's column list.
6158 BSTR bstrLocalizedName; // Localized name for human consumption.
6159 BSTR bstrTip; // Tooltip for column header.
6160 BOOL fFitContent; // Column will be automatically resized to fit whenever its content changes.
6161 } VSTASKCOLUMN;
6163 // Value flags returned by IVsTaskProvider3.GetProviderFlags.
6164 enum __VSTASKPROVIDERFLAGS
6166 TPF_ALWAYSVISIBLE = 0x00000001, // Provider is always visible in dropdown even if it has no tasks.
6167 TPF_NOAUTOROUTING = 0x00000002, // Don't automatically route this provider's tasks to predefined buckets based on their categories.
6169 typedef DWORD VSTASKPROVIDERFLAGS;
6171 // Predefined provider GUIDs that may be returned by IVsTaskProvider3.GetSurrogateProviderGUID or
6172 // IVsTaskItem3.GetSurrogateProviderGUID.
6174 // {5A2D2729-ADFF-4a2e-A44F-55EBBF5DF64B}
6175 cpp_quote("DEFINE_GUID(GUID_Comment_TaskProvider, 0x5a2d2729, 0xadff, 0x4a2e, 0xa4, 0x4f, 0x55, 0xeb, 0xbf, 0x5d, 0xf6, 0x4b);")
6177 #ifdef INTEROPLIB
6178 module TaskProviderGuids
6180 const LPSTR Comments = "{5A2D2729-ADFF-4a2e-A44F-55EBBF5DF64B}";
6182 #endif // INTEROPLIB
6184 // Implemented by packages that add content to the task list. Implementors of IVsTaskProvider3
6185 // MUST also implement IVsTaskProvider, but the reverse is not true. Also, if you implement this
6186 // interface, your tasks must implement IVsTaskItem3.
6188 uuid(uuid_IVsTaskProvider3),
6189 version(1.0),
6190 pointer_default(unique)
6192 interface IVsTaskProvider3 : IUnknown
6194 // Returns the behavior flags for this provider.
6195 HRESULT GetProviderFlags([out] VSTASKPROVIDERFLAGS* tpfFlags);
6197 // Returns a localized human-readable name for this data provider.
6198 HRESULT GetProviderName([out] BSTR* pbstrName);
6200 // Returns a unique ID for this provider. This is used to persist & restore per-provider
6201 // data managed by the task list, such as user customizations of column width & order. If it
6202 // is not practical to assign a GUID to this provider (e.g. the provider is dynamically created
6203 // at run-time and the identity cannot be preserved across VS sessions), you may return
6204 // GUID_NULL. However, you should be aware that certain functionality (such as UI settings
6205 // persistence and the IVsTaskList2.SetActiveProvider method) will not work in that case.
6206 HRESULT GetProviderGuid([out] GUID* pguidProvider);
6208 // If a provider implements this method, all its tasks will be listed under the surrogate
6209 // provider in the list, as if they belong to the surrogate provider.
6210 HRESULT GetSurrogateProviderGuid([out] GUID* pguidProvider);
6212 // Returns a group GUID and toolbar ID indicating which toolbar should be displayed when this
6213 // provider is active. Set pguidGroup and pdwID to GUID_NULL and 0, respectively, to indicate
6214 // that this provider has no toolbar. If you do provide a toolbar, you must include the
6215 // provider dropdown as the first group, by including this line in your CTC file:
6216 // guidSHLMainMenu:IDG_VS_TASKLIST_PROVIDERLIST, <your toolbar's group>:<your toolbar menu ID>, 0x0100;
6217 // See vscommon\appid\inc\ShellCmdPlace.ctc for examples.
6218 HRESULT GetProviderToolbar([out] GUID* pguidGroup, [out] DWORD* pdwID);
6220 // --------------------------------------------------------------------------------------------
6221 // Column methods: this is where the task provider defines its columns and their attributes.
6223 // Returns the total number of columns supported by this provider, including columns that are
6224 // not visible by default.
6225 HRESULT GetColumnCount([out] int* pnColumns);
6227 // Gets the definition of an indexed column (0 <= iColumn < nColumns).
6228 HRESULT GetColumn([in] int iColumn, [out] VSTASKCOLUMN* pColumn);
6230 // --------------------------------------------------------------------------------------------
6231 // Events
6233 // Called when the user begins editing a task in-place. Providers may want to avoid scrolling
6234 // the tasklist or changing the selection during editing, since these actions can force in-
6235 // place edit mode to be canceled abruptly.
6236 HRESULT OnBeginTaskEdit([in] IVsTaskItem* pItem);
6238 // Called when the user finishes editing a task in-place. fCommitChanges indicates whether the
6239 // user chose to commit the changes or discard them. This method may set *pfAllowChanges to
6240 // FALSE to disallow the user from exiting edit mode. If fCommitChanges is TRUE, the changes
6241 // will have already been persisted down to the task item.
6242 HRESULT OnEndTaskEdit([in] IVsTaskItem* pItem, [in] BOOL fCommitChanges, [out] BOOL* pfAllowChanges);
6245 // Value types returned by IVsTaskItem3.GetColumnValue.
6246 typedef enum __tagVSTASKVALUETYPE
6248 TVT_NULL = 0,
6249 TVT_TEXT = 1, // Arbitrary text.
6250 TVT_LINKTEXT = 2, // Text with underlined links displayed between '@' characters (the delimiters are not displayed).
6251 TVT_BASE10 = 3, // A number displayed in decimal notation.
6252 TVT_IMAGE = 4, // An indexed image in the image list provided by the task provider.
6253 } __VSTASKVALUETYPE;
6255 typedef DWORD VSTASKVALUETYPE;
6257 // Value flags returned by IVsTaskItem3.GetColumnValue.
6258 enum __VSTASKVALUEFLAGS
6260 TVF_EDITABLE = 0x00000001, // This value can be changed by the user.
6261 TVF_ENUM = 0x00000002, // The value is not arbitrary, but may only be one of a limited set of strings provided by the task item.
6262 TVF_BINARY_STATE = 0x00000004, // This is an enum with only two possible states. The user can switch the state by a similar UI action to clicking a checkbox.
6263 TVF_HORZ_RIGHT = 0x00000008, // The value is aligned against the right edge of the column.
6264 TVF_HORZ_CENTER = 0x00000010, // The value is horizontally centered in the column.
6265 TVF_STRIKETHROUGH = 0x00000020, // The value is drawn with a strikethrough font style.
6266 TVF_FILENAME = 0x00000040, // This textual value will be treated as a file name.
6268 typedef DWORD VSTASKVALUEFLAGS;
6270 // Task item interface for new column-agnostic architecture. Implementors of this interface MUST
6271 // also implement IVsTaskItem, but only the following methods will be used:
6272 // CanDelete
6273 // HasHelp
6274 // NavigateTo
6275 // NavigateToHelp
6276 // OnFilterTask
6277 // OnDeleteTask
6278 // All others are obsolete when IVsTaskItem3 is implemented.
6280 uuid(uuid_IVsTaskItem3),
6281 version(1.0),
6282 pointer_default(unique)
6284 interface IVsTaskItem3 : IUnknown
6286 // Gets the provider that owns this item.
6287 HRESULT GetTaskProvider([out] IVsTaskProvider3** ppProvider);
6289 // Returns a string naming or describing the task. Used for accessibiity.
6290 HRESULT GetTaskName([out] BSTR* pbstrName);
6292 // --------------------------------------------------------------------------------------------
6293 // Column methods: these allow each task to define a value for each column.
6295 // Returns the value of this task for a given column. If *ptvtType == TVT_IMAGE, pvarValue is
6296 // interpreted as a numeric index into the imagelist provided by the task provider.
6297 // pbstrAccessibilityName is the descriptive text exposed to accessibility for this value. If
6298 // *ptvtType != TVT_IMAGE, it may be left blank; in that case, the text of the value itself
6299 // will be used.
6300 HRESULT GetColumnValue([in] int iField, [out] VSTASKVALUETYPE* ptvtType, [out] VSTASKVALUEFLAGS* ptvfFlags, [out] VARIANT* pvarValue, [out] BSTR* pbstrAccessibilityName);
6302 // Returns the tip text for the given field. If this method fails or returns an empty string,
6303 // the task list will use the text of the item itself (if any) or the accessibility name as the
6304 // tip text.
6305 HRESULT GetTipText([in] int iField, [out] BSTR* pbstrTipText);
6307 // When the user edits a task, this method is called for each edited column once the edit is
6308 // committed. The type of pvarValue will be the same as the type returned from GetColumnValue.
6309 HRESULT SetColumnValue([in] int iField, [in] VARIANT* pvarValue);
6311 // During a call to IVsTaskList.RefreshTasks, the task item's values will be re-queried unless
6312 // this method returns FALSE.
6313 HRESULT IsDirty([out] BOOL* pfDirty);
6315 // --------------------------------------------------------------------------------------------
6316 // Enum methods: for values that may be set to a limited number of defined values. For
6317 // example, a "Priority" value might only allow "high", "medium", and "low".
6319 // Given a column field, returns the number of possible values this task may have for that
6320 // column.
6321 HRESULT GetEnumCount([in] int iField, [out] int* pnValues);
6323 // Given a column field and value index, returns the indexed value for this task and column.
6324 // pbstrAccessibilityName is the descriptive text exposed to accessibility for this value. If
6325 // *ptvtType != TVT_IMAGE, it may be left blank; in that case, the text of the value itself
6326 // will be used.
6327 HRESULT GetEnumValue([in] int iField, [in] int iValue, [out] VARIANT* pvarValue, [out] BSTR* pbstrAccessibilityName);
6329 // --------------------------------------------------------------------------------------------
6330 // Events
6332 // If the user clicks on an underlined link in a value of type TVT_LINKTEXT, this method is
6333 // called with the column field and the link index (the first link in a given value is link 0).
6334 // The task item should take whatever action is appropriate.
6335 HRESULT OnLinkClicked([in] int iField, [in] int iLinkIndex);
6337 // --------------------------------------------------------------------------------------------
6339 // This method returns the text that will be placed on the status bar when the task is
6340 // successfully navigated to.
6341 HRESULT GetNavigationStatusText([out] BSTR* pbstrText);
6343 // If the user starts editing the task in a way that does not select a specific field, this
6344 // method specifies the field in which editing will begin.
6345 HRESULT GetDefaultEditField([out] int* piField);
6347 // If the task implements this method, it will be listed under the surrogate provider in the
6348 // list, as if it belongs to the surrogate provider. This overrides the surrogate provider
6349 // specified by IVsTaskProvider.GetSurrogateProviderGuid, if any.
6350 HRESULT GetSurrogateProviderGuid([out] GUID* pguidProvider);
6353 // Implemented by the shell. This interface contains additional methods for the new Build Error
6354 // List, which also implements IVsTaskList.
6356 uuid(uuid_IVsErrorList),
6357 version(1.0),
6358 pointer_default(unique)
6360 interface IVsErrorList : IUnknown
6362 // Activates the window and makes it visible.
6363 HRESULT BringToFront();
6365 // Forces the error toggle "on", so that errors are visible in the list. Warnings and
6366 // informational messages are not affected.
6367 HRESULT ForceShowErrors();
6371 uuid(uuid_SVsErrorList)
6373 interface SVsErrorList : IUnknown
6376 cpp_quote("#define SID_SVsErrorList IID_SVsErrorList")
6378 // GUIDs used in calling IVsShell::CreateToolWindow()
6379 cpp_quote("extern const __declspec(selectany) GUID GUID_ErrorList = { 0xd78612c7, 0x9962, 0x4b83, { 0x95, 0xd9, 0x26, 0x80, 0x46, 0xda, 0xd2, 0x3a } };")
6380 cpp_quote("extern const __declspec(selectany) GUID GUID_PropertySheetManager = { 0x6B8E94B5, 0x0949, 0x4d9c, { 0xA8, 0x1F, 0xC1, 0xB9, 0xB7, 0x44, 0x18, 0x5C} };")
6381 cpp_quote("extern const __declspec(selectany) GUID GUID_CodeDefWin = { 0x588470cc, 0x84f8, 0x4a57, { 0x9a, 0xc4, 0x86, 0xbc, 0xa0, 0x62, 0x5f, 0xf4 } };")
6384 // Error item types returned by IVsErrorItem.GetCategory.
6385 typedef enum __tagVSERRORCATEGORY
6387 EC_ERROR = 0,
6388 EC_WARNING = 1,
6389 EC_MESSAGE = 2,
6390 } __VSERRORCATEGORY;
6392 typedef DWORD VSERRORCATEGORY;
6395 // Implemented by error list items (in addition to IVsTaskItem).
6397 uuid(uuid_IVsErrorItem),
6398 version(1.0),
6399 pointer_default(unique)
6401 interface IVsErrorItem : IUnknown
6403 // If this error item corresponds to a hierarchy item (e.g. a file in a project), this method
6404 // returns the hierarchy to which it belongs.
6405 HRESULT GetHierarchy([out] IVsHierarchy** ppProject);
6407 // Returns the category of this item: error, warning, or informational message.
6408 HRESULT GetCategory([out] VSERRORCATEGORY* pCategory);
6413 uuid(uuid_IVsWindowPaneCommitFilter),
6414 version(1.0),
6415 pointer_default(unique)
6417 interface IVsWindowPaneCommitFilter : IUnknown
6419 HRESULT IsCommitCommand([in] REFGUID pguidCmdGroup, [in] DWORD dwCmdID, [out] BOOL *pfCommitCommand);
6422 //-----------------------------------------------------------------------------
6423 // IPreferPropertyPagesWithTreeControl
6424 //-----------------------------------------------------------------------------
6425 // Implemented by a Browse object that also implements ISpecifyPropertyPages.
6426 // If this interface is supported then the Property Page Frame will display
6427 // a tree control instead of tabs to allow switching between the different
6428 // property pages.
6430 uuid(uuid_IPreferPropertyPagesWithTreeControl),
6431 version(1.0),
6432 pointer_default(unique)
6434 interface IPreferPropertyPagesWithTreeControl : IUnknown
6438 //-----------------------------------------------------------------------------
6439 // IVsSpecifyProjectDesignerPages
6440 //-----------------------------------------------------------------------------
6441 // Implemented by a project system that supports editing Project Properties via
6442 // an editor (referred to as a Project Designer) instead of via Property Pages
6443 // displayed in the PropertyPage Frame. Such a project never wants its Project
6444 // Property Pages to appear in the PropertyPage Frame. This is accomplished by
6445 // deliberately not implementing ISpecifyPropertyPages interface on the Browse
6446 // object of the Project (as returned by VSHPROPID_BrowseObject) and its
6447 // configuration Browse objects. This interface is identical in shape to
6448 // the standard ISpecifyPropertyPages interface but has a different IID. This
6449 // interface should be implemented on the Browse object of the Project
6450 // and its configuration Browse objects that want to offer PropertyPages to their
6451 // project specific Project Designer (assuming that it wants to use IPropertyPages
6452 // as part of its implementation).
6453 // A project that uses a Project Designer will implement the following properties:
6454 // VSHPROPID_SupportsProjectDesigner (BOOL) -- return VARIANT_TRUE
6455 // VSHPROPID_ProjectDesignerEditor (GUID) -- guid of the Project Designer editor
6456 // A Project Designer is an editor for Project properties that is launched as a document
6457 // associated with the root of the project. The Project Designer Editor is launched via
6458 // the following call:
6459 // pIVsProject2->ReopenItem(VSITEMID_ROOT, guidProjectDesignerEditor, L"",
6460 // clsidInitialPage, DOCDATAEXISTING_UNKNOWN, &srpWindowFrame)
6462 // NOTE: The CLSID of the initial IPropertyPage to activate is passed as the
6463 // rguidLogicalView parameter to ReopenItem. If there is no preferred inital page
6464 // then GUID_NULL (same as LOGVIEWID_PRIMARY) is passed. When opening the Project
6465 // Designer document window (e.g. in its implementation of IVsProject2::ReopenItem),
6466 // the project implementation should associate the DocumentWindow with the
6467 // parent IVsHierarchy/parent itemid of its root node (VSHPROPID_ParentHierarchy/
6468 // VSHPROPID_ParentItemid). This will normally be an itemid of the Solution.
6469 // This implementation might look something like:
6470 // if ((itemid == VSITEMID_ROOT) && (rguidEditorType == GUID_ProjectDesignerEditor))
6471 // {
6472 // hr = pVsUIShellOpenDoc->OpenSpecificEditor(0,
6473 // GetProject()->GetProjectFile(),
6474 // GUID_ProjectDesignerEditor,
6475 // NULL,
6476 // rguidLogicalView, // Pass the guid of the property page if you want to change the initial page
6477 // L"%2", // The Project Designer title is just the name if the item in the parent hierarchy.
6478 // m_pParentUIHierarchy,
6479 // m_dwParentHierarchyItemid,
6480 // punkDocDataExisting,
6481 // m_srpServiceProvider,
6482 // &srpWindowFrame);
6483 // ...
6484 // }
6487 uuid(uuid_IVsSpecifyProjectDesignerPages),
6488 version(1.0),
6489 pointer_default(unique)
6491 interface IVsSpecifyProjectDesignerPages : IUnknown
6493 HRESULT GetProjectDesignerPages([out] CAUUID *pPages);
6496 cpp_quote("#define VS_OUTPUTGROUP_CNAME_SGenFiles L\"XmlSerializer\"")
6498 //-----------------------------------------------------------------------------
6499 // IVsDeployDependency2
6500 //-----------------------------------------------------------------------------
6501 // Implemented by a project system that supports producing build outputs.
6502 // These are dependencies of the IVsOutputGroup, required for deployment.
6504 uuid(uuid_IVsDeployDependency2),
6505 version(1.0),
6506 pointer_default(unique)
6508 interface IVsDeployDependency2 : IUnknown
6510 HRESULT get_Property([in] LPCOLESTR szProperty, [out] VARIANT* pvar);
6513 //-----------------------------------------------------------------------------
6514 // IVsOutputGroup2
6515 //-----------------------------------------------------------------------------
6516 // extends IVsOutputGroup, look at vsshell.idl for description of IVsOutputGroup
6518 uuid(uuid_IVsOutputGroup2),
6519 version(1.0),
6520 pointer_default(unique)
6522 interface IVsOutputGroup2 : IVsOutputGroup
6524 HRESULT get_KeyOutputObject([out] IVsOutput2 **ppKeyOutput);
6525 HRESULT get_Property([in] LPCOLESTR pszProperty, [out] VARIANT* pvar);
6528 // Values returned from IVsFontAndColorUtilities.GetColorType.
6529 enum __VSCOLORTYPE
6531 CT_INVALID = 0, // The color is invalid, or not set.
6532 CT_RAW = 1, // This COLORREF is a literal RGB value.
6533 CT_COLORINDEX = 2, // This COLORREF contains an encoded COLORINDEX.
6534 CT_SYSCOLOR = 3, // This COLORREF contains an encoded system color (COLOR_*)
6535 CT_VSCOLOR = 4, // This COLORREF contains an encoded VSCOLOR value.
6536 CT_AUTOMATIC = 5, // This is the "automatic" color.
6537 CT_TRACK_FOREGROUND = 6, // This color is the same as the foreground of another item.
6538 CT_TRACK_BACKGROUND = 7, // This color is the same as the background of another item.
6540 typedef LONG VSCOLORTYPE;
6542 // Values passed to IVsFontAndColorUtilities.EncodeTrackedItem.
6543 enum __VSCOLORASPECT
6545 CA_FOREGROUND = 0,
6546 CA_BACKGROUND = 1,
6548 typedef LONG VSCOLORASPECT;
6550 // Implemented by the environment from service SID_SVsFontAndColorStorage.
6552 uuid(uuid_IVsFontAndColorUtilities),
6553 version(1.0),
6554 pointer_default(unique)
6556 interface IVsFontAndColorUtilities : IUnknown
6558 // Color methods -- these deal with encoding and decoding of indexed color values in a
6559 // COLORREF.
6561 // Returns an encoded value (*not* raw RGB) that represents the given color index.
6562 HRESULT EncodeIndexedColor([in] COLORINDEX idx, [out] COLORREF* pcrResult);
6564 // Returns an encoded value (*not* raw RGB) that represents the given system color. iSysColor
6565 // is a value that would be passed to GetSysColor.
6566 HRESULT EncodeSysColor([in] int iSysColor, [out] COLORREF* pcrResult);
6568 // Returns an encoded value (*not* raw RGB) that represents the given vscolor. vsColor is a
6569 // value that would be passed to IVsShell2.GetVSSysColorEx.
6570 HRESULT EncodeVSColor([in] VSSYSCOLOREX vsColor, [out] COLORREF* pcrResult);
6572 // Returns an encoded value (*not* raw RGB) that represents either the foreground or background
6573 // of a colorable item identified by the given index.
6574 HRESULT EncodeTrackedItem([in] int iItemToTrack, [in] VSCOLORASPECT aspect, [out] COLORREF* pcrResult);
6576 // Returns a color value for which GetColorType will return CT_INVALID.
6577 HRESULT EncodeInvalidColor([out] COLORREF* pcrResult);
6579 // Returns a color value for which GetColorType will return CT_AUTOMATIC.
6580 HRESULT EncodeAutomaticColor([out] COLORREF* pcrResult);
6582 // Given a color value which may be raw RGB or encoded, returns the type of its encoding. The
6583 // high byte of raw RGB values must be zero for this method to operate correctly.
6584 HRESULT GetColorType([in] COLORREF crSource, [out] VSCOLORTYPE* pctType);
6586 // Given an index-encoded color value (as returned from EncodeIndexedColor), returns the color
6587 // index it represents.
6588 HRESULT GetEncodedIndex([in] COLORREF crSource, [out] COLORINDEX* pIdx);
6590 // Given a syscolor-encoded color value (as returned from EncodeSysColor), returns the color
6591 // index it represents.
6592 HRESULT GetEncodedSysColor([in] COLORREF crSource, [out] int* piSysColor);
6594 // Given a vscolor-encoded color value (as returned from EncodeVSColor), returns the color
6595 // index it represents.
6596 HRESULT GetEncodedVSColor([in] COLORREF crSource, [out] VSSYSCOLOREX* pVSColor);
6598 // Given a color value representing an aspect of a colorable item (as returned from
6599 // EncodeTrackedItem), returns the aspect and item index it represents.
6600 HRESULT GetTrackedItemIndex([in] COLORREF crSource, [out] VSCOLORASPECT* pAspect, [out] int* piItem);
6602 // Given a color index (as returned from GetEncodedIndex), returns the raw RGB value it
6603 // represents.
6604 HRESULT GetRGBOfIndex([in] COLORINDEX idx, [out] COLORREF* pcrResult);
6606 // Given a colorable item and its fonts & colors category, returns the raw RGB values for its
6607 // foreground and background.
6608 HRESULT GetRGBOfItem([in] AllColorableItemInfo* pInfo, [in] REFGUID rguidCategory, [out] COLORREF* pcrForeground, [out] COLORREF* pcrBackground);
6610 // Given a (possibly) encoded colorref, decodes it and returns the raw RGB value. crAutoColor
6611 // is only used if crSource is type CT_AUTOMATIC. Likewise, rguidCategory is only used if
6612 // crSource is type CT_TRACK_FOREGROUND or CT_TRACK_BACKGROUND.
6613 HRESULT GetRGBOfEncodedColor([in] COLORREF crSource, [in] COLORREF crAutoColor, [in] REFGUID rguidCategory, [out] COLORREF* pcrResult);
6615 // Font methods.
6617 // Call this after you create a FontInfo structure to initialize its members to default values.
6618 // This is necessary so that when you call FreeFontInfo later, it doesn't try to free an
6619 // uninitialized pointer.
6620 HRESULT InitFontInfo([in, out] FontInfo* pInfo);
6622 // Call this when you're done with a FontInfo structure. This method will free all allocated
6623 // memory and set the fields to default values.
6624 HRESULT FreeFontInfo([in, out] FontInfo* pInfo);
6626 // Call this to copy one FontInfo structure to another. This method takes care of all
6627 // allocations to make sure memory is managed properly. Note that you must call InitFontInfo
6628 // on pDest before calling this method.
6629 HRESULT CopyFontInfo([in, out] FontInfo* pDest, [in] const FontInfo* pSource);
6631 // Item info methods.
6633 // Call this after you create an AllColorableItemInfo structure to initialize its members to
6634 // default values. This is necessary so that when you call FreeItemInfo later, it doesn't try
6635 // to free an uninitialized pointer.
6636 HRESULT InitItemInfo([in, out] AllColorableItemInfo* pInfo);
6638 // Call this when you're done with an AllColorableItemInfo structure. This method will free
6639 // all allocated memory and set the fields to default values.
6640 HRESULT FreeItemInfo([in, out] AllColorableItemInfo* pInfo);
6642 // Call this to copy one AllColorableItemInfo structure to another. This method takes care of
6643 // all allocations to make sure memory is managed properly. Note that you must call
6644 // InitItemInfo on pDest before calling this method.
6645 HRESULT CopyItemInfo([in, out] AllColorableItemInfo* pDest, [in] const AllColorableItemInfo* pSource);
6648 // {1F987C00-E7C4-4869-8A17-23FD602268B0}
6649 cpp_quote("extern const __declspec(selectany) GUID GUID_DialogsAndToolWindowsFC = { 0x1f987c00, 0xe7c4, 0x4869, { 0x8a, 0x17, 0x23, 0xfd, 0x60, 0x22, 0x68, 0xb0 } };")
6651 // {A27B4E24-A735-4d1d-B8E7-9716E1E3D8E0}
6652 cpp_quote("extern const __declspec(selectany) GUID GUID_TextEditorFC = { 0xa27b4e24, 0xa735, 0x4d1d, { 0xb8, 0xe7, 0x97, 0x16, 0xe1, 0xe3, 0xd8, 0xe0 } };")
6654 // Implemented by the environment (QI from IVsOutputWindow).
6656 uuid(uuid_IVsOutputWindow2),
6657 version(1.0),
6658 pointer_default(unique)
6660 interface IVsOutputWindow2 : IUnknown
6662 // Returns the GUID of the currently active pane. Returns GUID_NULL if there is no active
6663 // pane.
6664 HRESULT GetActivePaneGUID([out] GUID* pguidPane);
6667 //-----------------------------------------------------------------------------
6668 // IVsDebuggableProjectCfg2
6669 //-----------------------------------------------------------------------------
6670 // Implemented by a project system that supports Debug Launch (F5 command). The
6671 // additional method BeforeDebugLaunch provides additional support for project
6672 // systems that require notification prior to the actual call to DebugLaunch()
6673 // to start debugging.
6675 // At debug start time, solution build manager calls OnBeforeLaunch on each project
6676 // that supports this interface first. Then it iterates through all the projecs
6677 // again to do the actual call to IVsDebuggableProjectCfg::DebugLaunch.
6679 // Project systems are not required to support this interface. If they do not
6680 // the solution build manager will still call IVsDebuggableProjectCfg::DebugLaunch.
6682 // The VB, C# and J# project systems use this method as part of their
6683 // implementation of the hosting process. At DebugLaunch time in a multi-start scenario it is
6684 // possible the hosting process is stopped at a debugger event and it cannot answer
6685 // RPC calls. As a result, the VB, C# and J# project systems require this OnBeforeDebugLaunch
6686 // notification in advance to make any required RPC calls to the hosting process before
6687 // the process(es) are stopped in the debugger.
6690 uuid(uuid_IVsDebuggableProjectCfg2),
6691 version(1.0),
6692 pointer_default(unique)
6694 interface IVsDebuggableProjectCfg2 : IVsDebuggableProjectCfg
6696 HRESULT OnBeforeDebugLaunch([in] VSDBGLAUNCHFLAGS grfLaunch);
6700 // IVsProvideUserContext2
6702 // This interface allows an object to expose a user context together with
6703 // a priority. Its use is an extensibility point with the new SEID "Elements
6704 // of Selection." For any element of selection added by third-parties, when
6705 // its corresponding value changes, the application context will be updated
6706 // with the context that is retrieved from this interface on that value. The
6707 // context system will attempt to QI the new value for this interface, as well
6708 // as IVsProvideUserContext and IVsUserContext.
6710 uuid(uuid_IVsProvideUserContext2),
6711 object,
6712 version(1.0)
6714 interface IVsProvideUserContext2 : IUnknown
6716 // retrieve an IVsUserContext from the object, together with a hint about what
6717 // the priority of the contents are. the valid values for iPriority are given
6718 // in context.idl: VSUC_Priority_None through VSUC_Priority_Highest.
6719 HRESULT GetUserContextEx([out] IVsUserContext ** ppctx, [out] int * iPriority);
6723 ////-----------------------------------------------------------------------------
6724 //// IVsExtensibility3
6725 ////-----------------------------------------------------------------------------
6726 //// This interface defn looks like a merging of IVsExtensibility & IVsExtensibility,
6727 //// then placed here because those two interfaces have the IDL attribute restricted.
6728 //// That attribute keeps this interface from appearing in the PIAs, and therefore
6729 //// you cannot call it from managed code. Duplicating this here will make the
6730 //// interface appear in the IAs for VSIP, and callable from managed code.
6732 uuid(uuid_IVsExtensibility3),
6733 version(1.0),
6734 pointer_default(unique)
6736 interface IVsExtensibility3 : IUnknown
6738 [id(1)] HRESULT GetProperties([in] IUnknown *pParent, [in] IDispatch *pdispPropObj, [out] IDispatch **ppProperties);
6739 [id(2)] HRESULT RunWizardFile([in] BSTR bstrWizFilename, [in] long hwndOwner, [in] SAFEARRAY (VARIANT)* vContextParams, [out, retval] long *pResult);
6740 //[id(3)] HRESULT Get_TextBuffer([in] IUnknown *pVsTextStream, [in] IUnknown *pParent, [out, retval] IUnknown **ppTextBuffer);
6741 [id(4)] HRESULT EnterAutomationFunction(void);
6742 [id(5)] HRESULT ExitAutomationFunction(void);
6743 [id(6)] HRESULT IsInAutomationFunction([out, retval] BOOL *pfInAutoFunc);
6744 [id(7)] HRESULT GetUserControl([out] VARIANT_BOOL *fUserControl);
6745 [id(8)] HRESULT SetUserControl([in] VARIANT_BOOL fUserControl);
6746 [id(9)] HRESULT SetUserControlUnlatched([in] VARIANT_BOOL fUserControl);
6747 [id(10)] HRESULT LockServer([in] VARIANT_BOOL);
6748 [id(11)] HRESULT GetLockCount([out, retval] long *pCount);
6749 [id(12)] HRESULT TestForShutdown([out, retval] VARIANT_BOOL *fShutdown);
6750 [id(13)] HRESULT GetGlobalsObject([in] VARIANT ExtractFrom, [out, retval] IUnknown **ppGlobals);
6751 [id(14)] HRESULT GetConfigMgr([in] IUnknown *pIVsProject, [in] DWORD_PTR itemid, [out, retval] IUnknown **ppCfgMgr);
6752 [id(16)] HRESULT FireMacroReset();
6753 [id(17)] HRESULT GetDocumentFromDocCookie([in] LONG_PTR lDocCookie, [out, retval] IUnknown **ppDoc);
6754 [id(18)] HRESULT IsMethodDisabled([in] const GUID *pGUID, [in] long dispid);
6755 [id(19)] HRESULT SetSuppressUI([in] VARIANT_BOOL In);
6756 [id(20)] HRESULT GetSuppressUI([in, out] VARIANT_BOOL *pOut);
6757 [id(21)] HRESULT FireProjectsEvent_ItemAdded([in] IUnknown *Project);
6758 [id(22)] HRESULT FireProjectsEvent_ItemRemoved([in] IUnknown *Project);
6759 [id(23)] HRESULT FireProjectsEvent_ItemRenamed([in] IUnknown *Project, [in] BSTR OldName);
6760 [id(24)] HRESULT FireProjectItemsEvent_ItemAdded([in] IUnknown *ProjectItem);
6761 [id(25)] HRESULT FireProjectItemsEvent_ItemRemoved([in] IUnknown *ProjectItem);
6762 [id(26)] HRESULT FireProjectItemsEvent_ItemRenamed([in] IUnknown *ProjectItem, [in] BSTR OldName);
6763 //[id(27)] HRESULT BuildUIHierarchyFromTree([in] OLE_HANDLE hwnd, [in] IUnknown *pParent, [out, retval] IUnknown **ppUIHierarchy);
6764 //[id(28)] HRESULT FireCodeModelEvent([in] DISPID dispid, [in] IUnknown *pElement, [in] DWORD changeKind);
6765 [id(29)] HRESULT IsFireCodeModelEventNeeded([in, out] VARIANT_BOOL *vbNeeded);
6766 [id(30)] HRESULT RunWizardFileEx([in] BSTR bstrWizFilename, [in] long hwndOwner, [in] SAFEARRAY (VARIANT)* vContextParams, [in] SAFEARRAY (VARIANT)* vCustomParams, [out, retval] long *pResult);
6767 [id(31)] HRESULT FireCodeModelEvent3([in] DISPID dispid, [in] IDispatch *pParent, [in] IUnknown *pElement, [in] long changeKind);
6771 uuid(uuid_IVsGlobalsCallback2),
6772 version(1.0),
6773 pointer_default(unique)
6775 interface IVsGlobalsCallback2 : IUnknown
6777 HRESULT WriteVariablesToData([in] LPCOLESTR pVariableName, [in] VARIANT *varData);
6778 HRESULT ReadData([in] IUnknown *pGlobals);
6779 HRESULT ClearVariables();
6780 HRESULT VariableChanged();
6781 HRESULT CanModifySource();
6782 HRESULT GetParent(IDispatch **ppOut);
6786 ////-----------------------------------------------------------------------------
6787 //// IVsGlobals2
6788 ////-----------------------------------------------------------------------------
6789 //// See the description on IVsExtensibility3 for why this interface is here.
6791 uuid(uuid_IVsGlobals2),
6792 version(1.0),
6793 pointer_default(unique)
6795 interface IVsGlobals2 : IUnknown
6797 HRESULT Load();
6798 HRESULT Save();
6799 HRESULT Empty();
6802 ////-----------------------------------------------------------------------------
6803 //// IVsProfferCommands3
6804 ////-----------------------------------------------------------------------------
6805 //// See the description on IVsExtensibility3 for why this interface is here.
6807 uuid(uuid_IVsProfferCommands3),
6808 version(1.0),
6809 pointer_default(unique)
6811 interface IVsProfferCommands3 : IUnknown
6813 HRESULT AddNamedCommand ([in] const GUID *pguidPackage, [in] const GUID *pguidCmdGroup, [in, string] const LPCOLESTR pszCmdNameCanonical,
6814 [out] DWORD *pdwCmdId, [in, string] const LPCOLESTR pszCmdNameLocalized,
6815 [in, string] const LPCOLESTR pszBtnText, [in, string] const LPCOLESTR pszCmdTooltip,
6816 [in, string] const LPCOLESTR pszSatelliteDLL, [in] DWORD dwBitmapResourceId, [in] DWORD dwBitmapImageIndex,
6817 [in] DWORD dwCmdFlagsDefault, [in] DWORD cUIContexts, [in, size_is(cUIContexts)] const GUID *rgguidUIContexts);
6819 HRESULT RemoveNamedCommand ([in, string] const LPCOLESTR pszCmdNameCanonical);
6821 HRESULT RenameNamedCommand ([in, string] const LPCOLESTR pszCmdNameCanonical, [in, string] const LPCOLESTR pszCmdNameCanonicalNew,
6822 [in, string] const LPCOLESTR pszCmdNameLocalizedNew);
6824 HRESULT AddCommandBarControl ([in, string] const LPCOLESTR pszCmdNameCanonical, [in] IDispatch *pCmdBarParent, [in] DWORD dwIndex,
6825 [in] DWORD dwCmdType, [out] IDispatch **ppCmdBarCtrl);
6827 HRESULT RemoveCommandBarControl ([in] IDispatch *pCmdBarCtrl);
6829 HRESULT AddCommandBar ([in, string] const LPCOLESTR pszCmdBarName, [in] DWORD dwType, [in] IDispatch *pCmdBarParent, [in] DWORD dwIndex, [out] IDispatch **ppCmdBar);
6831 HRESULT RemoveCommandBar ([in] IDispatch *pCmdBar);
6833 HRESULT FindCommandBar ([in] IUnknown *pToolbarSet, [in] const GUID *pguidCmdGroup, [in] DWORD dwMenuId, [out, retval] IDispatch **ppdispCmdBar);
6834 HRESULT AddNamedCommand2 ([in] const GUID *pguidPackage, [in] const GUID *pguidCmdGroup, [in, string] const LPCOLESTR pszCmdNameCanonical,
6835 [out] DWORD *pdwCmdId, [in, string] const LPCOLESTR pszCmdNameLocalized,
6836 [in, string] const LPCOLESTR pszBtnText, [in, string] const LPCOLESTR pszCmdTooltip,
6837 [in, string] const LPCOLESTR pszSatelliteDLL, [in] DWORD dwBitmapResourceId, [in] DWORD dwBitmapImageIndex,
6838 [in] DWORD dwCmdFlagsDefault, [in] DWORD cUIContexts, [in, size_is(cUIContexts)] const GUID *rgguidUIContexts, [in] DWORD dwUIElementType);
6841 //--------------------------------------------------------------------------------------------
6842 // IVsHierarchyRefactorNotify
6844 // This interface is optionally implemented by an IVsHierarchy-implementer in
6845 // order for a language-service to notify the hierarchy of refactoring
6846 // operations (such as symbolic-rename and parameter-reordering). It is expected
6847 // that if the hierarchy has generated code (e.g. supports IVsSingleFileGenerator's
6848 // or build-providers) then it will QI the code-generator for IVsRefactorNotify or look
6849 // up a service that implements IVsRefactorNotify from a registry location and pass
6850 // the notification along to that object to either allow it to incorporate the refactoring
6851 // operation back into the designer file or give that object a chance to stop the operation
6852 // and return feedback to the user via IErrorInfo.
6854 // In order to successfully carry out the full refactoring operation, the
6855 // IVsHierarchy-implementer is responsible for checking out the files passed in to this
6856 // interface as well as those returned from corresponding calls to IVsRefactorNotify methods.
6858 // The IVsHierarchy-implementer is also responsible for raising UI when the operation fails
6859 // (e.g. an IVsRefactorNotify-implementer purposefully returns a failure HRESULT+error message
6860 // to indicate that it does not support any given refactoring operation).
6863 // The expected flow of operation is as follows:
6865 // 1. User invokes symbolic-rename (or any other refactoring operation).
6867 // 2. Language-service figures out which code files the operation will affect.
6869 // 3. Language-service calls IVsHierarchyRefactorNotify.OnBefore* to tell the hierarchy which
6870 // files are going to be affected.
6872 // 4. Hierarchies that support generated code determine whether any of the affected files
6873 // are generated from some other source (e.g. a designer file).
6875 // 5. If there are generated files, the hierarchy fetches the IVsRefactorNotify implementer
6876 // (how is determined by each IVsHiearrchy-implementer – VB/C#/J# does it by QI'ing
6877 // the IVsSingleFileGenerator for IVsRefactorNotify, Web Projects do it by QS'ing for
6878 // a service that implements the interface). Once the hierarchy has a reference to
6879 // an IVsRefactorNotify-implementer, it then passes along the equivalent OnBefore*
6880 // notification to the IVsRefactorNotify implementer. It does this for each generated file.
6882 // 6. IVsRefactorNotify implementers can either stop the operation by returning a failure
6883 // HRESULT and setting an ErrorInfo (via IVsUIShell::SetErrorInfo), or they can decide
6884 // what designer file(s) the operation will affect and return the set of files to the
6885 // caller via the out array of VSITEMIDs. It is worth noting that the
6886 // IVsRefactorNotify-implementer should not update the designer file(s) at this point.
6887 // The files need to be updated during the second call to the On* method (e.g.
6888 // OnGlobalSymbolRenamed). The OnBefore* call is present in order to allow the operation
6889 // to check out the full list of files required as a unit as well as to allow for
6890 // the entire operation to be halted before any changes are made if the user decides
6891 // not to complete it if one of the code-generators can’t consume the refactor operation.
6893 // 7. If the IVsRefactorNotify-implementer returns a failure, the hierarchy should alert the
6894 // user of the error, after which the hierarchy can either continue the operation (see
6895 // next step) or return a cancel HRESULT to the language-service in order to halt the refactor
6896 // operation ["cancel" HRESULTs are E_ABORT, OLE_E_PROMPTSAVECANCELLED,
6897 // OLECMDERR_E_CANCELED or HR_E_CSHARP_USER_CANCEL(same as OLECMDERR_E_CANCELED)].
6899 // 8. If all IVsRefactorNotify-implementers return successfully or the caller asks the hierarchy
6900 // to prompt the user to continue on failure and the user chooses to continue, the hierarchy
6901 // is responsible for checking out the entire set of affected files (those reported by the
6902 // language-service as well as those returned from the IVsRefactorNotify implementers).
6903 // Note that the IVsHierarchyRefactorNotify-implementer should only check out the
6904 // designer file if the IVsRefactorNotify-implementer returned it in the out-array
6905 // because there may be some refactor-operations that don’t require the designer file
6906 // to actually make any change (e.g. if a namespace that is stored outside of the designer
6907 // file chages).
6909 // 9. After checking out, the hierarchy returns from the OnBefore* call to the language-service.
6911 // 10. The language-service carries out the refactoring operation.
6913 // 11. The language-service then calls the hierarchy's On* method (e.g. OnGlobalSymbolRenamed)
6914 // and the hierarchy notifies all IVsRefactorNotify implementers by calling the
6915 // equivalent On* method on IVsRefactorNotify, during which time the implementer is
6916 // expected to make the equivalent refactoring change in the designer file so that the next
6917 // time it is asked to generate code, the user's refactoring operation remains intact.
6919 //--------------------------------------------------------------------------------------------
6922 uuid(uuid_IVsHierarchyRefactorNotify),
6923 version(1.0),
6924 pointer_default(unique)
6926 interface IVsHierarchyRefactorNotify : IUnknown
6928 // Called when a symbol is about to be renamed -- to disallow the rename, return a failure HRESULT.
6929 // Note that the "symbol" may actually be more than one occurrence of the same-named symbol if
6930 // the given language allows overloading such as:
6931 // void SomeMethod() {}
6932 // void SomeMethod(int i) {}
6934 HRESULT OnBeforeGlobalSymbolRenamed(
6935 [in] ULONG cItemsAffected, // number of files this rename affected
6936 [in, size_is(cItemsAffected)] VSITEMID rgItemsAffected[], // array of itemids identifying which files were affected
6937 [in] ULONG cRQNames, // count of RQNames passed in. This count can be greater than 1 when an overloaded symbol is being renamed.
6938 [in, size_is(cRQNames)] LPCOLESTR rglpszRQName[], // RQName-syntax string that identifies the symbol(s) being renamed.
6939 [in] LPCOLESTR lpszNewName, // name that the symbol identified by rglpszRQName is being changed to
6940 [in] BOOL promptContinueOnFail); // pass TRUE if the project-system should allow the user the choice of continuing even if a generator returns an error
6941 // indicating that it will not be able to carry out the rename operation.
6943 // Called after a symbol has been renamed. Note that the "symbol" may actually be more than one
6944 // occurrence of the same-named symbol if the given language allows overloading:
6945 // void SomeMethod() {}
6946 // void SomeMethod(int i) {}
6948 HRESULT OnGlobalSymbolRenamed(
6949 [in] ULONG cItemsAffected, // number of files this rename affected
6950 [in, size_is(cItemsAffected)] VSITEMID rgItemsAffected[], // array of itemids identifying which files were affected
6951 [in] ULONG cRQNames, // count of RQNames passed in. This count can be greater than 1 when an overloaded symbol is being renamed.
6952 [in, size_is(cRQNames)] LPCOLESTR rglpszRQName[], // RQName-syntax string that identifies the symbol(s) being renamed.
6953 [in] LPCOLESTR lpszNewName); // name that the symbol identified by rglpszRQName is being changed to
6955 // Called when a method is about to have its params reordered -- to disallow the reorder, return a failure HRESULT.
6957 HRESULT OnBeforeReorderParams(
6958 [in] VSITEMID itemid, // item containing the definition which is being reordered
6959 [in] LPCOLESTR lpszRQName, // RQName-syntax string that identifies the method whose params are being reordered
6960 [in] ULONG cParamIndexes, // number of parameters in rgParamIndexes
6961 [in, size_is(cParamIndexes)] ULONG rgParamIndexes[], // array of param indexes where the index in this array is the index to which the
6962 // param is moving, and the value at that index is where the parameter was before the
6963 // reordering (e.g. x(a,b,c) --> x(b,a,c) would be {1,0,2} because the index 0 in this
6964 // array appeared at index 1 prior, index 1 in this array was at index 0, and
6965 // index 2 was at index 2 prior.
6966 [in] BOOL promptContinueOnFail); // pass TRUE if the project-system should allow the user the choice of continuing even if a generator returns an error
6967 // indicating that it will not be able to carry out the reorder operation.
6969 // Called after a method has had its params reordered.
6971 HRESULT OnReorderParams(
6972 [in] VSITEMID itemid, // item containing the definition which is being reordered
6973 [in] LPCOLESTR lpszRQName, // RQName-syntax string that identifies the method whose params are being reordered
6974 [in] ULONG cParamIndexes, // number of parameters in rgParamIndexes
6975 [in, size_is(cParamIndexes)] ULONG rgParamIndexes[]); // array of param indexes where the index in this array is the index to which the
6976 // param is moving, and the value at that index is where the parameter was before the
6977 // reordering (e.g. x(a,b,c) --> x(b,a,c) would be {1,0,2} because the index 0 in this
6978 // array appeared at index 1 prior, index 1 in this array was at index 0, and
6979 // index 2 was at index 2 prior.
6981 // Called when a method is about to have its params removed -- to disallow the remove, return a failure HRESULT.
6983 HRESULT OnBeforeRemoveParams(
6984 [in] VSITEMID itemid, // item containing the definition that is having params removed
6985 [in] LPCOLESTR lpszRQName, // RQName-syntax string that identifies the method having params removed
6986 [in] ULONG cParamIndexes, // number of parameters in rgPararmIndexes
6987 [in, size_is(cParamIndexes)] ULONG rgParamIndexes[], // array of param indexes where each value indicates the index of the parameter being removed
6988 [in] BOOL promptContinueOnFail); // pass TRUE if the project-system should allow the user the choice of continuing even if a generator returns an error
6989 // indicating that it will not be able to carry out the remove operation.
6991 // Called after a method has had its params removed.
6993 HRESULT OnRemoveParams(
6994 [in] VSITEMID itemid, // item containing the definition that is having params removed
6995 [in] LPCOLESTR lpszRQName, // RQName-syntax string that identifies the method having params removed
6996 [in] ULONG cParamIndexes, // number of parameters in rgPararmIndexes
6997 [in, size_is(cParamIndexes)] ULONG rgParamIndexes[]); // array of param indexes where each value indicates the index of the parameter being removed
6999 // Called when a method is about to have params added -- to disallow the add, return a failure HRESULT.
7001 HRESULT OnBeforeAddParams(
7002 [in] VSITEMID itemid, // item containing the definition that is having params added
7003 [in] LPCOLESTR lpszRQName, // RQName-syntax string that identifies the method having params added
7004 [in] ULONG cParams, // number of parameters in rgszRQTypeNames, rgszParamNames and rgszDefaultValues
7005 [in, size_is(cParams)] ULONG rgszParamIndexes[], // the indexes of the new parameters
7006 [in, size_is(cParams)] LPCOLESTR rgszRQTypeNames[], // RQName-syntax strings that identify the types of the new parameters
7007 [in, size_is(cParams)] LPCOLESTR rgszParamNames[], // the names of the parameters
7008 [in] BOOL promptContinueOnFail); // pass TRUE if the project-system should allow the user the choice of continuing even if a generator returns an error
7009 // indicating that it will not be able to carry out the add operation.
7011 // Called after a method has had its params added.
7013 HRESULT OnAddParams(
7014 [in] VSITEMID itemid, // item containing the definition that is having params added
7015 [in] LPCOLESTR lpszRQName, // RQName-syntax string that identifies the method having params added
7016 [in] ULONG cParams, // number of parameters in rgszRQTypeNames, rgszParamNames and rgszDefaultValues
7017 [in, size_is(cParams)] ULONG rgszParamIndexes[], // the indexes of the new parameters
7018 [in, size_is(cParams)] LPCOLESTR rgszRQTypeNames[], // RQName-syntax strings that identify the types of the new parameters
7019 [in, size_is(cParams)] LPCOLESTR rgszParamNames[]); // the names of the parameters
7022 //--------------------------------------------------------------------------------------------
7023 // IVsRefactorNotify
7025 // This interface is optionally implemented by an IVsSingleFileGenerator-implementer or
7026 // a stand-alone object that registers in a project-specific way in order to know when
7027 // refactoring operations (such as symbolic-rename and parameter-reordering) occur. If you
7028 // implement this interface and can preserve the intent of the refactoring operation in the
7029 // designer-file that created the code-file that is being changed, you should carry out the
7030 // change to the designer-file during the OnXXX calls. The OnBeforeXXX calls are present to
7031 // give you support for canceling the operation (by returning a failure HRESULT and using
7032 // IErrorInfo to communicate the reason why back to the user) and also allowing you to
7033 // communicate the need to check out additional files if your generator needs to modify any files
7034 // to preserve the user’s refactor intent. Note that if you need to change your designer-file
7035 // because of the refactor operation, you should return your designer-file in the
7036 // prgAdditionalCheckoutVSITEMIDs array. The project system will not check out the designer
7037 // file unless you, the IVsRefactorNotify-implementer return in in the out-array.
7039 // For more details on the overall flow of operations as it pertains to IVsRefactorNotify,
7040 // see the comments above IVsHierarchyRefactorNotify.
7042 //The language-service identifies the symbol being changed by passing a string using RQName
7043 // syntax (RQName stands for Refactor-Qualified Name). The RQName syntax BNF description is
7044 // as follows:
7047 // rq_name := rq_ns | rq_agg | rq_membvar | rq_event | rq_meth | rq_prop
7049 // rq_ns := "Ns" "(" rq_sym_name_list ")"
7051 // rq_agg := "Agg" "(" rq_sym_name_list ")"
7053 // rq_membvar := "Membvar" "(" rq_agg "," rq_sym_name ")"
7055 // rq_event := "Event" "(" rq_agg "," rq_sym_name ")"
7057 // rq_meth := "Meth" "(" rq_agg "," rq_sym_name "," rq_typevarcount "," rq_params ")"
7059 // rq_prop := "Prop" "(" rq_agg "," rq_sym_name "," rq_typevarcount "," rq_params ")"
7061 // rq_params := "Params" "(" rq_param_list ")"
7063 // rq_param_list := rq_param |
7064 // rq_param "," rq_param_list
7066 // rq_param := "Param" "(" rq_type_sig ")"
7068 // rq_type_sig := rq_aggtype_sig |
7069 // rq_array_sig |
7070 // rq_pointer_sig |
7071 // rq_param_mod_sig |
7072 // rq_typevar_sig |
7073 // rq_void_sig |
7074 // rq_error_sig |
7075 // rq_null_sig
7077 // rq_aggtype_sig := "AggType" "(" rq_agg "," rq_typeparams ")"
7079 // rq_typeparams := "TypeParams" "(" rq_type_sig_list ")"
7081 // rq_type_sig_list := rq_type_sig |
7082 // rq_type_sig "," rq_type_sig_list
7084 // rq_array_sig := "Array" "(" rq_rank "," rq_type_sig ")"
7086 // rq_pointer_sig := "Pointer" "(" rq_type_sig ")"
7088 // rq_param_mod_sig := "Ref" "(" rq_type_sig ")" |
7089 // "Out" "(" rq_type_sig ")"
7091 // rq_typevar_sig := "TyVar" "(" rq_simple_name ")"
7093 // rq_void_sig := "Void"
7095 // rq_error_sig := "Error" "(" rq_text ")"
7097 // rq_null_sig := "Null"
7099 // rq_sym_name_list := rq_sym_name |
7100 // rq_sym_name "," rq_sym_name_list
7102 // rq_sym_name := rq_aggname | rq_nsname | rq_membvarname | rq_methpropname | rq_intfexplname
7104 // rq_nsname := "NsName" "(" rq_simple_name ")"
7106 // rq_aggname := "AggName" "(" rq_simple_name "," rq_typevarcount ")"
7108 // rq_membvarname := "MembvarName" "(" rq_simple_name ")"
7110 // rq_methpropname := rq_methname | rq_propname | rq_eventname
7112 // rq_methname := "MethName" "(" rq_simple_name ")"
7114 // rq_propname := "PropName" "(" rq_simple_name ")"
7116 // rq_eventname := "EventName" "(" rq_simple_name ")"
7118 // rq_intfexplname := "IntfExplName" "(" rq_type_sig "," rq_methpropname ")"
7120 // rq_typevarcount := "TypeVarCnt" "(" rq_number ")"
7122 // rq_simple_name = rq_text
7124 // rq_rank := rq_number
7126 // rq_number := [0-9]+
7128 // rq_text := [any character except ".", "," "(" and ")"]
7131 // Example:
7133 // using System;
7134 // using System.Collections.Generic;
7135 // using System.Text;
7137 // namespace ConsoleApplication //1
7138 // {
7139 // interface ITest<T> //2
7140 // {
7141 // void Foo(T t); //3
7142 // }
7144 // delegate void MyDel(); //4
7146 // class Program : ITest<int>
7147 // {
7148 // const int i = 5; //5
7149 // string s; //6
7150 // event MyDel e; //7
7151 // static void Main(string[] args) //8
7152 // {
7153 // }
7154 // void ITest<int>.Foo(int t) //9
7155 // {
7156 // }
7157 // int this[int i] { get { return 1; } } //10
7158 // }
7159 // }
7161 // namespace Foo.Bar.Blah //11
7162 // {
7163 // }
7166 // 1: Ns(NsName(ConsoleApplication))
7168 // 2: Agg(NsName(ConsoleApplication),AggName(ITest,TypeVarCnt(1)))
7170 // 3: Meth(Agg(NsName(ConsoleApplication),AggName(ITest,TypeVarCnt(1))),MethName(Foo),TypeVarCnt(0),Params(Param(TyVar(T))))
7172 // 4: Agg(NsName(ConsoleApplication),AggName(MyDel,TypeVarCnt(0)))
7174 // 5: Membvar(Agg(NsName(ConsoleApplication),AggName(Program,TypeVarCnt(0))),MembvarName(i))
7176 // 6: Membvar(Agg(NsName(ConsoleApplication),AggName(Program,TypeVarCnt(0))),MembvarName(s))
7178 // 7: Event(Agg(NsName(ConsoleApplication),AggName(Program,TypeVarCnt(0))),EventName(e))
7180 // 8: Meth(Agg(NsName(ConsoleApplication),AggName(Program,TypeVarCnt(0))),MethName(Main),TypeVarCnt(0),Params(Param(Array(1,AggType(Agg(NsName(System),AggName(String,TypeVarCnt(0))),TypeParams())))))
7182 // 9: Meth(Agg(NsName(ConsoleApplication),AggName(Program,TypeVarCnt(0))),IntfExplName(AggType(Agg(NsName(ConsoleApplication),AggName(ITest,TypeVarCnt(1))),TypeParams(AggType(Agg(NsName(System),AggName(Int32,TypeVarCnt(0))),TypeParams()))),MethName(Foo)),
7184 // 10: Prop(Agg(NsName(ConsoleApplication),AggName(Program,TypeVarCnt(0))),PropName($Item$),TypeVarCnt(0),Params(Param(AggType(Agg(NsName(System),AggName(Int32,TypeVarCnt(0))),TypeParams()))))
7186 // 11: Ns(NsName(Foo),NsName(Bar),NsName(Blah))
7187 //--------------------------------------------------------------------------------------------
7189 uuid(uuid_IVsRefactorNotify),
7190 version(1.0),
7191 pointer_default(unique)
7193 interface IVsRefactorNotify : IUnknown
7195 // Called when a symbol is about to be renamed -- to disallow the rename, return a failure HRESULT
7196 // and set an error-info (via SetErrorInfo) for the IVsHierarchy-implementer to be able to retrieve the
7197 // error message to display to the user. Note that the "symbol" may actually be more than one
7198 // occurrence of the same-named symbol if the given language allows overloading:
7199 // void SomeMethod() {}
7200 // void SomeMethod(int i) {}
7202 HRESULT OnBeforeGlobalSymbolRenamed(
7203 [in] IVsHierarchy *pHier, // hierarchy of the designer-owned item associated with the code-file that the language service changed
7204 [in] VSITEMID itemid, // itemid of the designer-owned item associated with the code-file that the language service changed
7205 [in] ULONG cRQNames, // count of RQNames passed in. This count can be greater than 1 when an overloaded symbol is being renamed.
7206 [in, size_is(cRQNames)] LPCOLESTR rglpszRQName[], // RQName-syntax string that identifies the symbol(s) renamed
7207 [in] LPCOLESTR lpszNewName, // name that the symbol identified by rglpszRQName is being changed to
7208 [out, retval] SAFEARRAY(VSITEMID)* prgAdditionalCheckoutVSITEMIDs); // array of VSITEMID's if the RefactorNotify implementer needs to check out any files other than
7209 // the generated-code file to be able to carry out the refactor operation (e.g. the designer-owned file).
7211 // Called after a symbol has been renamed. Note that the "symbol" may actually be more than one
7212 // occurrence of the same-named symbol if the given language allows overloading:
7213 // void SomeMethod() {}
7214 // void SomeMethod(int i) {}
7216 HRESULT OnGlobalSymbolRenamed(
7217 [in] IVsHierarchy *pHier, // hierarchy of the designer-owned item associated with the code-file that the language service changed
7218 [in] VSITEMID itemid, // itemid of the designer-owned item associated with the code-file that the language service changed
7219 [in] ULONG cRQNames, // count of RQNames passed in. This count can be greater than 1 when an overloaded symbol is being renamed.
7220 [in, size_is(cRQNames)] LPCOLESTR rglpszRQName[], // RQName-syntax string that identifies the symbol(s) renamed
7221 [in] LPCOLESTR lpszNewName); // name that the symbol identified by rglpszRQName is being changed to
7223 // Called when a method is about to have its params reordered -- to disallow the reorder, return a failure HRESULT
7224 // and set an error-info (via SetErrorInfo) for the IVsHierarchy-implementer to be able to retrieve the
7225 // error message to display to the user.
7227 HRESULT OnBeforeReorderParams(
7228 [in] IVsHierarchy *pHier, // hierarchy of the designer-owned item associated with the code-file that the language service changed
7229 [in] VSITEMID itemid, // itemid of the designer-owned item associated with the code-file that the language service changed
7230 [in] LPCOLESTR lpszRQName, // RQName-syntax string that identifies the method whose params are being reordered
7231 [in] ULONG cParamIndexes, // number of parameters in rgParamIndexes
7232 [in, size_is(cParamIndexes)] ULONG rgParamIndexes[], // array of param indexes where the index in this array is the index to which the
7233 // param is moving, and the value at that index is where the parameter was before the
7234 // reordering (e.g. x(a,b,c) --> x(b,a,c) would be {1,0,2} because the index 0 in this
7235 // array appeared at index 1 prior, index 1 in this array was at index 0, and
7236 // index 2 was at index 2 prior.
7237 [out, retval] SAFEARRAY(VSITEMID)* prgAdditionalCheckoutVSITEMIDs); // array of VSITEMID's if the RefactorNotify implementer needs to check out any files other than
7238 // the generated-code file to be able to carry out the refactor operation (e.g. the designer-owned file).
7240 // Called after a method has had its params reordered.
7242 HRESULT OnReorderParams(
7243 [in] IVsHierarchy *pHier, // hierarchy of the designer-owned item associated with the code-file that the language service changed
7244 [in] VSITEMID itemid, // itemid of the designer-owned item associated with the code-file that the language service changed
7245 [in] LPCOLESTR lpszRQName, // RQName-syntax string that identifies the method whose params are being reordered
7246 [in] ULONG cParamIndexes, // number of parameters in rgParamIndexes
7247 [in, size_is(cParamIndexes)] ULONG rgParamIndexes[]); // array of param indexes where the index in this array is the index to which the
7248 // param is moving, and the value at that index is where the parameter was before the
7249 // reordering (e.g. x(a,b,c) --> x(b,a,c) would be {1,0,2} because the index 0 in this
7250 // array appeared at index 1 prior, index 1 in this array was at index 0, and
7251 // index 2 was at index 2 prior.
7253 // Called when a method is about to have its params removed -- to disallow the remove, return a failure HRESULT
7254 // and set an error-info (via SetErrorInfo) for the IVsHierarchy-implementer to be able to retrieve the
7255 // error message to display to the user.
7257 HRESULT OnBeforeRemoveParams(
7258 [in] IVsHierarchy *pHier, // hierarchy of the designer-owned item associated with the code-file that the language service changed
7259 [in] VSITEMID itemid, // itemid of the designer-owned item associated with the code-file that the language service changed
7260 [in] LPCOLESTR lpszRQName, // RQName-syntax string that identifies the method having params removed
7261 [in] ULONG cParamIndexes, // number of parameters in rgPararmIndexes
7262 [in, size_is(cParamIndexes)] ULONG rgParamIndexes[], // array of param indexes where each value indicates the index of the parameter being removed
7263 [out, retval] SAFEARRAY(VSITEMID)* prgAdditionalCheckoutVSITEMIDs); // array of VSITEMID's if the RefactorNotify implementer needs to check out any files other than
7264 // the generated-code file to be able to carry out the refactor operation (e.g. the designer-owned file).
7266 // Called after a method has had its params removed.
7268 HRESULT OnRemoveParams(
7269 [in] IVsHierarchy *pHier, // hierarchy of the designer-owned item associated with the code-file that the language service changed
7270 [in] VSITEMID itemid, // itemid of the designer-owned item associated with the code-file that the language service changed
7271 [in] LPCOLESTR lpszRQName, // RQName-syntax string that identifies the method having params removed
7272 [in] ULONG cParamIndexes, // number of parameters in rgPararmIndexes
7273 [in, size_is(cParamIndexes)] ULONG rgParamIndexes[]); // array of param indexes where each value indicates the index of the parameter being removed
7275 // Called when a method is about to have params added -- to disallow the add, return a failure HRESULT
7276 // and set an error-info (via SetErrorInfo) for the IVsHierarchy-implementer to be able to retrieve the
7277 // error message to display to the user.
7279 HRESULT OnBeforeAddParams(
7280 [in] IVsHierarchy *pHier, // hierarchy of the designer-owned item associated with the code-file that the language service changed
7281 [in] VSITEMID itemid, // itemid of the designer-owned item associated with the code-file that the language service changed
7282 [in] LPCOLESTR lpszRQName, // RQName-syntax string that identifies the method having params added
7283 [in] ULONG cParams, // number of parameters in rgszRQTypeNames, rgszParamNames and rgszDefaultValues
7284 [in, size_is(cParams)] ULONG rgszParamIndexes[], // the indexes of the new parameters
7285 [in, size_is(cParams)] LPCOLESTR rgszRQTypeNames[], // RQName-syntax strings that identify the types of the new parameters
7286 [in, size_is(cParams)] LPCOLESTR rgszParamNames[], // the names of the parameters
7287 [out, retval] SAFEARRAY(VSITEMID)* prgAdditionalCheckoutVSITEMIDs); // array of VSITEMID's if the RefactorNotify implementer needs to check out any files other than
7288 // the generated-code file to be able to carry out the refactor operation (e.g. the designer-owned file).
7290 // Called after a method has had its params added.
7292 HRESULT OnAddParams(
7293 [in] IVsHierarchy *pHier, // hierarchy of the designer-owned item associated with the code-file that the language service changed
7294 [in] VSITEMID itemid, // itemid of the designer-owned item associated with the code-file that the language service changed
7295 [in] LPCOLESTR lpszRQName, // RQName-syntax string that identifies the method having params added
7296 [in] ULONG cParams, // number of parameters in rgszRQTypeNames, rgszParamNames and rgszDefaultValues
7297 [in, size_is(cParams)] ULONG rgszParamIndexes[], // the indexes of the new parameters
7298 [in, size_is(cParams)] LPCOLESTR rgszRQTypeNames[], // RQName-syntax strings that identify the types of the new parameters
7299 [in, size_is(cParams)] LPCOLESTR rgszParamNames[]); // the names of the parameters
7303 uuid(uuid_IVsMonitorSelection2),
7304 version(1.0),
7305 pointer_default(unique)
7307 interface IVsMonitorSelection2 : IUnknown
7309 // Retrieve the VSSELELEMID ID for a VsPackage defined Element of Selection.
7310 // This is an ID equivalent to SEID_WindowFrame or SEID_ResultList. In order
7311 // to define a new Selection Element a GUID needs to be registered under
7312 // HKLM\Software\Microsoft\VisualStudio\<version>\SelectionElements\ as a subkey.
7313 // For example:
7314 // HKLM\Software\Microsoft\VisualStudio\8.0\
7315 // SelectionElements\
7316 // {...guid1...}\
7317 // @ = "Team System Active Portfolio Project"
7318 // {...guid2...}\
7319 // @ = "Team System Active Team Foundation Server"
7320 HRESULT GetElementID([in] REFGUID rguidElement, [out] VSSELELEMID *pElementId);
7322 // The Empty Selection Context manages the selection when the IDE is empty;
7323 // when there otherwise is no other window active. This Selection Context
7324 // is always the first Selection Context activated. It can be used to push
7325 // Elements of Selection (VSSELELEMID) that are globally maintained. Such
7326 // global Elements of selection should only be set via the EmptySelectionContext
7327 // object and should not be set on the IVsTrackSelectionEx interface
7328 // associated with individual IVsWindowFrame objects.
7329 HRESULT GetEmptySelectionContext([out] IVsTrackSelectionEx **ppEmptySelCtxt);
7333 uuid(uuid_IVsToolsOptions),
7334 version(1.0),
7335 pointer_default(unique)
7337 interface IVsToolsOptions : IUnknown
7339 // Returns whether the Tools Options dialog is currently open.
7340 // REVIEW: should this be a property?
7341 HRESULT IsToolsOptionsOpen([out] BOOL* pfOpen);
7343 // A Tools Options node can be associated with a command UI context by adding a
7344 // "VisibilityCmdUIContexts" subkey containing entries whose names are the context GUIDs.
7345 // It then becomes visible only if one or more of those contexts are active. This method
7346 // re-evaluates the visibility of each page based on the currently active contexts.
7347 HRESULT RefreshPageVisibility();
7351 uuid(uuid_SVsToolsOptions)
7353 interface SVsToolsOptions : IUnknown
7357 cpp_quote("#define SID_SVsToolsOptions IID_SVsToolsOptions")
7360 //-----------------------------------------------------------------------------
7361 // IVsDeployableProjectCfg2
7362 //-----------------------------------------------------------------------------
7363 // Implemented by a project system that supports Deploying project outputs
7364 // (not to be confused with a project that can EnumOutputs and thus can be
7365 // deployed by a deployment project).
7367 // IVsDeployableProjectCfg2 extends IVsDeployableProjectCfg
7370 uuid(uuid_IVsDeployableProjectCfg2),
7371 version(1.0),
7372 pointer_default(unique)
7374 interface IVsDeployableProjectCfg2 : IVsDeployableProjectCfg
7376 // called before actual deploy
7377 HRESULT StartCleanDeploy([in] IVsOutputWindowPane *pIVsOutputWindowPane, [in] DWORD dwOptions);
7380 //---------------------------------------------------------------------------
7381 // IVsFontAndColorStorage2
7382 //---------------------------------------------------------------------------
7383 // Implemented by the Environment.
7384 // Interface retrieved by
7385 // pSP->QueryService(SID_SVsFontAndColorStorage, IID_IVsFontAndColorStorage2, (void**)&pObj));
7386 // Allows font and color info to be stored and retrieved. This is
7387 // implemented by the central storage mechanism and QI'd for by the font/
7388 // color categories.
7390 uuid(uuid_IVsFontAndColorStorage2),
7391 version(1.0),
7392 pointer_default(unique)
7394 interface IVsFontAndColorStorage2 : IUnknown
7396 HRESULT RevertFontToDefault();
7397 HRESULT RevertItemToDefault([in] LPCOLESTR szName);
7398 HRESULT RevertAllItemsToDefault();
7401 // Additional options for IOleComponentUIManager::ShowContextMenu's dwCompRole parameter
7402 // Combine these flags with the OLEROLE enumeration.
7403 // Note that if the role is OLEROLE_UNKNOWN (-1), then these flags cannot be used and
7404 // they are ignored.
7405 enum __VSSHOWCONTEXTMENUOPTS
7407 VSCTXMENU_SELECTFIRSTITEM = 0x00010000, // Automatically select the first item
7408 VSCTXMENU_SHOWUNDERLINES = 0x00020000, // Show keyboard mnemonic underlines
7409 VSCTXMENU_SUPPORTSTYPEAHEAD = 0x00040000 // supports typeahead, should also be a sorted dynamic item list
7411 typedef DWORD VSSHOWCONTEXTMENUOPTS;
7413 // This interface is optionally implemented by an IVsDocOutlineProvider-implementor
7414 // if it needs to TranslateAccelerator differently from default shell translation
7416 uuid(uuid_IVsDocOutlineProvider2),
7417 version(1.0),
7418 pointer_default(unique)
7420 interface IVsDocOutlineProvider2 : IUnknown
7422 // return S_OK if no further translation is required
7423 // S_FALSE if you want shell to translate the message
7424 HRESULT TranslateAccelerator([in]LPMSG lpMsg);
7427 enum __VSCREATEWEBBROWSER2
7429 /********************************************** defined in vsbrowse.idl
7430 VSCWB_AutoShow = 0x00000001,
7431 VSCWB_AddToMRU = 0x00000002,
7432 VSCWB_ReuseExisting = 0x00000010,
7433 VSCWB_ForceNew = 0x00000020, // force create
7434 VSCWB_FrameMdiChild = 0x00000000, // default
7435 VSCWB_FrameFloat = 0x00000040,
7436 VSCWB_FrameDock = 0x00000080,
7437 VSCWB_StartHome = 0x00000100,
7438 VSCWB_StartSearch = 0x00000200,
7439 VSCWB_StartCustom = 0x00000400,
7440 VSCWB_NoHistory = 0x00010000, // Suppress the *previous* page in the browser's back/forward list
7441 VSCWB_NoReadCache = 0x00020000,
7442 VSCWB_NoWriteToCache = 0x00040000,
7443 VSCWB_AllowAutosearch = 0x00080000,
7444 VSCWB_OptionNoDocProps = 0x00000000, // default
7445 VSCWB_OptionShowDocProps = 0x01000000,
7446 VSCWB_OptionCustomDocProps = 0x02000000,
7447 VSCWB_OptionDisableFind = 0x04000000,
7448 VSCWB_OptionDisableDockable = 0x08000000,
7449 VSCWB_OptionDisableStatusBar= 0x10000000,
7451 VSCWB_StartURLMask = 0x00000F00,
7452 VSCWB_NavOptionMask = 0x000F0000,
7453 VSCWB_OptionsMask = 0xFF000000
7454 **********************************************/
7455 VSCWB_NoHistoryThisPage = 0x00100000, // Suppress *this* page in the browser's back/forward list
7456 VSCWB_NavOptionMask2 = 0x001F0000
7462 //=----------------------------------------------------------------------=
7463 // IVSMDTypeResolutionService
7464 //=----------------------------------------------------------------------=
7465 // This is an interface that provides access to a ITypeResolutionService object
7466 // through native code. As a service, this may be queried
7467 // from the service provider returned from IVsProject::GetItemContext. The
7468 // default implementation of DynamicTypeService will first get the item context
7469 // and query for this service before creating a default implementation of
7470 // ITypeResolutionService.
7473 object,
7474 uuid(uuid_IVsMDTypeResolutionService),
7475 pointer_default(unique)
7477 interface IVSMDTypeResolutionService : IUnknown
7479 [propget]
7480 HRESULT TypeResolutionService([out, retval] IDispatch **ppTrs);
7483 cpp_quote("#define SID_SVSMDTypeResolutionService IID_IVSMDTypeResolutionService")
7491 //---------------------------------------------------------------------------
7492 // IVsUIShellOpenDocument2
7493 //---------------------------------------------------------------------------
7494 // Implemented by the Environment.
7495 // Extends IVsUIShellOpenDocument and can be QI'd from that service.
7496 typedef struct _VSDEFAULTPREVIEWER
7498 BSTR bstrDefBrowserPath;
7499 BSTR bstrDefBrowserDisplayName;
7500 BOOL fIsInternalBrowser;
7501 BOOL fIsSystemBrowser;
7502 VSPREVIEWRESOLUTION defRes;
7503 } VSDEFAULTPREVIEWER;
7507 uuid(uuid_IVsUIShellOpenDocument2),
7508 version(1.0),
7509 pointer_default(unique)
7511 interface IVsUIShellOpenDocument2 : IUnknown
7513 // Get list of Default Previewers. This is the list of previewers that would be launched
7514 // if IVsUIShellOpenDocument::OpenStandardPreviewer(NULL) is called.
7515 // If celt is zero and pcActual is not NULL, the number of standard previewers
7516 // is returned in *pcActual.
7517 // If celt is not zero, rgDefaultPreviewers must not be NULL, or E_POINTER is returned.
7519 // An extremely common pattern is something like (omitting error checks for readability):
7521 // hr = pIVsUIShellOpenDocument2->GetDefaultPreviewers(0, NULL, &cExpected);
7522 // prgpDefViewers = ::CoTaskMemAlloc(cExpected * sizeof(VSDEFAULTPREVIEWER));
7523 // hr = pIVsUIShellOpenDocument2->GetDefaultPreviewers(cExpected, prgpDefViewers, &cActual);
7525 HRESULT GetDefaultPreviewers([in] ULONG celt,
7526 [in, out, size_is(celt)] VSDEFAULTPREVIEWER rgDefaultPreviewers[],
7527 [out] ULONG *pcActual);
7531 ////--------------------------------------------------------------------------------------------
7532 //// IVsFilterNewProjectDlg
7533 ////
7534 //// Implemented by filters that want to filter items from the New Project dialog box.
7535 //// Use SVsRegisterNewDialogFilters to register the filter.
7536 ////--------------------------------------------------------------------------------------------
7538 uuid(uuid_IVsFilterNewProjectDlg),
7539 version(1.0),
7540 pointer_default(unique)
7542 interface IVsFilterNewProjectDlg : IUnknown
7544 HRESULT FilterTreeItemByLocalizedName([in] LPCOLESTR pszLocalizedName, [out] BOOL *pfFilter);
7545 HRESULT FilterTreeItemByTemplateDir([in] LPCOLESTR pszTemplateDir, [out] BOOL *pfFilter);
7546 HRESULT FilterListItemByLocalizedName([in] LPCOLESTR pszLocalizedName, [out] BOOL *pfFilter);
7547 HRESULT FilterListItemByTemplateFile([in] LPCOLESTR pszTemplateFile, [out] BOOL *pfFilter);
7550 ////--------------------------------------------------------------------------------------------
7551 //// IVsRegisterNewDialogFilters
7552 ////
7553 //// Implemented by the shell. This interface is retrieved via IServiceProvider::QueryService on
7554 //// a IServiceProvider. Use it to install a custom filter for the AddNewProject Dialog or
7555 //// the AddNewItemDialog. Your filter must implement the IVsFilterAddProjectItemDlg interface
7556 //// or the IVsFilterAddProjectDlg interface.
7557 ////--------------------------------------------------------------------------------------------
7559 uuid(uuid_IVsRegisterNewDialogFilters),
7560 version(1.0),
7561 pointer_default(unique)
7563 interface IVsRegisterNewDialogFilters : IUnknown
7565 HRESULT RegisterNewProjectDialogFilter([in]IVsFilterNewProjectDlg* pFilter,[out] VSCOOKIE *pdwFilterCookie);
7566 HRESULT UnregisterNewProjectDialogFilter([in]VSCOOKIE dwFilterCookie);
7567 HRESULT RegisterAddNewItemDialogFilter([in]IVsFilterAddProjectItemDlg* pFilter,[out] VSCOOKIE *pdwFilterCookie);
7568 HRESULT UnregisterAddNewItemDialogFilter([in]VSCOOKIE dwFilterCookie);
7572 [uuid(uuid_SVsRegisterNewDialogFilters)]
7573 interface SVsRegisterNewDialogFilters : IUnknown
7577 cpp_quote("#define SID_SVsRegisterNewDialogFilters IID_SVsRegisterNewDialogFilters")
7580 ////--------------------------------------------------------------------------------------------
7581 //// IVsWebBrowserUser2
7582 ////
7583 //// Implemented by any client of the IVsWebBrowsingService that wants to offer services
7584 //// to the hosted browser control. For instance, if the client wants to provide a
7585 //// custom implementation of IInternetSecurityManager, it should implement this interface
7586 //// and IServiceProvider. This interface should be implemented on the object passed as
7587 //// pUser to IVsWebBrowsingService.CreateWebBrowser. The IServiceProvider implementation
7588 //// should return the custom security manager when queried for SID_SInternetSecurityManager.
7589 ////--------------------------------------------------------------------------------------------
7591 uuid(821ABD48-96DC-4315-A2C4-82A7239B8166),
7592 version(1.0),
7593 pointer_default(unique)
7595 interface IVsWebBrowserUser2 : IUnknown
7597 HRESULT GetWebBrowserContext([out] IServiceProvider** ppServiceProvider);
7600 //--------------------------------------------------------------------------------------------
7601 // IVsHasRelatedSaveItems
7602 // Provides additional save items.
7603 // Implemented by clients that want to provide additional items to appear in the Save Changes
7604 // dialog or to be saved when a specific item is saved.
7605 // The interface is QI-ed from the following objects:
7606 // - the docdata of the item
7607 // - the lock holders for the item
7608 // - the hierarchy owning the item
7609 // For instance, a lock holder keeping a lock on a document will be closed (by calling
7610 // CloseDocumentHolder) when the document is closed. If the lock holder closes additional
7611 // items in its CloseDocumentHolder implementation, the lock holder can implement the
7612 // interface and provide additional items to be included in the Save Changes dialog.
7613 //--------------------------------------------------------------------------------------------
7615 uuid(uuid_IVsHasRelatedSaveItems),
7616 version(1.0),
7617 pointer_default(unique)
7619 interface IVsHasRelatedSaveItems : IUnknown
7621 // If celt is zero and pcActual is not NULL, the number of VSSAVETREEITEM is returned in pcActual.
7622 // If celt is not zero, rgSaveTreeItems must not be NULL.
7624 // An extremely common pattern is something like (omitting error checks for readability):
7626 // hr = pIVsHasRelatedSaveItems->GetRelatedSaveTreeItems(saveItem, 0, NULL, &cExpected);
7627 // prgSaveTreeItems = ::CoTaskMemAlloc(cExpected * sizeof(VSSAVETREEITEM));
7628 // hr = pIVsHasRelatedSaveItems->GetRelatedSaveTreeItems(saveItem, cExpected, prgSaveTreeItems, &cActual);
7629 HRESULT GetRelatedSaveTreeItems([in] VSSAVETREEITEM saveItem, [in] ULONG celt, [in, out, size_is(celt)] VSSAVETREEITEM rgSaveTreeItems[], [out] ULONG *pcActual);