DotNet 4.8.1 build of DotNetBar
This commit is contained in:
427
PROMS/DotNetBar Source Code/DesignTimeDte.cs
Normal file
427
PROMS/DotNetBar Source Code/DesignTimeDte.cs
Normal file
@@ -0,0 +1,427 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Windows.Forms;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace DevComponents.DotNetBar
|
||||
{
|
||||
/// <summary>
|
||||
/// Summary description for DesignTimeDte.
|
||||
/// </summary>
|
||||
public class DesignTimeDte
|
||||
{
|
||||
public static string GetProjectPath(IServiceProvider service)
|
||||
{
|
||||
object dte=DesignTimeDte.GetDTE(service);
|
||||
//EnvDTE.DTE dte=System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE") as EnvDTE.DTE;
|
||||
if(dte!=null)
|
||||
{
|
||||
System.Array pjs=dte.GetType().InvokeMember("ActiveSolutionProjects",BindingFlags.GetProperty,null,dte, new object []{}) as System.Array;
|
||||
if(pjs==null)
|
||||
{
|
||||
//MessageBox.Show("Failed to get ActiveSolutionProjects");
|
||||
return "";
|
||||
}
|
||||
if(pjs.Length>0)
|
||||
{
|
||||
object project=pjs.GetValue(0);
|
||||
//MessageBox.Show(((EnvDTE.Project)project).Properties.Item("FullPath").Value.ToString());
|
||||
object properties=project.GetType().InvokeMember("Properties",BindingFlags.GetProperty,null,project, new object []{});
|
||||
if(properties!=null)
|
||||
{
|
||||
object item=properties.GetType().InvokeMember("Item",BindingFlags.InvokeMethod,null,properties, new object []{"FullPath"});
|
||||
if(item!=null)
|
||||
{
|
||||
object val=item.GetType().InvokeMember("Value",BindingFlags.GetProperty,null,item, new object []{});
|
||||
if(val!=null && val is string)
|
||||
return val.ToString();
|
||||
}
|
||||
//else
|
||||
// MessageBox.Show("Failed to get item");
|
||||
}
|
||||
//else
|
||||
// MessageBox.Show("Failed to get properties");
|
||||
}
|
||||
//else
|
||||
// MessageBox.Show("PJS length is ZERO");
|
||||
}
|
||||
//else
|
||||
// MessageBox.Show("Failed to get DTE");
|
||||
return "";
|
||||
}
|
||||
|
||||
public static string GetDefinitionPath(string definitionName, IServiceProvider service)
|
||||
{
|
||||
// In design-time our document has to be open for definition to be loaded
|
||||
//EnvDTE.DTE dte=GetMSDEVFromGIT("VisualStudio.DTE",System.Diagnostics.Process.GetCurrentProcess().Id.ToString()) as EnvDTE.DTE;
|
||||
object dte=DesignTimeDte.GetDTE(service); //GetMSDEVFromGIT("VisualStudio.DTE",System.Diagnostics.Process.GetCurrentProcess().Id.ToString());
|
||||
if(dte==null)
|
||||
return "";
|
||||
//EnvDTE.Document doc=dte.ActiveDocument;
|
||||
object doc=dte.GetType().InvokeMember("ActiveDocument",BindingFlags.GetProperty,null,dte, new object []{});
|
||||
if(doc!=null)
|
||||
{
|
||||
//string docPath=doc.Path;
|
||||
string docPath=(string)doc.GetType().InvokeMember("Path",BindingFlags.GetProperty,null,doc, new object []{});
|
||||
if(!docPath.EndsWith("\\"))
|
||||
docPath+="\\";
|
||||
if(System.IO.File.Exists(docPath+definitionName))
|
||||
return docPath;
|
||||
}
|
||||
// Enumerate open documents and try to find our definition in thier path
|
||||
object documents=dte.GetType().InvokeMember("Documents",BindingFlags.GetProperty,null,dte, new object []{});
|
||||
//foreach(EnvDTE.Document doc1 in dte.Documents)
|
||||
int count=(int)documents.GetType().InvokeMember("Count",BindingFlags.GetProperty,null,documents, new object []{});
|
||||
for(int i=1;i<=count;i++)
|
||||
{
|
||||
object doc1=documents.GetType().InvokeMember("Item",BindingFlags.InvokeMethod,null,documents, new object []{i});
|
||||
//string docPath=doc1.Path;
|
||||
string docPath=(string)doc1.GetType().InvokeMember("Path",BindingFlags.GetProperty,null,doc1, new object []{});
|
||||
if(!docPath.EndsWith("\\"))
|
||||
docPath+="\\";
|
||||
if(System.IO.File.Exists(docPath+definitionName))
|
||||
return docPath;
|
||||
}
|
||||
// In need just return project path...
|
||||
return GetProjectPath(service);
|
||||
}
|
||||
|
||||
public static string GetActiveDocumentPath(IServiceProvider service)
|
||||
{
|
||||
// In design-time our document has to be open for definition to be loaded
|
||||
//EnvDTE.DTE dte=GetMSDEVFromGIT("VisualStudio.DTE",System.Diagnostics.Process.GetCurrentProcess().Id.ToString()) as EnvDTE.DTE;
|
||||
//EnvDTE.Document doc=dte.ActiveDocument;
|
||||
object dte=DesignTimeDte.GetDTE(service); //GetMSDEVFromGIT("VisualStudio.DTE",System.Diagnostics.Process.GetCurrentProcess().Id.ToString());
|
||||
if(dte==null)
|
||||
return "";
|
||||
object doc=dte.GetType().InvokeMember("ActiveDocument",BindingFlags.GetProperty,null,dte, new object []{});
|
||||
if(doc!=null)
|
||||
{
|
||||
string docPath=(string)doc.GetType().InvokeMember("Path",BindingFlags.GetProperty,null,doc, new object []{}); //doc.Path;
|
||||
if(!docPath.EndsWith("\\"))
|
||||
docPath+="\\";
|
||||
return docPath;
|
||||
}
|
||||
// In need just return project path...
|
||||
return GetProjectPath(service);
|
||||
}
|
||||
|
||||
public static bool AddFileToProject(string filename, IServiceProvider service)
|
||||
{
|
||||
bool ret=false;
|
||||
object dte=DesignTimeDte.GetDTE(service); //GetMSDEVFromGIT("VisualStudio.DTE",System.Diagnostics.Process.GetCurrentProcess().Id.ToString());
|
||||
if(dte!=null)
|
||||
{
|
||||
// System.Array pjs=dte.GetType().InvokeMember("ActiveSolutionProjects",BindingFlags.GetProperty,null,dte, new object []{}) as System.Array;
|
||||
// if(pjs==null)
|
||||
// return false;
|
||||
//
|
||||
// if(pjs.Length>0)
|
||||
// {
|
||||
// object project=pjs.GetValue(0);
|
||||
// }
|
||||
object itemOperations=dte.GetType().InvokeMember("ItemOperations",BindingFlags.GetProperty,null,dte, new object []{});
|
||||
if(itemOperations!=null)
|
||||
{
|
||||
object projectItem=itemOperations.GetType().InvokeMember("AddExistingItem",BindingFlags.InvokeMethod,null,itemOperations, new object []{filename});
|
||||
if(projectItem!=null)
|
||||
{
|
||||
try
|
||||
{
|
||||
object props=projectItem.GetType().InvokeMember("Properties",BindingFlags.GetProperty,null,projectItem, new object []{});
|
||||
if(props!=null)
|
||||
{
|
||||
object item=props.GetType().InvokeMember("Item",BindingFlags.InvokeMethod,null,props, new object []{"BuildAction"});
|
||||
if(item!=null)
|
||||
{
|
||||
item.GetType().InvokeMember("Value",BindingFlags.SetProperty,null,item, new object []{3});
|
||||
ret=true;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
ret=true;
|
||||
}
|
||||
}
|
||||
}
|
||||
//EnvDTE.ProjectItem item=dte.ItemOperations.AddExistingItem(filename);
|
||||
//item.Properties.Item("BuildAction").Value=3;
|
||||
// foreach(EnvDTE.Property prop in item.Properties)
|
||||
// {
|
||||
// MessageBox.Show(prop.Name+" "+prop.Value);
|
||||
// }
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
//public static bool DeleteFromProject(string filename, IServiceProvider service)
|
||||
//{
|
||||
// try
|
||||
// {
|
||||
// object dte=DesignTimeDte.GetDTE(service); //GetMSDEVFromGIT("VisualStudio.DTE",System.Diagnostics.Process.GetCurrentProcess().Id.ToString());
|
||||
// if(dte==null)
|
||||
// return false;
|
||||
|
||||
// System.Array pjs=dte.GetType().InvokeMember("ActiveSolutionProjects",BindingFlags.GetProperty,null,dte, new object []{}) as System.Array;
|
||||
// if(pjs==null)
|
||||
// return false;
|
||||
|
||||
// object project=null;
|
||||
// if(pjs.Length>0)
|
||||
// project=pjs.GetValue(0);
|
||||
// if(project==null)
|
||||
// return false;
|
||||
|
||||
// object pjItems=project.GetType().InvokeMember("ProjectItems",BindingFlags.GetProperty,null,project, new object []{});
|
||||
// if(pjItems==null)
|
||||
// return false;
|
||||
|
||||
// object pjItem=pjItems.GetType().InvokeMember("Item",BindingFlags.InvokeMethod,null,pjItems, new object []{filename});
|
||||
// //project.ProjectItems.Item(filename) as EnvDTE.ProjectItem;
|
||||
// if(pjItem==null)
|
||||
// return false;
|
||||
|
||||
// pjItem.GetType().InvokeMember("Delete",BindingFlags.InvokeMethod,null,pjItem, new object []{});
|
||||
// return true;
|
||||
// }
|
||||
// catch(Exception){}
|
||||
// return false;
|
||||
//}
|
||||
|
||||
public static bool ExistInProject(string filename, IServiceProvider service)
|
||||
{
|
||||
// EnvDTE.DTE dte=GetMSDEVFromGIT("VisualStudio.DTE",System.Diagnostics.Process.GetCurrentProcess().Id.ToString()) as EnvDTE.DTE;
|
||||
// if(dte==null)
|
||||
// return false;
|
||||
// Array projects=dte.ActiveSolutionProjects as Array;
|
||||
object dte=DesignTimeDte.GetDTE(service); //GetMSDEVFromGIT("VisualStudio.DTE",System.Diagnostics.Process.GetCurrentProcess().Id.ToString());
|
||||
if(dte==null)
|
||||
return false;
|
||||
|
||||
System.Array projects=dte.GetType().InvokeMember("ActiveSolutionProjects",BindingFlags.GetProperty,null,dte, new object []{}) as System.Array;
|
||||
if(projects==null)
|
||||
return false;
|
||||
foreach(object pj in projects)
|
||||
{
|
||||
object pji=pj.GetType().InvokeMember("ProjectItems",BindingFlags.GetProperty,null,pj, new object []{});
|
||||
int count=(int)pji.GetType().InvokeMember("Count",BindingFlags.GetProperty,null,pji, new object []{});
|
||||
//foreach(EnvDTE.ProjectItem pi in pj.ProjectItems)
|
||||
for(int i=1;i<=count;i++)
|
||||
{
|
||||
object pi=pji.GetType().InvokeMember("Item",BindingFlags.InvokeMethod,null,pji, new object []{i});
|
||||
if(CheckProjectItem(pi,filename))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool CheckProjectItem(object pi,string filename)
|
||||
{
|
||||
try
|
||||
{
|
||||
string name=(string)pi.GetType().InvokeMember("Name",BindingFlags.GetProperty,null,pi, new object []{});
|
||||
if(name.ToLower()==filename.ToLower())
|
||||
return true;
|
||||
short fileCount=(short)pi.GetType().InvokeMember("FileCount",BindingFlags.GetProperty,null,pi, new object []{});
|
||||
for(short i=0;i<fileCount;i++)
|
||||
{
|
||||
//string fn=pi.get_FileNames(i);
|
||||
string fn=(string)pi.GetType().InvokeMember("get_FileNames",BindingFlags.GetProperty,null,pi, new object []{i});
|
||||
if(fn.ToLower().EndsWith(filename.ToLower()))
|
||||
return true;
|
||||
}
|
||||
object pji=pi.GetType().InvokeMember("ProjectItems",BindingFlags.GetProperty,null,pi, new object []{});
|
||||
int count=(int)pji.GetType().InvokeMember("Count",BindingFlags.GetProperty,null,pji, new object []{});
|
||||
for(int i=1;i<=count;i++)
|
||||
//foreach(EnvDTE.ProjectItem item in pi.ProjectItems)
|
||||
{
|
||||
object pItem=pji.GetType().InvokeMember("Item",BindingFlags.InvokeMethod,null,pji, new object []{i});
|
||||
if(CheckProjectItem(pItem,filename))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch(Exception){}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool ExistInProject2(string filename, IServiceProvider service)
|
||||
{
|
||||
try
|
||||
{
|
||||
object dte=DesignTimeDte.GetDTE(service); //GetMSDEVFromGIT("VisualStudio.DTE",System.Diagnostics.Process.GetCurrentProcess().Id.ToString());
|
||||
if(dte==null)
|
||||
return false;
|
||||
|
||||
System.Array pjs=dte.GetType().InvokeMember("ActiveSolutionProjects",BindingFlags.GetProperty,null,dte, new object []{}) as System.Array;
|
||||
if(pjs==null)
|
||||
return false;
|
||||
|
||||
object project=null;
|
||||
if(pjs.Length>0)
|
||||
project=pjs.GetValue(0);
|
||||
if(project==null)
|
||||
return false;
|
||||
|
||||
object pjItems=project.GetType().InvokeMember("ProjectItems",BindingFlags.GetProperty,null,project, new object []{});
|
||||
if(pjItems==null)
|
||||
return false;
|
||||
|
||||
object pjItem=pjItems.GetType().InvokeMember("Item",BindingFlags.InvokeMethod,null,pjItems, new object []{filename});
|
||||
if(pjItem==null)
|
||||
return false;
|
||||
}
|
||||
catch(Exception)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool CheckOutFile(string filename, IServiceProvider service)
|
||||
{
|
||||
try
|
||||
{
|
||||
object dte=DesignTimeDte.GetDTE(service); //GetMSDEVFromGIT("VisualStudio.DTE",System.Diagnostics.Process.GetCurrentProcess().Id.ToString());
|
||||
if(dte==null)
|
||||
return false;
|
||||
object sctrl=dte.GetType().InvokeMember("SourceControl",BindingFlags.GetProperty,null,dte, new object []{});
|
||||
if(sctrl==null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
object res=sctrl.GetType().InvokeMember("IsItemUnderSCC",BindingFlags.InvokeMethod,null,sctrl, new object []{filename});
|
||||
if(res!=null && res is bool && (bool)res==true)
|
||||
{
|
||||
res=sctrl.GetType().InvokeMember("CheckOutItem",BindingFlags.InvokeMethod,null,sctrl, new object []{filename});
|
||||
if(res!=null && res is bool)
|
||||
return (bool)res;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch(Exception){}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static object GetDTE(IServiceProvider service)
|
||||
{
|
||||
object dte=GetMSDEVFromGIT("VisualStudio.DTE",System.Diagnostics.Process.GetCurrentProcess().Id.ToString());
|
||||
if(dte==null)
|
||||
dte=GetMSDEVFromGIT(".DTE",System.Diagnostics.Process.GetCurrentProcess().Id.ToString());
|
||||
if(dte==null && service!=null)
|
||||
{
|
||||
Assembly[] loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
|
||||
foreach (Assembly a in loadedAssemblies)
|
||||
{
|
||||
if (a.FullName.ToLower().StartsWith("envdte"))
|
||||
{
|
||||
Type t=a.GetType("EnvDTE._DTE", false, true);
|
||||
if (t != null)
|
||||
{
|
||||
dte=service.GetService(t);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return dte;
|
||||
}
|
||||
|
||||
#if FRAMEWORK20
|
||||
[DllImport("ole32.dll")]
|
||||
public static extern int GetRunningObjectTable(int reserved, out
|
||||
System.Runtime.InteropServices.ComTypes.IRunningObjectTable prot);
|
||||
[DllImport("ole32.dll")]
|
||||
public static extern int CreateBindCtx(int reserved, out System.Runtime.InteropServices.ComTypes.IBindCtx
|
||||
ppbc);
|
||||
|
||||
[STAThread]
|
||||
public static object GetMSDEVFromGIT(string strProgID, string processId)
|
||||
{
|
||||
System.Runtime.InteropServices.ComTypes.IRunningObjectTable prot;
|
||||
System.Runtime.InteropServices.ComTypes.IEnumMoniker pMonkEnum;
|
||||
try
|
||||
{
|
||||
GetRunningObjectTable(0, out prot);
|
||||
prot.EnumRunning(out pMonkEnum);
|
||||
pMonkEnum.Reset(); // Churn through enumeration.
|
||||
IntPtr fetched=IntPtr.Zero;
|
||||
System.Runtime.InteropServices.ComTypes.IMoniker[] pmon = new System.Runtime.InteropServices.ComTypes.IMoniker[1];
|
||||
while (pMonkEnum.Next(1, pmon, fetched) == 0)
|
||||
{
|
||||
System.Runtime.InteropServices.ComTypes.IBindCtx pCtx;
|
||||
CreateBindCtx(0, out pCtx);
|
||||
string str;
|
||||
pmon[0].GetDisplayName(pCtx, null, out str);
|
||||
// #if DEBUG
|
||||
// System.Windows.Forms.MessageBox.Show(str+" strProgId="+strProgID+" processId="+processId);
|
||||
// #endif
|
||||
if (str.IndexOf(strProgID) > 0 && (str.IndexOf(":" + processId) > 0 || processId == ""))
|
||||
{
|
||||
object objReturnObject;
|
||||
prot.GetObject(pmon[0], out objReturnObject);
|
||||
object ide = (object)objReturnObject;
|
||||
return ide;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
#else
|
||||
[DllImport("ole32.dll")]
|
||||
public static extern int GetRunningObjectTable(int reserved, out
|
||||
UCOMIRunningObjectTable prot);
|
||||
[DllImport("ole32.dll")]
|
||||
public static extern int CreateBindCtx(int reserved, out UCOMIBindCtx
|
||||
ppbc);
|
||||
|
||||
[STAThread]
|
||||
public static object GetMSDEVFromGIT(string strProgID, string processId)
|
||||
{
|
||||
UCOMIRunningObjectTable prot;
|
||||
UCOMIEnumMoniker pMonkEnum;
|
||||
try
|
||||
{
|
||||
GetRunningObjectTable(0,out prot);
|
||||
prot.EnumRunning(out pMonkEnum);
|
||||
pMonkEnum.Reset(); // Churn through enumeration.
|
||||
int fetched;
|
||||
UCOMIMoniker []pmon = new UCOMIMoniker[1];
|
||||
while(pMonkEnum.Next(1, pmon, out fetched) == 0)
|
||||
{
|
||||
UCOMIBindCtx pCtx;
|
||||
CreateBindCtx(0, out pCtx);
|
||||
string str;
|
||||
pmon[0].GetDisplayName(pCtx,null,out str);
|
||||
// #if DEBUG
|
||||
// System.Windows.Forms.MessageBox.Show(str+" strProgId="+strProgID+" processId="+processId);
|
||||
// #endif
|
||||
if(str.IndexOf(strProgID)>0 && (str.IndexOf(":"+processId)>0 || processId==""))
|
||||
{
|
||||
object objReturnObject;
|
||||
prot.GetObject(pmon[0],out objReturnObject);
|
||||
object ide = (object)objReturnObject;
|
||||
return ide;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user