在AO中,打開“文件A”的基本流程是:
1、創建對應“文件A”類型的WorkspaceFactory;
2、用WorkspaceFactory創建“文件A”的Workspace,Workspace可以是文件所在文件夾(如本文后面要創建的ToolBox的Workspace),也可以是空間數據庫(如果你把文件存到數據庫里了或要打開數據庫里的數據)。
3、用Workspace打開“文件A”,獲得對應類型的“文件A”對象;
----------------------------------------------------好了,開始(這里,我的Toolbox路徑為F:\Root\Tools\MagmaDistribution.tbx)。
ArcGIS的每個Toolbox,在windows下都是一個.tbx文件。
通過AO的對象模型圖可以知道,在.Net里用GPToolbox對象來代表Toolbox,因此我們首先需要打開事先准備好的.tbx文件,並實創建一個GPToolbox對象來管理它。
1、創建一個ToolboxWorkspaceFactory對象。
2、ToolboxWorkspaceFactory來創建用於打.tbx文件的ToolboxWorkspace。
3、用ToolboxWorkspaceFactory通過.tbx文件的路徑創建GPToolbox對象。
這樣我們就創建了一個代表ToolBox的對象,代碼如下:
1 ToolboxWorkspaceFactory toolBoxWSF = new ToolboxWorkspaceFactoryClass();
2 IToolboxWorkspace toolBoxWS = (IToolboxWorkspace)toolBoxWSF.OpenFromFile("F:\\Root\\Tools", 0);
3 IGPToolbox toolbox = toolBoxWS.OpenToolbox("MagmaDistribution.tbx");
我的MagmaDistribution.tbx里放了3個tool,下面我們來獲得這四個tool的名字,並輸出到控制台:
1 //輸出toolbox的路徑信息
2 Console.WriteLine("IGPToolBox的PathName:" + toolbox.PathName);
3 //從IGPToolbox的ToolNames屬性獲得toolbox里3個tool的名字。
4 ESRI.ArcGIS.Geoprocessing.IEnumGPToolName toolName = toolbox.ToolNames;
5 IGPToolName gpn = toolName.Next();
6 while (gpn != null)
7 {//循環輸出tool的名字
8 Console.WriteLine(gpn.DisplayName);
9 gpn = toolName.Next();
10 }
運行效果:

完整代碼:
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using ESRI.ArcGIS.esriSystem;
5 using ESRI.ArcGIS.Geodatabase;
6 using ESRI.ArcGIS.DataSourcesGDB;
7 using ESRI.ArcGIS.Geoprocessing;
8
9 namespace esriTestConsole
10 {
11 class Program
12 {
13 private static LicenseInitializer m_AOLicenseInitializer = new esriTestConsole.LicenseInitializer();
14
15 [STAThread()]
16 static void Main(string[] args)
17 {
18 //ESRI License Initializer generated code.//這是創建ArcGIS控制台項目時自動生成的
19 m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeEngine, esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB, esriLicenseProductCode.esriLicenseProductCodeBasic, esriLicenseProductCode.esriLicenseProductCodeStandard, esriLicenseProductCode.esriLicenseProductCodeAdvanced },
20 new esriLicenseExtensionCode[] { esriLicenseExtensionCode.esriLicenseExtensionCodeNetwork, esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst });
21 //ESRI License Initializer generated code.
22 try
23 {
24 ToolboxWorkspaceFactory toolBoxWSF = new ToolboxWorkspaceFactoryClass();
25 IToolboxWorkspace toolBoxWS = (IToolboxWorkspace)toolBoxWSF.OpenFromFile("F:\\Root\\Tools", 0);
26 IGPToolbox toolbox = toolBoxWS.OpenToolbox("MagmaDistribution.tbx");
27 //輸出toolbox的路徑信息
28 Console.WriteLine("IGPToolBox的PathName:" + toolbox.PathName);
29 //從IGPToolbox的ToolNames屬性獲得toolbox里4個tool的名字。
30 ESRI.ArcGIS.Geoprocessing.IEnumGPToolName toolName = toolbox.ToolNames;
31 IGPToolName gpn = toolName.Next();
32 while (gpn != null)
33 {//循環輸出tool的名字
34 Console.WriteLine(gpn.DisplayName);
35 gpn = toolName.Next();
36 }
37
38 }
39 catch (Exception ex)
40 {
41 Console.WriteLine(ex.Message);
42 }
43 ////Do not make any call to ArcObjects after ShutDownApplication()
44 finally
45 {
46 Console.WriteLine("輸入任意字符退出程序:");
47 Console.Read();
48 m_AOLicenseInitializer.ShutdownApplication();
49 }
50 }
51 }
52 }
