Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi hh.exe standardmäßig auf allen Windows-Computern vorhanden? (https://www.delphipraxis.net/188811-hh-exe-standardmaessig-auf-allen-windows-computern-vorhanden.html)

PeterPanino 8. Apr 2016 15:21

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

Kann man sich eigentlich darauf verlassen, dass das Windows-Dienstprogramm hh.exe auf allen Windows-Computern von Windows 7 bis Windows 10 installiert ist? (hh.exe zeigt CHM-Hilfedateien an).

Ich benötige hh.exe, um mit meinem Programm die Befehlszeile hh.exe -decompile <CHM-Datei> auf dem Computer des Benutzers auszuführen.

FarAndBeyond 8. Apr 2016 15:48

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
 
http://keyworks.helpmvp.com/
Nimm doch das hier.. und integriere alles in dein Programm... dann ist auf jeden Fall immer alles an Bord...

Wie lauten denn die Lizenzbedingungen zur originalen HH.exe?

nahpets 8. Apr 2016 16:08

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
 
Ansonsten schau mal hier in der DP: CHM-Dump

War vor einiger Zeit mal so entstanden, um CHM-Dateien "auszupacken". Eventuell kannst Du ja Teile daraus so umbauen, dass Du direkt in Deinem Programm an die gewünschten Inhalte kommst.

PeterPanino 8. Apr 2016 16:09

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
 
Vielen herzlichen Dank! Ich habe jetzt übrigens gerade entdeckt, dass auch 7z CHM-Dateien dekompilieren kann, mit dieser Befehlszeile:

7z x -o%OUTDIR% %INFILE%.chm

(Dabei darf zwischen "-o" und %OUTDIR% kein Leerzeichen stehen).

Wie meinst du "integriere alles in dein Programm"? Gibt es irgendwo einen Delphi SourceCode, den man integrieren kann?

Delphi-Laie 8. Apr 2016 16:10

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

Zitat von PeterPanino (Beitrag 1335076)
Kann man sich eigentlich darauf verlassen, dass das Windows-Dienstprogramm hh.exe auf allen Windows-Computern von Windows 7 bis Windows 10 installiert ist? (hh.exe zeigt CHM-Hilfedateien an).

Verlassen kann man sich bei Windows auf fast überhaupt nichts. Die hh.exe ist m.E. auch nicht "installiert", sondern eher die Verknüpfung, daß chm-Hilfedateien mit hh.exe geöffnet werden sollen. Was kann alles sein? Spontan fällt mir ein:

- diese Verknüpfung existiert - warum auch immer - nicht (mehr?),
- irgendein Scherzbold hat die hh.exe-Datei umbenannt oder
- die hh.exe-Datei wurde gelöscht.

PeterPanino 8. Apr 2016 16:18

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
 
Was mich bei KeyTools stört, ist dass man es installieren muss. Es gibt keine Information, was dabei geschieht. Wahrscheinlich wird dabei eine ActiveX bzw. "ocx" registriert. Das ist nicht gut - ich möchte die alleinige Kontrolle behalten. Insofern werd ich mir mal das CHM dump ansehen.

nahpets 8. Apr 2016 16:36

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
 
Nimm doch den Quelltext, auf den ich weiter oben verwiesen habe. Anstatt dort den Inhalt in Dateien zu schreiben, kannst Du ihn Dir in 'ne Stringliste (oder sowas) kopieren und dann nach belieben im Programm verarbeiten.

Irgendwas externes wird nicht benötigt.

PeterPanino 8. Apr 2016 16:51

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von nahpets (Beitrag 1335081)
Ansonsten schau mal hier in der DP: CHM-Dump

War vor einiger Zeit mal so entstanden, um CHM-Dateien "auszupacken". Eventuell kannst Du ja Teile daraus so umbauen, dass Du direkt in Deinem Programm an die gewünschten Inhalte kommst.

Nach dem Umdeklarieren von 2 Variablen konnte ich es kompilieren:

BytesRead, BytesWritten: ActiveX.LargeUInt; // Int64;

Nach dem Ausführen kam aber diese Meldung des MS Virenwächters:

Anhang 45108

nahpets 8. Apr 2016 17:28

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
 
Wie soll in den von Dir selbst erstellten Quelltext (bzw. das Kompilat) ein Virus reinkommen?

Habe mir vor Jahren angewöhnt, die Antivirussoftware so zu konfigurieren, dass das Ausgabeverzeichnis von Delphi nicht mehr überwacht wird.

Leider haben irgendwelche "netten Leute" mit Delphi mal entsprechend "unsaubere" Software erstellt, so dass es seit dem immer wieder mal "false positive" gibt. Damit muss man leider leben.

Die mit Delphi 7 kompilierte Version wird jedenfalls nicht als verseucht oder potentielle Gefahr erkannt.

Abgesehen davon bedeutet die Meldung auf dem Bild ja nichts weiter, als sowas wie: "Es könnte unter umständen, eventuell, vielleicht oder eben auch nicht, was nicht wirklich absolut unverfängliches gefunden worden sein." Oder: "Nix genause weiß man nicht."

Da ich das Programm schon seit Jahren immer mal wieder nutzte und bisher keinerlei schädliche Nebenwirkungen habe feststellen können, (und auch noch kein Virenscanner angeschlagen hat) gehe ich davon aus, dass es diese auch nicht gibt.

Ansonsten schick die Exe doch an die "Analysten", eventuell finden die ja nix und sorgen dafür, dass nach 'nem Update auch grundsätzlich nix gefunden wird.

Und falls Du die von Dir benötigen / relevanten Teile des Quelltextes in Dein Programm übernimmst, heißt das nicht, dass dann in der von Dir erstellten Exe auch eine potentielle Gefahr lauert.

FarAndBeyond 8. Apr 2016 19:22

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
 
Hier gibt es ein Freeware Tool mit GUI:
Free CHM Decompiler:
http://www.delphisources.ru/pages/pr...ecompiler.html
(leider ohne SRC)
Hab' ich mal ausprobiert, macht was es soll und braucht dazu nur Kontrolle über explorer.exe und services.exe (OpenDialog - Pfadauswahl)... sieht sauber aus...

Wie wäre es mit FreePascal CHMLS.exe !!! Läßt sich von der CommandoZeilenEbene ansteuern...
Dazu gibt es doch auch sicher den SourceCode oder? Hab' ich mir noch nicht angesehen...
Die FreePascal Echse kann auf jeden Fall decompilieren.

PeterPanino 8. Apr 2016 20:06

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

Zitat von nahpets (Beitrag 1335095)
Wie soll in den von Dir selbst erstellten Quelltext (bzw. das Kompilat) ein Virus reinkommen?

Habe mir vor Jahren angewöhnt, die Antivirussoftware so zu konfigurieren, dass das Ausgabeverzeichnis von Delphi nicht mehr überwacht wird.

Leider haben irgendwelche "netten Leute" mit Delphi mal entsprechend "unsaubere" Software erstellt, so dass es seit dem immer wieder mal "false positive" gibt. Damit muss man leider leben.

Die mit Delphi 7 kompilierte Version wird jedenfalls nicht als verseucht oder potentielle Gefahr erkannt.

Abgesehen davon bedeutet die Meldung auf dem Bild ja nichts weiter, als sowas wie: "Es könnte unter umständen, eventuell, vielleicht oder eben auch nicht, was nicht wirklich absolut unverfängliches gefunden worden sein." Oder: "Nix genause weiß man nicht."

Da ich das Programm schon seit Jahren immer mal wieder nutzte und bisher keinerlei schädliche Nebenwirkungen habe feststellen können, (und auch noch kein Virenscanner angeschlagen hat) gehe ich davon aus, dass es diese auch nicht gibt.

Ansonsten schick die Exe doch an die "Analysten", eventuell finden die ja nix und sorgen dafür, dass nach 'nem Update auch grundsätzlich nix gefunden wird.

Und falls Du die von Dir benötigen / relevanten Teile des Quelltextes in Dein Programm übernimmst, heißt das nicht, dass dann in der von Dir erstellten Exe auch eine potentielle Gefahr lauert.

Ich habe ja nicht gesagt bzw. geschrieben, dass da ein Virus drin ist. Ich habe lediglich berichtet.

nahpets 8. Apr 2016 20:33

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

Zitat von PeterPanino (Beitrag 1335105)
Ich habe ja nicht gesagt bzw. geschrieben, dass da ein Virus drin ist. Ich habe lediglich berichtet.

Sorry, das hatte ich auch nicht als Vorwurf ... oder so aufgefasst.

Wollte nur sagen, dass man solche Warnungen bei eigener Software nicht so eng sehen sollte, da die Wahrscheinlichkeit, dass die Antivirussoftware richtig liegt, eher gering ist.

386sx 8. Apr 2016 22:08

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

Zitat von nahpets (Beitrag 1335081)
Ansonsten schau mal hier in der DP: CHM-Dump

War vor einiger Zeit mal so entstanden, um CHM-Dateien "auszupacken". Eventuell kannst Du ja Teile daraus so umbauen, dass Du direkt in Deinem Programm an die gewünschten Inhalte kommst.

Vielen Dank für den Link!

Ein wenig Pfusch von mir dazu:

Delphi-Quellcode:

procedure TFrmMain.TreeDblClick(Sender: TObject);
var
  s, sAsk: string;
  sFileName: string;
  Node: TTreeNode;
  ans: Word; //ausgewählte Anworte

begin
  Node := Tree.Selected;
  if Assigned(Node) then
  begin
    { Create a fully qualified filename by traversing the parent nodes }
    s := Node.Text;
    sFilename := Node.Text;

    repeat
      Node := Node.Parent;
      if Assigned(Node) then
        sFilename := Node.Text + '\' + sFilename;
    until (Node = nil);

    s := sFileName;
    sAsk := 'Möchten Sie das ausgewählte Objekt ' + #13#10 + sFileName + #13#10
      +
      'wirklich bearbeiten?';
    //  MessageBox(Handle, PChar(s), 'Doppelklick im Tree', mb_Ok or mb_DefButton1);
    ans := MessageBox(Handle, PChar(sAsk),
      'Bestätigen', mb_YesNoCancel or mb_IconQuestion or mb_DefButton3);
    if ans = idCancel then
    begin
      MessageBox(Handle, 'Abbrechen angeklickt', 'Info', mb_Ok or
        mb_DefButton1);
      exit;
    end;
    if ans = idNo then
    begin
      MessageBox(Handle, 'NEIN angeklickt', 'Info', mb_Ok or mb_DefButton1);
      exit;
    end;
    if ans = idYes then
    begin
      MessageBox(Handle, 'JAhaa angeklickt', 'Info', mb_Ok or mb_DefButton1);
      // Machwas!
      exit;
    end;
  end;
end;

PeterPanino 8. Apr 2016 23:13

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

Zitat von FarAndBeyond (Beitrag 1335103)
Wie wäre es mit FreePascal CHMLS.exe !!! Läßt sich von der CommandoZeilenEbene ansteuern...
Dazu gibt es doch auch sicher den SourceCode oder? Hab' ich mir noch nicht angesehen...
Die FreePascal Echse kann auf jeden Fall decompilieren.

Das ist wahrscheinlich in diesem Package enthalten:

https://github.com/macek/fpcbuild/tr...c/packages/chm

Wie könnte man das Package nach Delphi übertragen?

PeterPanino 8. Apr 2016 23:19

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von FarAndBeyond (Beitrag 1335103)
Hier gibt es ein Freeware Tool mit GUI:
Free CHM Decompiler:
http://www.delphisources.ru/pages/pr...ecompiler.html
(leider ohne SRC)
Hab' ich mal ausprobiert, macht was es soll und braucht dazu nur Kontrolle über explorer.exe und services.exe (OpenDialog - Pfadauswahl)... sieht sauber aus...

Virus gefunden:

Anhang 45112

jaenicke 9. Apr 2016 00:41

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
 
Das liegt daran, dass die Exe mit Upack gepackt ist. Das ist eben keine gute Idee, da das oft von Malwareentwicklern benutzt wird, die Analyse der Exe durch Virenscanner erschwert wird und diese daher misstrauisch macht...
Diese Packer werden daher als Tools für Virenautoren eingestuft, so dass gepackte Exen oft unter einen Generalverdacht fallen...

FarAndBeyond 9. Apr 2016 02:29

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

Virus gefunden:
Danke für die Info...

Wie ich schon gesagt hatte, es sah sauber aus... ob die Datei wirklich 100% sauber ist kann ich nach den 3xCHM-File-Laden und decompilieren nicht sagen, wäre es jedoch eine Malware, dann wäre diese sehr dumm bzw. völlig unbrauchbar. Nach dem Starten der EXE ist nichts passiert und wärend des kurzen Tests ist ebenfalls nichts passiert. D.h. die EXE hat nichts gemacht/gewollt. Erst als ich einen Pfad eingegeben habe wollte sie einen Zugriff auf die explorer.exe und die services.exe. Den Zugriff habe ich 1x erlaubt. Der Zugriff ist normal und wird von jedem OpenDialog benötigt. Weitere Zugriffe waren nicht zu verzeichnen. Malware will normalerweise alles Mögliche..

Da man mit FreePascal CHMls.exe auch decompilieren kann benutze ich lieber die Pascal-EXE. Außerdem kann ich die FPC-EXE überall einbinden und mit entsprechenden Parametern im Hintergrund starten und sofort decompilieren. Zusätzlich müsste man mal schauen wo der SRC ist bzw. ob es davon SRC gibt. Für die kleine Echse brauchst du ja nicht das komplette Paket von FPC. Aber ich hab' den QuellCode noch nicht lokalisieren können...

Du kannst dir einfach FreePascal 3.0 herunterladen und findest die EXE im Verzeichnis "\bin\i386-win32\".. ist also ganz einfach zu bekommen...
z.B. hier:
http://www.freepascal.org/download.var

btw: hast du einen Namen angezeigt bekommen? Also einen Malware-Namen oder so (was es denn sein soll)??

PeterPanino 9. Apr 2016 08:10

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

Zitat von FarAndBeyond (Beitrag 1335130)
btw: hast du einen Namen angezeigt bekommen? Also einen Malware-Namen oder so (was es denn sein soll)??

Nein, die Meldung kam in Chrome, aber nicht die übliche "Warnung", sondern gleich hart blockiert.

Werde mir gleich das FP mal herunterladen und sehen, ob sich der Code in Delphi einbinden lässt.

Vielen Dank für deine Infos, haben mir sehr geholfen!

PeterPanino 9. Apr 2016 08:22

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
 
Habe mir jetzt FreePascal 3.0 heruntergeladen und installiert, aber keine Source für das CHM-Programm gefunden.

PeterPanino 9. Apr 2016 08:53

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

Zitat von nahpets (Beitrag 1335081)
Ansonsten schau mal hier in der DP: CHM-Dump

War vor einiger Zeit mal so entstanden, um CHM-Dateien "auszupacken". Eventuell kannst Du ja Teile daraus so umbauen, dass Du direkt in Deinem Programm an die gewünschten Inhalte kommst.

Die CHM-Dump-Funktion ist mit dem Treeview extrem verzahnt, was die Wiederverwendbarkeit einschränkt. Könntest du das (als Autor des Projekts) mal entflechten, so dass die reine Dump-Funktion wiederverwendet werden kann?

nahpets 9. Apr 2016 10:36

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
 
Also ich würd' das Formular des Programmes einfach in mein Programm mit aufnehmen, Visible auf false setzten und die Methode
Delphi-Quellcode:
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
Delphi-Quellcode:
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;

FarAndBeyond 9. Apr 2016 22:05

AW: hh.exe standardmäßig auf allen Windows-Computern vorhanden?
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 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