AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi hh.exe standardmäßig auf allen Windows-Computern vorhanden?
Thema durchsuchen
Ansicht
Themen-Optionen

hh.exe standardmäßig auf allen Windows-Computern vorhanden?

Ein Thema von PeterPanino · begonnen am 8. Apr 2016 · letzter Beitrag vom 9. Apr 2016
Antwort Antwort
Seite 3 von 3     123   
nahpets
(Gast)

n/a Beiträge
 
#21

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?

  Alt 9. Apr 2016, 10:36
Also ich würd' das Formular des Programmes einfach in mein Programm mit aufnehmen, Visible auf false setzten und die Methode DumpCHMFile('Name der zu entpackenden Datei.chm'); aufrufen.

Anschließend ist der Inhalt im Verzeichnis 'Name der zu entpackenden Datei' zu finden.

Dort kannst Du Dir dann die gewünschten Dateien raussuchen oder halt auch durch den Baum gehen, um dort gezielt zu suchen.
Du findest dort ja bereits alle Informationen, die Du für eine weitere Bearbeitung benötigst.

Bist Du damit fertig, löschst Du noch das für den Export erstellte Verzeichnis.

Letztlich sind die Informationen in 'ner CHM-Datei in 'nem Baum organisiert, ohne den wirst Du nicht auskommen.

Wenn Du den Baum dann Zweig für Zweig durchläufst, kannst Du für jeden Zweig TreeChange(Self, Node); aufrufen, also sowas in der Art:
Delphi-Quellcode:
for i := 0 to tree.Items.Count - 1 Do begin
  TreeChange(Self, tree.Items[i]);
end;
Im Attribut Text des Knotens befindet sich der Dateiname, anhand dessen kannst Du entscheiden, ob Du TreeChange für den Zweig überhaupt aufrufen willst.

Ansonsten schau Dir die Methode EnumerateStorage an, dort wird die CHM-Datei letztlich "aufgebröselt".

Mal eine ungetestet hingedaddelte "veränderte" Methode:
Delphi-Quellcode:
procedure TFrmMain.EnumerateStorage(const Storage: IStorage);
var
  Enumerator: IEnumStatStg;
  Stat: TStatStg;
  SubStorage: IStorage;
  Extension: String;
  Src: IStream;
begin
  OleCheck(Storage.EnumElements(0,nil,0,Enumerator));
  while Enumerator.Next(1,Stat,nil) = S_OK do begin
  // Hier ist der Name der Datei / des Verzeichnisses enthalten -> Stat.pwcsName;
    if Stat.dwType = STGTY_STORAGE then begin
      OleCheck(Storage.OpenStorage(Stat.pwcsName,nil, STGM_READ or STGM_SHARE_DENY_WRITE,nil,0,SubStorage));
      EnumerateStorage(SubStorage);
    end else begin
      Extension := UpperCase(ExtractFileExt(Stat.pwcsName));
      if (Extension = '.HTM') or (Extension = '.HTML') then
        // Hier müsstest Du jetzt mal schauen, wo sich genau der Inhalt der HTML-Datei befindet, um ihn dann nach belieben zu verarbeiten.
      OleCheck(SubStorage.OpenStream(Stat.pwcsName,nil,STGM_READ,0,Src));
      // In Src hast Du dann 'nen Stream, den Du (vermutlich) in 'ne TStringList oder sowas laden kannst, für die weitere Verarbeitung.
      end;
    end;
  end;
end;
DumpChmFile könnte dann in etwa so aussehen:
Delphi-Quellcode:
procedure TFrmMain.DumpCHMFile(const Filename: String);
var
  ITStorage: IITStorage;
  S: WideString;
begin
  ITStorage := CoITStorage.Create;
  S := Filename;
  OleCheck(ITStorage.StgOpenStorage(PWideChar(S),nil, STGM_READ or STGM_SHARE_DENY_WRITE,nil,0,FRootStorage));
  EnumerateStorage(FRootStorage);
end;
  Mit Zitat antworten Zitat
FarAndBeyond
(Gast)

n/a Beiträge
 
#22

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?

  Alt 9. Apr 2016, 22:05
Der SourceCode von FPC kann z.B. hier heruntergeladen werden:
http://www.freepascal.org/down/source/sources.var

Die CHMls.exe ist dort auch zu finden.. also die dazugehörigen Dateien.
Wenn man FPC-SRC entpackt und dann im Verzeichnis "packages\CHM\SRC" nachschaut, dann findet man die Dateien:

..
chmls.lpi
chmls.lpr
chmWriter.pas
chmReader.pas
htmlUtil.pas
..usw...
(insgesamt 23 Dateien)

Ich hab' noch nicht 'reingeschaut, klingt aber schonmal ganz gut...

Wieviel man daran ändern muß um diesen Code in Delphi lauffähig zu machen hab' ich nicht probiert, aber wenn man nur das Dekompilieren benötigt ist es vielleicht ja nicht so doll.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 08:47 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