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
 
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
 

 

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 00:40 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