J'ai une application Client Server en train de faire la suivante:
Le serveur démarre et écoute un port spécifique. De nombreuses sessions corelDraw démarrent manuellement ou par programme. Chaque session corel (client) se connecte au serveur en envoyant l'ID de processus en cours. Le serveur conserve toutes les connexions dans un listView et, en fonction de chaque connexion, EndPoint peut modifier (envoyer et recevoir) des messages. Maintenant, je voudrais utiliser l'objet COM d'un tel ID de processus spécifique. J'ai essayé:Rechercher un objet COM (Corel.Application) pour plusieurs instances ayant un ID de processus ou MainWindowHandle
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.'
Y at-il un moyen d'obtenir l'objet COM corel pour me donner l'opportunité d'utiliser l'objet Corel.Application comme ça?
MessageBox.Show(corApp.Documents.Count.ToString());
Merci d'avance!
Thnks! J'ai déjà essayé votre première suggestion, mais cela fonctionne bien pour les objets Microsoft COM où vous connaissez le guide: IID_IDispatch As String = "{00020400-0000-0000-C000-000000000046}". Je ne pouvais pas trouver un moyen de le déterminer pour l'application corel. Pour la deuxième suggestion, je n'ai pas pu trouver RotView ... Peut-être que cela m'aidera à trouver le guide ... – FaneDuru