我有一個客戶端服務器應用程序正在執行下一個操作:
服務器啓動並偵聽特定端口。 許多corelDraw會話手動或編程啓動。每個corel會話(客戶端)連接到發送當前進程ID的服務器。服務器將所有連接保留在listView中,並基於每個連接EndPoint可以更改(發送和接收)消息。 現在我想使用一個特定的進程ID的COM對象。 我想:查找具有進程ID或MainWindowHandle的多個實例的COM對象(Corel.Application)
using corel = Corel.Interop.VGCore;
int processID = Convert.ToInt32(lstClients.SelectedItems[0].SubItems[4].Text);//process ID string
Process corProc = Process.GetProcessById(processID);
int hwnd = (int)Process.GetProcessById(corProc).MainWindowHandle
this.Activate();
bool IsCom = corProc.GetType().IsCOMObject; // return false...
corApp = (corel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Corel.Application") // returns just the last session (not according to existing process ID
//tried also:
corApp = (corel.Application)System.Runtime.InteropServices.Marshal.GetObjectForIUnknown(corProc.Handle); // error...
//tried:
corApp = (corel.Application)Convert.ChangeType(corProc, typeof(corel.Application)); // error: 'Object must implement IConvertible.'
有沒有辦法獲得Corel的COM對象給我使用Corel.Application對象這樣的oportunity?
MessageBox.Show(corApp.Documents.Count.ToString());
在此先感謝!
Thnks!我已經嘗試了你的第一個建議,但它對於你知道指南的Microsoft COM對象來說效果很好:IID_IDispatch As String =「{00020400-0000-0000-C000-000000000046}」。我無法找到一種方式來確定它的Corel應用程序。對於第二個建議,我無法找到RotView ...也許它會幫助我找到指南... – FaneDuru