Interaction.GetObject 方法
傳回 COM 元件提供之物件的參考。
命名空間: Microsoft.VisualBasic
組件: Microsoft.VisualBasic (在 microsoft.visualbasic.dll 中)
語法
'宣告
Public Shared Function GetObject ( _
<OptionalAttribute> Optional PathName As String = Nothing, _
<OptionalAttribute> Optional Class As String = Nothing _
) As Object
'用途
Dim PathName As String
Dim Class As String
Dim returnValue As Object
returnValue = Interaction.GetObject(PathName, Class)
public static Object GetObject (
[OptionalAttribute] string PathName,
[OptionalAttribute] string Class
)
public:
static Object^ GetObject (
[OptionalAttribute] String^ PathName,
[OptionalAttribute] String^ Class
)
public static Object GetObject (
/** @attribute OptionalAttribute() */ String PathName,
/** @attribute OptionalAttribute() */ String Class
)
public static function GetObject (
PathName : String,
Class : String
) : Object
參數
- PathName
選擇項。String。包含要擷取之物件的檔案完整路徑和名稱。如果省略 PathName,則將需要 Class。
Class
如果未提供 PathName,則將需要它。String。表示物件類別的字串。Class 引數具有下列語法和組成部分:appname
.
objecttype參數
描述
appname
必要項。String。提供物件的應用程式名稱。
objecttype
必要項。String。要建立物件的型別或類別。
傳回值
傳回 COM 元件提供之物件的參考。
備註
如需詳細資訊,請參閱 Visual Basic 的主題 GetObject 函式 (Visual Basic)。
使用 GetObject 函式,從檔案中載入 COM 元件的執行個體。下列範例將說明這項作業。
Dim CADObject As Object
CADObject = GetObject("C:\CAD\schema.cad")
當此程式碼執行時,會啟動與指定之 PathName 相關聯的應用程式,且會啟動指定之檔案中的物件。
預設情況
如果 PathName 是長度為零的字串 (""),則 GetObject 會傳回指定之類別型別的新物件執行個體。如果省略了 PathName 引數,則 GetObject 會傳回目前在 Class 中指定之類別型別的使用中物件。如果沒有指定之型別的物件存在,則會發生錯誤。
存取子物件
某些應用程式可讓您啟動與檔案關聯的子物件。若要這麼做,請在檔名後面加上驚嘆號 (!),並在其後加上可識別所要啟動檔案部分的字串。如需如何建立此一字串的資訊,請參閱建立該物件之應用程式的文件。
例如,繪圖應用程式中,檔案中儲存的圖形可能含有許多層。您可以使用下列程式碼,在稱為 schema.cad
的繪圖中啟動圖層。
layerObject = GetObject("C:\CAD\schema.cad!Layer3")
指定類別
如果您未指定物件的 Class,Automation 可根據您提供的檔名,判斷要啟動的應用程式以及要啟動的物件。不過,某些檔案可以支援一種以上的物件類別。例如,繪圖可能會支援三個不同的物件型別:Application
物件、Drawing
物件和 Toolbar
物件,這三個物件都是相同檔案的一部分。若要指定檔案中要啟動的物件,請使用選擇性的 Class 引數。下列範例將說明這項作業。
Dim drawObj As Object
drawObj = GetObject("C:\Drawings\sample.drw", "Figment.Drawing")
在之前的範例中,Figment
是繪圖應用程式的名稱,而 Drawing
則是它所支援的其中一個物件型別。
使用物件
一旦物件啟動後,您可以使用您已宣告的物件變數,在程式碼中參考此物件。在之前的範例中,您是利用物件變數 drawObj
來存取新物件的屬性和方法。下列範例將說明這項作業。
drawObj.Line(9, 90)
drawObj.InsertText(9, 100, "Hello, world.")
drawObj.SaveAs("C:\Drawings\sample.drw")
![]() |
---|
當物件目前有執行個體,或您想用載入的檔案來建立物件時,可使用 GetObject 函式。如果目前沒有執行個體,且您不想在載入檔案的情況下啟動物件,請使用 CreateObject 函式 (Visual Basic)。 如果物件將它本身註冊為 ActiveX 單一執行個體物件,則不論 CreateObject 呼叫多少次,都只會建立一個物件執行個體。在使用單一執行個體物件時,當使用長度為零的字串 ("") 語法呼叫 GetObject 時,它一定會傳回相同的執行個體,且如果省略 PathName 引數,則會產生錯誤。您無法使用 GetObject 取得以 Visual Basic 建立之類別的參考。 |
![]() |
---|
GetObject 函式需要 Unmanaged 程式碼的使用權限,而該權限在部分信任的情況下,可能會影響其執行。如需詳細資訊,請參閱 SecurityPermission 和 程式碼存取使用權限。 |
範例
下列範例使用 GetObject 函式取得特定 Microsoft Excel 工作表的參考 (excelObj
)。它會使用工作表的 Application 屬性來顯示及關閉 Excel,以及執行其他動作。使用兩個 API 呼叫後,detectExcel
程序會尋找 Excel;如果 Excel 在執行中,則會將它輸入執行中的物件表內。如果 Excel 目前不在執行中,則第一個 GetObject 呼叫會產生錯誤,此範例中則會讓 excelWasNotRunning
旗標設定為 True。第二個 GetObject 呼叫會指定要開啟的檔案。如果 Excel 目前不在執行中,則第二個呼叫會啟動它,並傳回指定之檔案 test.xls
所表示之工作表的參考。這個檔案必須存在於指定的位置中,否則 Visual Basic 會擲回 FileNotFoundException。接下來,此程式碼範例會同時顯示 Excel 和包含指定之工作表的視窗。
此範例需要有 Option Strict Off,因為它會使用晚期繫結 (此情況下會將物件指派給型別 Object 的變數)。如果您從 Visual Studio 中 [專案] 功能表的 [加入參考] 對話方塊的 [COM] 索引標籤加入 Excel 型別程式庫的參考,則可以指定 Option Strict On 及宣告特定物件型別的物件。
' Add Option Strict Off to the top of your program.
Option Strict Off
' Declare necessary API routines.
Declare Function findWindow Lib "user32.dll" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As Long) As Long
Declare Function sendMessage Lib "user32.dll" Alias _
"SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Sub getExcel()
Dim excelObj As Object
Dim excelWasNotRunning As Boolean
' Test to see if a copy of Excel is already running.
On Error Resume Next
' GetObject called without the first argument returns a
' reference to an instance of the application. If the
' application is not already running, an error occurs.
excelObj = GetObject(, "Excel.Application")
If Err().Number <> 0 Then excelWasNotRunning = True
Err().Clear()
' If Excel is running, enter it into the Running Object table.
detectExcel()
' Set the object variable to refer to the file you want to use.
excelObj = GetObject("c:\vb\test.xls")
' Show Excel through its Application property. Then show the
' window containing the file, using the Windows collection of
' the excelObj object reference.
excelObj.Application.Visible = True
excelObj.Parent.Windows(1).Visible = True
' Insert code to manipulate the test.xls file here.
End Sub
Sub detectExcel()
' Procedure detects a running Excel and registers it.
Const WM_USER As Long = 1024
Dim hWnd As Long
' If Excel is running, this API call returns its handle.
hWnd = findWindow("XLMAIN", 0)
If hWnd = 0 Then
' 0 means Excel is not running.
Exit Sub
Else
' Excel is running, so use the sendMessage API function
' to enter it in the Running Object table.
sendMessage(hWnd, WM_USER + 18, 0, 0)
End If
End Sub
當您呼叫 getExcel
函式時,會執行檢查,查看 Excel 是否已經在執行。如果目前並未執行,則會建立執行個體。
![]() |
---|
為了簡單起見,之前的範例假設稱為 |
平台
Windows 98、 Windows 2000 SP4、 Windows CE、 Windows Millennium Edition、 Windows Mobile for Pocket PC、 Windows Mobile for Smartphone、 Windows Server 2003、 Windows XP Media Center Edition、 Windows XP Professional x64 Edition、 Windows XP SP2、 Windows XP Starter Edition
.NET Framework 並不支援各種平台的所有版本。如需支援平台版本的相關資訊,請參閱系統需求一節的內容。
版本資訊
.NET Framework
支援版本:2.0、1.1、1.0
請參閱
參考
Interaction 類別
Interaction 成員
Microsoft.VisualBasic 命名空間
Exception
FileNotFoundException
其他資源
GetObject 函式 (Visual Basic)
CreateObject 函式 (Visual Basic)
Declare 陳述式
Option Strict 陳述式