2016-09-08 7 views
0

Ich habe eine Routine, um Windows-Prozesse hinter einigen Dateien zu suchen.Wie findet CHM Dateiname in Prozesse?

Es funktioniert normal, aber wenn ich versuche, eine .CHM-Datei (Compiled Help File) zu finden, kann ich es nicht finden, da sein Name in Prozessen nicht der Dateiname ist, sondern der ursprüngliche HELP-Name. Siehe unten:

  • Dateiname = Myhelp.chm < < < ich für diese Suche!
  • HelpName = gute Systeme-Hilfedatei < <, was ich in Windows sehe Prozesse

also weder meine Routine die CHM im Speicher finden kann, noch kann ich diesen Namen in der CHM-Datei. Hast du eine Idee, wie wir damit umgehen sollen?

+0

Was meinst du mit 'Ich habe eine Routine Windows-Prozesse suchen ...'? –

+0

Meine Anwendung sucht nach geöffneten Fenstern und Dateien im Bereich Windows-Prozesse. Dort kann ich feststellen, ob eine Datei geöffnet ist (oder nicht). –

Antwort

1

Die Kurzgeschichte - sehr tief im Betriebssystem und 20 Jahre alt (aber gut) HTMLHELP (CHM) -Technologie. Heavy, um eine schnelle Lösung zu finden, aber lesen Sie bis zum Ende meiner Antwort.

Weitere Informationen:

Sie wissen, ist HH.EXE mit Htmlhelp (HH) verteilt, so können Sie sich verlassen sie vorhanden ist. Es befindet sich im Windows-Ordner und verfügt über eine begrenzte Anzahl von Befehlszeilenoptionen. HH.EXE ist mit .CHM-Dateien verknüpft. Doppelklicken Sie also auf eine * .CHM-Datei und Windows öffnet die Datei mit HH.EXE. Es ist eine sehr kleine Datei, es übergibt den Hilfe-Dateinamen meistens an eine HH-API-Bibliothek. HH.EXE ist keine einzelne Instanz. Wenn Sie eine CHM-Datei dreimal mit HH.EXE öffnen, werden drei Hilfefenster angezeigt.

Wie oben erwähnt, ist die ausführbare Datei für HTMLHelp HH.EXE, was im Grunde genommen ein Wrapper um Internet Explorer ist (das Herz der HTML-Hilfe-Laufzeit ist hhctrl.ocx und shdocvw.dll). Sie können dies sehen, indem Sie hh.exe myfile.html ausführen, wobei myfile.html eine nicht kompilierte (!) HTML-Datei ist.

start /B hh.exe D:\_working\HTMLHelp.chm 

Sie können per Batch-Datei, die eine CHM nennen wie oben gezeigt, durch Doppelklick im Windows Explorer oder als Anwendung Hilfe zu rufen - immer das gleiche Ergebnis im Task-Manager. Die Snapshots zeigen (Sie wissen) das geöffnete CHM und den Task-Manager. Siehe die CHM-Titelleiste "Testdatei für HTML-Hilfe auf 4K-Monitoren", die vom Hilfeautor angegeben wurde. Das gleiche finden Sie in der Prozessliste des Task-Managers.

enter image description here

enter image description here

Die -800 oder -title Befehlszeilenoptionen - wenn verwendet - werden, wenn Sie irgendwelche Standard-Fenstertypen in Ihrer kompilierten Hilfedatei angegeben haben, ignoriert.

Das nächste Snap zeigt alles ist ein kompiliertes Hilfemodul (CHM) und Sie benötigen spezielle HH-Utilities wie FAR HTML zu gehen. Der Text, den ich oben erwähnt habe, ist als Window Caption des Main-Hilfefensters kompiliert. Vielleicht interessante Infos, aber nicht die Art zu gehen.

enter image description here

Dieser sagte, die Dinge von Ihrer Umgebung abhängen. Also müssen Sie entscheiden, ein Werkzeug wie z.B.ProcessMonitor, Filter hh.exe Operation ProcessStart und extrahieren Sie den Pfad zur CHM-Datei von Detail wie unten gezeigt. Sie finden den vollständigen Pfad zu CHM dort!

enter image description here

In Powershell Sie zum Beispiel den Befehlszeilenparameter eines Prozesses über WMI erhalten können für alle laufenden Hilfe-Viewer hh.exe Fenster:

enter image description here

+0

Vielen Dank für so detaillierte Erklärung, aber mein Problem ist, wie Sie diesen Titel finden, wenn der Benutzer auf CHM klickt. Wenn ich alle Wörterbuchpaare von Windows-Prozessen durchsuche, kann ich den Dateinamen dort sehen - aber wenn der Dateiname vom Titel abweicht, kann ich nicht wirklich überprüfen, ob die Datei geöffnet ist. Hinweis: Die Datei wird in .NET-Code nach Benutzerauswahl geöffnet (er zeigt auf eine Datei und .NET ruft sie mit Process.Start() auf.) –

+1

@David Ich habe es nur indirekt beantwortet, aber der CHM-Dateiname ist nicht in kompiliert Die CHM-Datei und der Titel des CHM-Fensters sind unabhängig vom Dateinamen.Für einen Beweis: CHM-Dateien können umbenannt und in ein anderes Verzeichnis verschoben werden - es gibt keine Probleme auf einem lokalen Windows-PC Es ist nicht ganz klar für mich, warum Sie möchte nach offenen CHM-Dateien suchen Ein Aufruf eines Hilfefensters aus der Anwendung durch 'Process.Start (helpFilePath);' ist nicht der beste Weg. Wenn die Anwendung vom Benutzer geschlossen wird, bleibt das Hilfefenster geöffnet und muss manuell geschlossen werden. ShowHelp ist der bessere Weg zum Aufruf von CHM –

+0

Vielen Dank Mein Problem ist nicht, wie man die Hilfedatei selbst öffnet, sondern geöffnete Dateien von Benutzern erkennt.Der Benutzer kann JEDE Datei auswählen und sie mit meiner Anwendung öffnen, die überwacht, wenn die Datei geschlossen wird (ein anderer Thread macht es). Nach dem Schließen ist die Datei verschlüsselt. Also, mein Problem ist, wie man Dateien findet, die TITLES (und ähnlich) haben und wenn geöffnet, zeigt Windows Process diese Titel anstatt den Dateinamen an. Da ich sie nicht kenne (wie PDF und CHM), bekomme ich einen Fehler bei ihnen. Trotzdem danke! –