Chirurgia spinală minim invazivă
Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical. Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale. www.neurohope.ro |
Identificare COM Object din Process
Last Updated: Jul 31 2014 18:42, Started by
TLGsoft
, Jul 29 2014 14:45
·
0
#1
Posted 29 July 2014 - 14:45
Salutare,
Am mai multe instante ale unui program. Fiecare expune un obiect COM la care ma pot lega. Am obtinut lista proceselor ( Process.GetProcessesByName() ) si lista obiectelor ( UCOMIRunningObjectTable.EnumRunning() ) Cum fac sa stiu care proces expune care obiect? Am incercat in ordinea enumerarii dar nu merge. C#, .NET 4 Edited by TLGsoft, 29 July 2014 - 14:46. |
#2
Posted 29 July 2014 - 17:55
Vezi in codul din GetCurrentDTEObject(), face ceva asemanator: http://developergeek...sual-studio-net
Edited by neagu_laurentiu, 29 July 2014 - 17:56. |
#4
Posted 30 July 2014 - 21:14
In acel exemplu se compara ProgID-ul care-i acelasi pentru toate instantele, deci nu te ajuta.
N-am reusit sa gasesc o cale de a afla ce proces gazduieste un anumit obiect. Daca tu ai creat serverul, cred ca nu-ti ramane decat sa introduci o noua functie/interfata care sa-ti returneze PID-ul curent sau alte asemenea. |
#5
Posted 31 July 2014 - 13:34
Serverul nu este creat de mine, insa am gasit o functie ce ruterneaza pID-ul... insa acum vad ca UCOMIRunningObjectTable.EnumRunning() imi returneaza de fapt mereu ultimul obiect....
|
#7
Posted 31 July 2014 - 18:34
Nu inteleg la ce te referi. Gandeste-te ca ai 10 excel.exe deschise si vrei sa parcurgi fiecare instanta, sa te legi la ea, sa vezi daca are deschis un document, iar daca nu are sa deschizi tu unul si rulezi un macro (de exemplu).
Nu discutam de API-ul MS Office, este doar un exemplu. |
#8
Posted 31 July 2014 - 18:42
La excel e chiar simplu fiindca monikerul va indica spre fisierul deschis, nu spre excel.exe
void testRunningObjectTable() { IRunningObjectTable* rot; GetRunningObjectTable(0, &rot); IEnumMoniker *enumMoniker; rot->EnumRunning(&enumMoniker); cout << "Running objects" << endl; IBindCtx* bindCtx; CreateBindCtx(0, &bindCtx); IMoniker* moniker; IMalloc* allocator; CoGetMalloc(1, &allocator); while (enumMoniker->Next(1, &moniker, NULL) != S_FALSE) { LPOLESTR displayName; moniker->GetDisplayName(bindCtx, NULL, &displayName); wcout << displayName << endl; allocator->Free(displayName); moniker->Release(); } allocator->Release(); enumMoniker->Release(); bindCtx->Release(); rot->Release(); }Nu-i .NET, dar intelegi ideea. Quote
Running objects ... R:\test.xlsx R:\COMTests\COMTests.sln ... |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users