AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Running Object Table - Office-Dateien aus OneDrive
Thema durchsuchen
Ansicht
Themen-Optionen

Running Object Table - Office-Dateien aus OneDrive

Ein Thema von ThoPos · begonnen am 9. Feb 2023 · letzter Beitrag vom 9. Feb 2023
Antwort Antwort
ThoPos

Registriert seit: 30. Jun 2004
Ort: Köln
69 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Running Object Table - Office-Dateien aus OneDrive

  Alt 9. Feb 2023, 09:47
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:
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;
Solange die Dateien von einem Laufwerk geöffnet werden, ist alles super.

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
Thomas

Geändert von ThoPos ( 9. Feb 2023 um 10:17 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#2

AW: Running Object Table - Office-Dateien aus OneDrive

  Alt 9. Feb 2023, 10:43
Man könnte hieraus
Delphi-Quellcode:
except

end;
mal ein
Delphi-Quellcode:
except
  on e : Exception do begin
    MessageDlg(e.Message,mtError,[mbOk],0);
  end;
end;
machen, um zu erfahren, was für ein Fehler auftritt. Dies erhöht die Chance auf eine sinnvolle Hilfe zur Fehlerbehebung nicht unerheblich.
  Mit Zitat antworten Zitat
ThoPos

Registriert seit: 30. Jun 2004
Ort: Köln
69 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: Running Object Table - Office-Dateien aus OneDrive

  Alt 9. Feb 2023, 17:00
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.
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz