Hallo Zusammen,
leider komme ich bei einem Problem nicht weiter...
Konnte im Internet nichts brauchbares finden...
oApp = Activator.CreateInstance(objClassType);
Wie kann ich die ProcessID ermitteln?
Wäre toll, wenn mir hierbei jemand helfen könnte.
Vielen Dank für Eure Hilfe
Mittels Activator.CreateInstance wird nur zur Laufzeit ein neues Objekt erzeugt, d.h. es ist die selbe Process-Id wie das aufrufende Programm.
Aufgrund 'oApp' deutet der Code jedoch darauf hin, daß du "Office Automation" benutzt, oder?
Und du möchtest dann die Process-Id der externen Office-Anwendung haben?
Du könntest per P/Invoke über GetWindowThreadProcessId die Process-Id auslesen.
Als Parameter dann oApp.Hwnd übergeben, s.a. Getting excel application process id.
Hallo Th69,
vielen Dank für Deine Antwort.
Leider bekomme ich es einfach nicht hin...
Könntest Du mir bitte nochmals weiterhelfen?
Wie Du schon erkannt hast 😃 möchte ich die Process-ID
der externen Office-Anwendung (late binding) haben.
Bekomme es aber anhand des Beispieles aus deinem Link
nicht hin. (GetWindowTreadProcessID)
Folgenden Fehler erhalte ich ... stehe irgendwie auf dem schlauch...
IntPtr pID = GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero);
Fehlermeldung:
Fehler: Der Name "GetForegroundWindow" ist im aktuellen Kontext nicht vorhanden
Wäre toll, wenn Du mir hierbei noch mal helfen könntest oder mir evtl.
zeigst, wie es richtig geht....
Vielen Dank..
Hallo Th69,
habe das Problem mit GetForegroundWindow gelöst....
Jedoch gibt er mit nicht die Process ID von der externen Office
Anwendung sondern die des Visual Studios an...
Bitte könntest du mir hierbei helfen...
Krieg es einfach nicht hin.
Vielen Dank....
Was soll denn "early"- bzw. "late binding" damit zu tun haben?
Hast du denn jetzt
oApp.Hwnd
als Parameter angegeben? Wie bist du denn auf "GetForegroundWindow()" gekommen?
Hallo Th69,
vielen Dank für Deine Antwort.
Nein der Parameter .Hwnd konnte nicht hinzugefügt werden, da er nicht existiert.
Ok, sorry, wusste nicht das es nichts mit early oder late binding zu tun hat.
Würde mich sehr über weitere Hilfestellung freuen.
Viele Grüße
Zeig doch mal etwas mehr von Deinem Code und beschreibe vor allem genauer, was Du erreichen möchtest. Mir scheint als gäbe es da ein grundlegenderes Verständnisproblem...
Zeig doch mal etwas mehr von Deinem Code und beschreibe vor allem genauer, was Du erreichen möchtest. Mir scheint als gäbe es da ein grundlegenderes Verständnisproblem...
Vielen Dank für Deine Antwort wcseller,
hier ist der Code den ich benutze:
Type objClassType;
objClassType = Type.GetTypeFromProgID("Excel.Application");
oApp = Activator.CreateInstance(objClassType);
Nach dem Ausführen der letzten Codezeile erscheint im Taskmanager
ein Prozess mit dem Namen: "excel".
Für diesen Prozess benötige ich Prozess ID (PID) ... und dies bekomme ich
einfach nicht hin.
Die Möglichkeit den Prozess mit dem Namen "excel" zu suchen und zu finden,
bringt mir leider nichts, da es sein kann das mehrere Prozesse mit dem
Namen "excel" laufen könnten.
Deshalb benötige ich die Prozess ID.
Ich hoffe es kann mir hierbei jemand helfen.
Vielen Dank.
Viele Grüße
Die Möglichkeit den Prozess mit dem Namen "excel" zu suchen und zu finden,
bringt mir leider nichts, da es sein kann das mehrere Prozesse mit dem
Namen "excel" laufen könnten.
Deshalb benötige ich die Prozess ID.
Hallo ntc05,
Ich erinnere mich ganz dunkel daran, dass ich es nicht geschafft habe direkt über Office-Automation die Process-ID zu ermitteln.
Das Thema Office-Automation selbst ist eine recht komplexe Angelegenheit, bei der man über einige Seltsamkeiten stolpern kann. Das nur als Warnung.
Als work around könntest du zuerst alle PIDs der Excel-Instanzen ermitteln und dann deine neue Instanz erstellen und deren PID ermitteln, in dem du die anderen Excel-PIDs ausschließt..
Gruß, Alf
Als work around könntest du zuerst alle PIDs der Excel-Instanzen ermitteln und dann deine neue Instanz erstellen und deren PID ermitteln, in dem du die anderen Excel-PIDs ausschließt..
Gruß, Alf
Hallo Alf Ator,
vielen Dank für Deine Antwort.
Ich habe Deinen Vorschlag umgesetzt und es funktioniert.
Was ich jedoch nicht abfangen kann ist, wenn es zwei neue
"excel" Prozesse geben sollte. Dann würde ich evtl. den
falschen Prozess ermitteln.
Nur komisch finde ich es das man den Prozess nicht
exakt ermitteln kann?!
Ein Projekt das ich in VB.Net geschrieben habe, findet
eindeutig den Prozess. Komisch das es da solche unter-
schiede zwischen C# und VB.Net gibt.
Nochmals vielen Dank für Deine Hilfe.
Viele Grüße
Hallo,
"oApp.Hwnd" hat der Compiler nicht gefunden, weil du wahrscheinlich oApp nicht richtig deklariert hast:
Excel.Application oApp = Activator.CreateInstance(objClassType) as Excel.Application;
Und nun kannst du auch auf "oApp.Hwnd" zugreifen.
Hallo Th69,
vielen Dank für Deine Antwort:
Wie bereits von mir angemerkt, benötige ich keine early binding von Excel.
Excel.Application zeigt klar auf, dass es sich hierbei um eine early binding handelt.
siehe folgenden Link: Microsoft
Die Deklaration ist somit auf late binding abgestimmt und richtig.
Trotzdem nochmals vielen Dank für Deine Hilfe.
Viele Grüße
Damit wollte ich dir nur aufzeigen, warum der Compiler eine Fehlermeldung bei dir ausgegeben hat.
Für "late binding" kannst du in C# das Schlüsselwort "dynamic" benutzen: Word Automation using Late binding - Usage of dynamic Keyword - und dann müßte auch "oApp.Hwnd" funktionieren.
Hallo Th69,
vielen Dank für Deine Antwort und Deinen Tipp.
Ich werde das mal versuchen.
Viele Grüße