Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
unde ii pot arunca?

Problema respingere memorie supli...

Posibila virusare

Caramida de sticla la exterior
 Geam cuptor crapat

Un canal de AI de comedie pe YT

Update intr-un tabel

[Controlul] vremii si a vremurilor
 Blocuri din placi prefabricate

Achiziție mașina de fam...

[unde] cozonaci traditionali

Jandarmii in fondul forestier
 Sa dus seceta pedologica?

Toyota IQ

Numar magic cu blocaj numerologic

Recomandare firma/persoana pentru...
 

Identificare COM Object din Process

- - - - -
  • Please log in to reply
7 replies to this topic

#1
TLGsoft

TLGsoft

    Senior Member

  • Grup: Senior Members
  • Posts: 2,553
  • Înscris: 25.03.2006
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
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,622
  • Înscris: 30.07.2003
Vezi in codul din GetCurrentDTEObject(), face ceva asemanator: http://developergeek...sual-studio-net

Edited by neagu_laurentiu, 29 July 2014 - 17:56.


#3
TLGsoft

TLGsoft

    Senior Member

  • Grup: Senior Members
  • Posts: 2,553
  • Înscris: 25.03.2006
Multumesc, mai studiez.

#4
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,251
  • Înscris: 24.02.2007
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
TLGsoft

TLGsoft

    Senior Member

  • Grup: Senior Members
  • Posts: 2,553
  • Înscris: 25.03.2006
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....

#6
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,251
  • Înscris: 24.02.2007
Functie oferita de server sau de COM?

#7
TLGsoft

TLGsoft

    Senior Member

  • Grup: Senior Members
  • Posts: 2,553
  • Înscris: 25.03.2006
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
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,251
  • Înscris: 24.02.2007
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

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate