![]() |
Running Object Table - Office-Dateien aus OneDrive
Hallo zusammen,
ich habe vor über 10 Jahren mit einer super Unterstützung der Forenmitglieder folgende Procedure gebastelt, welche mir alle Einträge der Running Object Table liefert und bei den Dateien von Word und Excel zusätzlich, mit welchem der beiden Programme die Datei geöffnet ist.
Code:
Solange die Dateien von einem Laufwerk geöffnet werden, ist alles super.
uses
winapi.ActiveX, win.ComObj, winapi.UrlMon; procedure test; var ROT: IRunningObjectTable; Enum: IEnumMoniker; Fetched: Integer; RunningObj: IMoniker; Name: PWideChar; BindCtx: IBindCtx; ClassID: TGUID; ProgID: String; Mk: IMoniker; chEaten: ULONG; DmyObj: IUnknown; Datei: OLEVariant; App: OLEVariant; Z: Boolean; i: Integer; l: TListItem; begin ListView1.Items.Clear; OleCheck(CreateBindCtx(0, BindCtx)); OleCheck(GetRunningObjectTable(0, ROT)); if ROT.EnumRunning(Enum) = S_OK then begin Enum.Next(1, RunningObj, @Fetched); while RunningObj <> nil do begin RunningObj.GetDisplayName(BindCtx, nil, Name); l := ListView1.Items.Add; l.SubItems.Add(name); try RunningObj.GetClassID(ClassID); ProgID := ClassIDToProgID(ClassID); except ProgID := ''; end; l.SubItems.Add(ProgID); if UpperCase(ProgID) = 'FILE' then begin try OleCheck(CreateBindCtx(0, BindCtx)); OleCheck(MkParseDisplayNameEx(BindCtx, PWideChar(WideString(Name)), chEaten, Mk)); OleCheck(Mk.BindToObject(BindCtx, nil, IUnknown, DmyObj)); Datei := DmyObj as IDispatch; try App := Datei.Application; l.SubItems.Add(app.name); except end; except end; end; Enum.Next(1, RunningObj, @Fetched); end; end; for i := 0 to Pred(ListView1.Columns.Count) do begin ListView1.Column[i].Width := 10; ListView1.Column[i].Width := -2; end; end; Nur bei OneDrive gibt es Probleme. 1. Bei Excel-Dateien bekommt er bei "ClassIDToProgID(ClassID);" kein "file" zurück; bei Word-Dateien schon. 2. Und bei Excel- und Word-Dateien kann er den Befehl "App := Datei.Application;" nicht ausführen und läuft in die Exception. Würde und könnte mir einer von Euch helfen? Gruß und Danke |
AW: Running Object Table - Office-Dateien aus OneDrive
Man könnte hieraus
Delphi-Quellcode:
mal ein
except
end;
Delphi-Quellcode:
machen, um zu erfahren, was für ein Fehler auftritt. Dies erhöht die Chance auf eine sinnvolle Hilfe zur Fehlerbehebung nicht unerheblich.
except
on e : Exception do begin MessageDlg(e.Message,mtError,[mbOk],0); end; end; |
AW: Running Object Table - Office-Dateien aus OneDrive
Danke für den Tipp:
Bei Excel-Dateien liefert "ClassIDToProgID(ClassID)" die Exception "Klasse nicht registriert". Bei Word-Dateien liefert "Datei.Application" die Exception "Application wird vom Automatisierungsobjekt nicht unterstützt". Merkwürdigerweise öffnet sich jetzt zusätzlich zu dem Dialogfeld der Browser mit der Meldung "Seite nicht gefunden" und Angabe der OneDrive-Adresse der Word-Datei. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz