Hi Jakob,
It's possible to automate a running instance of an Office program. A .NET
client can get a reference to the running instance by calling the following:
System.Runtime.InteropServices.Marshal.GetActiveObject
-or-
System.Runtime.InteropServices.Marshal.BindToMoniker
COM servers can be classified as Multiuse (Single Instance) or Single Use
(Multiple Instances), depending on the number of instances of that server
that can run simultaneously on a single computer.
When a request for a new COM object comes to a Multiuse (Single Instance)
COM server, the server uses only one instance of the .exe file to create
that object. No matter how many clients request a new COM object, there
will be only one server .exe process. In the Single Use (Multiple
Instances) server, each request for a new COM object starts a separate
instance of the server .exe file. Therefore, more than one instance of the
server can run on the same computer.
Multiple instances of Word (Winword.exe), Excel (Excel.exe), and Microsoft
Access (MSAccess.exe) can run simultaneously. Therefore, these servers are
defined as Single Use (Multiple Instances) servers. Only one instance of
PowerPoint (Powerpnt.exe) can run at any given time. Therefore, PowerPoint
is a Multiuse (Single Instance) server.
Whether a COM server is Single Use (Multiple Instances) or Multiuse (Single
Instance) might affect your decision to use GetActiveObject to get
reference to that server. Because potentially more than one instance of
Word, Excel, or Microsoft Access can be running, GetActiveObject on a
particular server may return an instance that you did not expect. The
instance that is first registered in the ROT is typically the instance that
is returned by GetActiveObject. If you want to get an Automation Reference
to a specific running instance of Word, Excel, or Microsoft Access, use
BindToMoniker with the name of the file that is opened in that instance.
For a Multiuse (Single Instance) server like PowerPoint, it does not
matter, because the automation reference points to the same running
instance.
For more information on how to automate a running instance of an Office
program, please visit the following KB article. Althought the sample code
is written in C#, it should not be difficult to translate it into VB.NET.
http://support.microsoft.com/kb/316126 Hope this helps.
If you have any concerns, please feel free to let me know.
Sincerely,
Linda Liu
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif ications.
Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx. ==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.