Ich versuche mich zur Zeit an einem Automations-Client für MS Office Anwendungen, der im Verlauf seiner Arbeit auf Access, Excel und auch Word zugreifen soll.
Die defür benötigten Klassen habe ich in VC++ über die jeweiligen .olb Dateien eingebunden (erzeugt Ableitungen des Typs COleDispatchDriver) und es klappt auch wunderbar die jeweiligen Anwendungen zu starten. z.B. für Access in der Form:
<PRE>
#include "msacc9.h"
Access_Application accessApp;
CLSID clsidApp;
HRESULT hr;
hr = CLSIDFromProgID(L"Access.Application", &clsidApp);
// Starten der Applikation:
accessApp.CreateDispatch(clsidApp, NULL);
</PRE>
Soweit so gut. Die Zugriffe auf Tabellen und deren Inhalte funktioniert soweit auch ganz gut.
Jetzt bin ich aber auf einen kleinen Stolperstein gestoßen bei dem ich nicht weiter komme:
Mein Client muss an einer Stelle in der Lage sein, Access für den Benutzer sichtbar zu öffen [accessApp.SetVisible(true);], um ihm eine manuelle Eingabe zu ermöglichen.
Während das passiert, soll der Client warten.
Das Problem ist nun, dass ich für ein WaitForSingleObject oder besser ein _cwait die ProcessID / das Handle von Access benötigen würde.
Da ich Access jedoch nicht direkt mittels _spawn, _exec oder CreateProcess aufrufe, habe ich bisher keine Möglichkeit gefunden die ProcessID entsprechend zu ermitteln.
Hat irgendjemand das Problem schonmal gehabt und irgendwie gelöst?
Die defür benötigten Klassen habe ich in VC++ über die jeweiligen .olb Dateien eingebunden (erzeugt Ableitungen des Typs COleDispatchDriver) und es klappt auch wunderbar die jeweiligen Anwendungen zu starten. z.B. für Access in der Form:
<PRE>
#include "msacc9.h"
Access_Application accessApp;
CLSID clsidApp;
HRESULT hr;
hr = CLSIDFromProgID(L"Access.Application", &clsidApp);
// Starten der Applikation:
accessApp.CreateDispatch(clsidApp, NULL);
</PRE>
Soweit so gut. Die Zugriffe auf Tabellen und deren Inhalte funktioniert soweit auch ganz gut.
Jetzt bin ich aber auf einen kleinen Stolperstein gestoßen bei dem ich nicht weiter komme:
Mein Client muss an einer Stelle in der Lage sein, Access für den Benutzer sichtbar zu öffen [accessApp.SetVisible(true);], um ihm eine manuelle Eingabe zu ermöglichen.
Während das passiert, soll der Client warten.
Das Problem ist nun, dass ich für ein WaitForSingleObject oder besser ein _cwait die ProcessID / das Handle von Access benötigen würde.
Da ich Access jedoch nicht direkt mittels _spawn, _exec oder CreateProcess aufrufe, habe ich bisher keine Möglichkeit gefunden die ProcessID entsprechend zu ermitteln.
Hat irgendjemand das Problem schonmal gehabt und irgendwie gelöst?