And through his info ( all vb.net stuff ) I got a few helper things.
1) Finding the Full Path to the Project of the current Selected Item.
1: UIHierarchy UIH = _applicationObject.ToolWindows.SolutionExplorer;
2:
3: // Get the first selected item, intended for right click on slnExplorer
4: UIHierarchyItem fld = (UIHierarchyItem)((System.Array)UIH.SelectedItems).GetValue(0);
5:
6: // cast and retrieve the project item for that object.
7: ProjectItem prj = fld.Object as ProjectItem;
8:
9: // in my case i wanted to make sure we are dealing with a physical folder
10: // however you may just want the path, so keep reading.
11: if (prj.Kind == EnvDTE.Constants.vsProjectItemKindPhysicalFolder)
12: { 13: string strProjPath = prj.ContainingProject.Properties.Item("FullPath").Value.ToString(); 14: string strFolderPath = strProjPath + "/" + fld.Name;
15:
16: System.Windows.Forms.MessageBox.Show(strFolderPath);
17: }
That shows you how to get the project path, which is the only item I have found that allows you to access Path.
From there you have to manually use the hierarchy tree to find your items.
Here are two more methods, I borrowed from Chetan from the MSDN forums, which allow you to decode .Kind into
what kind of object you have retrieved. A few of the more interesting ones I have used:
vsProjectItemKindPhysicalFolder
vsProjectItemKindPhysicalFile
vsProjectItemKindVirtualFolder
1: private string DecodeProjectItemKind(string sProjectItemKind)
2: { 3: string sResult;
4:
5: switch(sProjectItemKind)
6: { 7: case EnvDTE.Constants.vsProjectItemKindMisc:
8: sResult = "EnvDTE.Constants.vsProjectItemKindMisc";
9: break;
10: case EnvDTE.Constants.vsProjectItemKindPhysicalFile:
11: sResult = "EnvDTE.Constants.vsProjectItemKindPhysicalFile";
12: break;
13: case EnvDTE.Constants.vsProjectItemKindPhysicalFolder:
14: sResult = "EnvDTE.Constants.vsProjectItemKindPhysicalFolder";
15: break;
16: case EnvDTE.Constants.vsProjectItemKindSolutionItems:
17: sResult = "EnvDTE.Constants.vsProjectItemKindSolutionItems";
18: break;
19: case EnvDTE.Constants.vsProjectItemKindSubProject:
20: sResult = "EnvDTE.Constants.vsProjectItemKindSubProject";
21: break;
22: case EnvDTE.Constants.vsProjectItemKindVirtualFolder:
23: sResult = "EnvDTE.Constants.vsProjectItemKindVirtualFolder";
24: break;
25: default:
26: sResult = "";
27: break;
28: }
29:
30: return sResult;
31:
32: }
33:
34: private string DecodeProjectKind(string sProjectKind)
35: { 36: string PROJECT_KIND_ENTERPRISE_PROJECT = "{7D353B21-6E36-11D2-B35A-0000F81F0C06}"; 37: string PROJECT_KIND_CPLUSPLUS_PROJECT = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"; 38: string PROJECT_KIND_VSNET_SETUP = "{54435603-DBB4-11D2-8724-00A0C9A8B90C}"; 39:
40: string sResult = string.Empty;
41:
42: switch (sProjectKind.ToUpper())
43: { 44: case VSLangProj.PrjKind.prjKindVBProject.ToUpper():
45: sResult = "VSLangProj.PrjKind.prjKindVBProject";
46: case VSLangProj.PrjKind.prjKindCSharpProject.ToUpper():
47: sResult = "VSLangProj.PrjKind.prjKindCSharpProject";
48: case VSLangProj2.PrjKind2.prjKindVJSharpProject:
49: sResult = "VSLangProj2.PrjKind2.prjKindVJSharpProject";
50: case VSLangProj2.PrjKind2.prjKindSDEVBProject:
51: sResult = "VSLangProj2.PrjKind2.prjKindSDEVBProject";
52: case VSLangProj2.PrjKind2.prjKindSDECSharpProject:
53: sResult = "VSLangProj2.PrjKind2.prjKindSDECSharpProject";
54: case EnvDTE.Constants.vsProjectKindMisc.ToUpper():
55: sResult = "EnvDTE.Constants.vsProjectKindMisc";
56: case EnvDTE.Constants.vsProjectKindSolutionItems.ToUpper():
57: sResult = "EnvDTE.Constants.vsProjectKindSolutionItems";
58: case EnvDTE.Constants.vsProjectKindUnmodeled.ToUpper():
59: sResult = "EnvDTE.Constants.vsProjectKindUnmodeled";
60: case VSLangProj.PrjKind.prjKindVSAProject.ToUpper():
61: sResult = "VSLangProj.PrjKind.prjKindVSAProject";
62: case PROJECT_KIND_ENTERPRISE_PROJECT:
63: sResult = "Enterprise project";
64: case PROJECT_KIND_CPLUSPLUS_PROJECT:
65: sResult = "C++ project";
66: case PROJECT_KIND_VSNET_SETUP:
67: sResult = "Setup project";
68: default:
69: sResult = "";
70: }
71:
72: return sResult;
73: }
Correction: The DecodeProjectKind Method should look like this:
private string DecodeProjectKind(string sProjectKind){
string PROJECT_KIND_ENTERPRISE_PROJECT = "{7D353B21-6E36-11D2-B35A-0000F81F0C06}";string PROJECT_KIND_CPLUSPLUS_PROJECT = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}";string PROJECT_KIND_VSNET_SETUP = "{54435603-DBB4-11D2-8724-00A0C9A8B90C}";string sResult = string.Empty;string match = sProjectKind.ToUpper();if (match == VSLangProj.PrjKind.prjKindVBProject.ToUpper())sResult =
"VSLangProj.PrjKind.prjKindVBProject";else if (match == VSLangProj.PrjKind.prjKindCSharpProject.ToUpper())sResult =
"VSLangProj.PrjKind.prjKindCSharpProject";else if (match == VSLangProj2.PrjKind2.prjKindVJSharpProject)sResult =
"VSLangProj2.PrjKind2.prjKindVJSharpProject";else if (match == VSLangProj2.PrjKind2.prjKindSDEVBProject)sResult =
"VSLangProj2.PrjKind2.prjKindSDEVBProject";else if (match == VSLangProj2.PrjKind2.prjKindSDECSharpProject)sResult =
"VSLangProj2.PrjKind2.prjKindSDECSharpProject";else if (match == EnvDTE.Constants.vsProjectKindMisc.ToUpper())sResult =
"EnvDTE.Constants.vsProjectKindMisc";else if (match == EnvDTE.Constants.vsProjectKindSolutionItems.ToUpper())sResult =
"EnvDTE.Constants.vsProjectKindSolutionItems";else if (match == EnvDTE.Constants.vsProjectKindUnmodeled.ToUpper())sResult =
"EnvDTE.Constants.vsProjectKindUnmodeled";else if (match == VSLangProj.PrjKind.prjKindVSAProject.ToUpper())sResult =
"VSLangProj.PrjKind.prjKindVSAProject";else if (match == PROJECT_KIND_ENTERPRISE_PROJECT)sResult =
"Enterprise project";else if (match == PROJECT_KIND_CPLUSPLUS_PROJECT)sResult =
"C++ project";else if (match == PROJECT_KIND_VSNET_SETUP)sResult =
"Setup project";elsesResult =
"";
return sResult;}