Connect.cs
上传用户:jfy123
上传日期:2021-10-28
资源大小:14k
文件大小:9k
源码类别:

网络截获/分析

开发平台:

C++ Builder

  1. namespace DSWatch
  2. {
  3. using System;
  4. using Microsoft.Office.Core;
  5. using Extensibility;
  6. using System.Runtime.InteropServices;
  7. using EnvDTE;
  8. #region Read me for Add-in installation and setup information.
  9. // When run, the Add-in wizard prepared the registry for the Add-in.
  10. // At a later time, if the Add-in becomes unavailable for reasons such as:
  11. //   1) You moved this project to a computer other than which is was originally created on.
  12. //   2) You chose 'Yes' when presented with a message asking if you wish to remove the Add-in.
  13. //   3) Registry corruption.
  14. // you will need to re-register the Add-in by building the MyAddin21Setup project 
  15. // by right clicking the project in the Solution Explorer, then choosing install.
  16. #endregion
  17. /// <summary>
  18. ///   The object for implementing an Add-in.
  19. /// </summary>
  20. /// <seealso class='IDTExtensibility2' />
  21. [GuidAttribute("56B77928-BB44-45F5-BC31-EFFAAF5D1386"), ProgId("DSWatch.Connect")]
  22. public class Connect : Object, Extensibility.IDTExtensibility2, IDTCommandTarget
  23. {
  24. /// <summary>
  25. /// Implements the constructor for the Add-in object.
  26. /// Place your initialization code within this method.
  27. /// </summary>
  28. public Connect()
  29. {
  30. }
  31. /// <summary>
  32. ///      Implements the OnConnection method of the IDTExtensibility2 interface.
  33. ///      Receives notification that the Add-in is being loaded.
  34. /// </summary>
  35. /// <param term='application'>
  36. ///      Root object of the host application.
  37. /// </param>
  38. /// <param term='connectMode'>
  39. ///      Describes how the Add-in is being loaded.
  40. /// </param>
  41. /// <param term='addInInst'>
  42. ///      Object representing this Add-in.
  43. /// </param>
  44. /// <seealso class='IDTExtensibility2' />
  45. public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
  46. {
  47. applicationObject = (_DTE)application;
  48. addInInstance = (AddIn)addInInst;
  49. object []contextGUIDS = new object[] { };
  50. Commands commands = applicationObject.Commands;
  51.   
  52. _CommandBars commandBars = applicationObject.CommandBars;
  53. // When run, the Add-in wizard prepared the registry for the Add-in.
  54. // At a later time, the Add-in or its commands may become unavailable for reasons such as:
  55. //   1) You moved this project to a computer other than which is was originally created on.
  56. //   2) You chose 'Yes' when presented with a message asking if you wish to remove the Add-in.
  57. //   3) You add new commands or modify commands already defined.
  58. // You will need to re-register the Add-in by building the DSWatchSetup project,
  59. // right-clicking the project in the Solution Explorer, and then choosing install.
  60. // Alternatively, you could execute the ReCreateCommands.reg file the Add-in Wizard generated in
  61. // the project directory, or run 'devenv /setup' from a command prompt.
  62. try
  63. {
  64. // add the command to the right click context menu 
  65. // note that when I insert the command it's inserted disabled "(int)vsCommandStatus.vsCommandStatusUnsupported +(int)vsCommandStatus.vsCommandStatusInvisible"
  66. Command command = commands.AddNamedCommand
  67. ( addInInstance, "DSWatchNode" , "DataSet Quick Watch",
  68. "DataSet Quick Watch", true, 60, ref contextGUIDS,
  69. (int)vsCommandStatus.vsCommandStatusUnsupported
  70. +(int)vsCommandStatus.vsCommandStatusInvisible 
  71. );//too long :)
  72. CommandBar commandBar = (CommandBar)commandBars["Code Window"];
  73. CommandBarControl commandBarControl = command.AddControl(commandBar, 1);
  74. }
  75. catch(System.Exception /*e*/)
  76. {
  77. }
  78. }
  79. /// <summary>
  80. ///      Implements the QueryStatus method of the IDTCommandTarget interface.
  81. ///      This is called when the command's availability is updated
  82. /// </summary>
  83. /// <param term='commandName'>
  84. /// The name of the command to determine state for.
  85. /// </param>
  86. /// <param term='neededText'>
  87. /// Text that is needed for the command.
  88. /// </param>
  89. /// <param term='status'>
  90. /// The state of the command in the user interface.
  91. /// </param>
  92. /// <param term='commandText'>
  93. /// Text requested by the neededText parameter.
  94. /// </param>
  95. /// <seealso class='Exec' />
  96. public void QueryStatus(string commandName, EnvDTE.vsCommandStatusTextWanted neededText, ref EnvDTE.vsCommandStatus status, ref object commandText)
  97. {
  98. if(commandName == "DSWatch.Connect.DSWatchNode"&&IsDebugging() )
  99. {
  100. status = (vsCommandStatus)vsCommandStatus.vsCommandStatusSupported|vsCommandStatus.vsCommandStatusEnabled;
  101. }
  102. else 
  103. {
  104. status = (vsCommandStatus)vsCommandStatus.vsCommandStatusUnsupported |vsCommandStatus.vsCommandStatusInvisible ;
  105. }
  106. }
  107. /// <summary>
  108. ///      Implements the Exec method of the IDTCommandTarget interface.
  109. ///      This is called when the command is invoked.
  110. /// </summary>
  111. /// <param term='commandName'>
  112. /// The name of the command to execute.
  113. /// </param>
  114. /// <param term='executeOption'>
  115. /// Describes how the command should be run.
  116. /// </param>
  117. /// <param term='varIn'>
  118. /// Parameters passed from the caller to the command handler.
  119. /// </param>
  120. /// <param term='varOut'>
  121. /// Parameters passed from the command handler to the caller.
  122. /// </param>
  123. /// <param term='handled'>
  124. /// Informs the caller if the command was handled or not.
  125. /// </param>
  126. /// <seealso class='Exec' />
  127. public void Exec(string commandName, EnvDTE.vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
  128. {
  129. try
  130. {
  131. EnvDTE.Debugger debugger;
  132. debugger = applicationObject.Debugger;
  133. Expression expr ; 
  134. string str; 
  135. string isDataSetExpression=null ;
  136. string getXmlExpression=null;
  137. string fileExtintion ;
  138. TextSelection _TextSelection;
  139. _TextSelection=(TextSelection)applicationObject.ActiveDocument.Selection;
  140. str=_TextSelection.Text ;
  141. fileExtintion=applicationObject.ActiveDocument.FullName.Substring(applicationObject.ActiveDocument.FullName.Length-2 ) ;
  142. switch(fileExtintion.ToLower() )
  143. {
  144. case "cs":
  145. isDataSetExpression="(System.Data.DataSet)"+str+".Tables";
  146. getXmlExpression="((System.Data.DataSet)"+str+").GetXml()";
  147. break;
  148. case"vb":
  149. isDataSetExpression="ctype("+ str +",System.Data.DataSet).Tables";
  150. getXmlExpression="ctype("+ str +",System.Data.DataSet).GetXml()";
  151. break;
  152. }
  153. //cast the selcted text to dataset 
  154.                 expr = debugger.GetExpression(isDataSetExpression,true,500);
  155. //System.Windows.Forms.MessageBox.Show(expr.Value );
  156. if (expr.Value.IndexOf("error:")>-1)
  157. {
  158. System.Windows.Forms.MessageBox.Show("This is not a DataSet!");
  159. return;
  160. }
  161. DatasetWatchFrm _DatasetWatchFrm;
  162. _DatasetWatchFrm =new DatasetWatchFrm();
  163. expr = debugger.GetExpression(getXmlExpression,true,500);
  164. _DatasetWatchFrm.getXml(expr.Value  );
  165. _DatasetWatchFrm.Show(); 
  166. }
  167. catch(Exception  e)
  168. {
  169. System.Windows.Forms.MessageBox.Show(e.Message );
  170. }
  171. }
  172. /// <summary>
  173. /// this function test the ide environment if it in debug mood or not 
  174. /// i took this function from MSDN
  175. /// </summary>
  176. /// <returns>boolean</returns>
  177. private bool IsDebugging()
  178. {
  179. EnvDTE.Debugger debugger ;
  180. debugger = applicationObject.Debugger;
  181. if (debugger==null)
  182. return false;
  183. else
  184. {
  185. return(debugger.CurrentMode != dbgDebugMode.dbgDesignMode);
  186. }
  187. }
  188. /// <summary>
  189. ///     Implements the OnDisconnection method of the IDTExtensibility2 interface.
  190. ///     Receives notification that the Add-in is being unloaded.
  191. /// </summary>
  192. /// <param term='disconnectMode'>
  193. ///      Describes how the Add-in is being unloaded.
  194. /// </param>
  195. /// <param term='custom'>
  196. ///      Array of parameters that are host application specific.
  197. /// </param>
  198. /// <seealso class='IDTExtensibility2' />
  199. public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom)
  200. {
  201. }
  202. /// <summary>
  203. ///      Implements the OnAddInsUpdate method of the IDTExtensibility2 interface.
  204. ///      Receives notification that the collection of Add-ins has changed.
  205. /// </summary>
  206. /// <param term='custom'>
  207. ///      Array of parameters that are host application specific.
  208. /// </param>
  209. /// <seealso class='IDTExtensibility2' />
  210. public void OnAddInsUpdate(ref System.Array custom)
  211. {
  212. }
  213. /// <summary>
  214. ///      Implements the OnStartupComplete method of the IDTExtensibility2 interface.
  215. ///      Receives notification that the host application has completed loading.
  216. /// </summary>
  217. /// <param term='custom'>
  218. ///      Array of parameters that are host application specific.
  219. /// </param>
  220. /// <seealso class='IDTExtensibility2' />
  221. public void OnStartupComplete(ref System.Array custom)
  222. {
  223. }
  224. /// <summary>
  225. ///      Implements the OnBeginShutdown method of the IDTExtensibility2 interface.
  226. ///      Receives notification that the host application is being unloaded.
  227. /// </summary>
  228. /// <param term='custom'>
  229. ///      Array of parameters that are host application specific.
  230. /// </param>
  231. /// <seealso class='IDTExtensibility2' />
  232. public void OnBeginShutdown(ref System.Array custom)
  233. {
  234. }
  235. private _DTE applicationObject;
  236. private AddIn addInInstance;
  237. }
  238. }