Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Erkennen ob Hilfedatei geöffnetist (https://www.delphipraxis.net/194831-erkennen-ob-hilfedatei-geoeffnetist.html)

Walter Landwehr 11. Jan 2018 15:16

Erkennen ob Hilfedatei geöffnetist
 
Hallo,

gibt es eine Möglichkeit zu erkennen ob eine Hilfedatei (Hilfe.chm) geöffnet ist.

Für einen Tipp Danke im voraus.

Bernhard Geyer 11. Jan 2018 15:47

AW: Erkennen ob Hilfedatei geöffnetist
 
Ob *irgendeine* oder die der Anwendung zugeordnete?

Walter Landwehr 11. Jan 2018 15:48

AW: Erkennen ob Hilfedatei geöffnetist
 
Die der Anwendung zugeordnet.

hoika 11. Jan 2018 16:06

AW: Erkennen ob Hilfedatei geöffnetist
 
Hallo,
ein Ansatz sind die Dateien Forms.pas (TApplication) HelpIntfs.pas (IHelpSystem).
Dort ehe ich ein GetHandle, was wohl 0 ist, wenn die Datei nicht geladen ist.

Bernhard Geyer 11. Jan 2018 16:22

AW: Erkennen ob Hilfedatei geöffnetist
 
Und wieso?
Kann dir doch egal sein

Walter Landwehr 11. Jan 2018 16:43

AW: Erkennen ob Hilfedatei geöffnetist
 
Wieso warum fragst Du nach meinen Grund. Den habe ich schon und muss ich doch wohl nicht erklären. Da ich einen Grund habe ist es mir auch nicht egal.

Ich frage doch nur nach einer eventuellen Lösung.

Walter Landwehr 11. Jan 2018 16:46

AW: Erkennen ob Hilfedatei geöffnetist
 
Also folgende Funktion funktioniert nicht:
Delphi-Quellcode:
function IsFileInUse(const fName: TFileName): Boolean;
var
   HFileRes: HFILE;
begin
   Result := False;
   HFileRes := CreateFile(PChar(fName),
                          GENERIC_READ or GENERIC_WRITE,
                          0,
                          nil,
                          OPEN_EXISTING,
                          FILE_ATTRIBUTE_NORMAL,
                          0);
   Result := (HFileRes = INVALID_HANDLE_VALUE);
   if not Result then
     CloseHandle(HFileRes);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
   if OpenDialog1.Execute then
     if IsFileInUse(Opendialog1.FileName) then
       ShowMessage('File is in use!');
end;

Bernhard Geyer 11. Jan 2018 16:47

AW: Erkennen ob Hilfedatei geöffnetist
 
Zitat:

Zitat von Walter Landwehr (Beitrag 1390817)
Wieso warum fragst Du nach meinen Grund. Den habe ich schon und muss ich doch wohl nicht erklären. Da ich einen Grund habe ist es mir auch nicht egal.

Na gut, ich bin draußen.

Hätte sein können das dein Grund es nur scheinbar nötig macht das du wissen musst ob die Hilfedatei geöffnet ist.
Evtl. bist du ja mit deiner Lösungssuche mit "ist die Hilfedatei geöffnet" auf dem "Holzweg".

Walter Landwehr 11. Jan 2018 16:53

AW: Erkennen ob Hilfedatei geöffnetist
 
Nein bin ich nicht. Ich verwende in meinem Programm einen Thread. Der Thread verhindert in der Hilfe Datei das suchen. Deshalb muss ich bevor ich die Hilfe aufrufe den Thread beenden und wenn die Hilfedatei geschlossen ist den Thread wieder starten.

Dies ist der Hintergrund.

EWeiss 11. Jan 2018 17:16

AW: Erkennen ob Hilfedatei geöffnetist
 
Vielleicht solltest du es umgekehrt versuchen?
Wenn möglich.

Start die Hilfe Datei aus deiner Anwendung dann weist du ob sie offen ist.
https://www.experts-exchange.com/que...plication.html

gruss

Delphi.Narium 11. Jan 2018 17:34

AW: Erkennen ob Hilfedatei geöffnetist
 
Ausgehend davon, dass die Hilfedatei nur von Deinem Programm geöffnet wird (und nicht übern Explorer ...) könnte Dir das Ereignis OnHelp der Komponente TApplicationEvent eventuell weiterhelfen. Hier bekommst Du zumindest mit, wenn die Hilfe aufgerufen werden soll. Das Beenden der Hilfe bekommt man in den Ereignissen der Komponente nicht mit.

Ob überhaupt irgendeine Hilfe geöffnet ist, kann man durch das Suchen des Prozesses hh.exe herausbekommen. Für jede geöffnete Hilfe scheint es eine Instanz dieses Programmes zu geben.

Der Aufruf der Hilfe erfolgt in der Regel durch Start der hh.exe mit dem Namen der Hilfedatei als Parameter.

Die einem Programm übergebenen Parameter kann man zur Laufzeit abfragen.

Über das Durchlaufen der Prozessliste und die Überprüfung der Kommandozeilenparameter der hh.exe-Instanzen müsstest Du daher herausbekommen können, ob Deine Hilfe schon geöffnet ist.

Weitere Info eventuell hier: https://theroadtodelphi.com/2011/07/...-using-delphi/

mensch72 11. Jan 2018 17:35

AW: Erkennen ob Hilfedatei geöffnetist
 
Für ein allgemeines "IsFileNotInUse" mache ich folgendes
- vorab erstmal ein "spezielles&schnelles" IsFileExist(filename)
- dann ein Rename(filename,filename+'.tst')
- dann ein kleines sleep
- dann nochmal "spezielles&schnelles" IsFileExist(filename+'.tst') als "Result"
- dann ein Rename(filename+'.tst',filename)
- noch ein kleines sleep

Das funktioniert bei ausreichenden User-Rechten sowohl lokal als auch im Netzwerk. (Wenn jemand nur Leserechte hat, klappt das so nicht)
Per Thread das suchen in Hilfe verhindern klingt lustig... müsste ja ein Systemdienst sein der verhindert, das ich in einer per Explorer direkt geöffneten Hilfedatei was suche;)

Walter Landwehr 11. Jan 2018 17:47

AW: Erkennen ob Hilfedatei geöffnetist
 
Ja das werde ich morgen mal testen. Ich muss mal sehen, wenn die Hilfe mehrmals aufgerufen wird wie es dann aussieht. Vielen Dank ich glaube damit kann ich was anfangen.

Delphi.Narium 11. Jan 2018 18:01

AW: Erkennen ob Hilfedatei geöffnetist
 
Eventuell ein Lösungsansatz: https://stackoverflow.com/questions/...rom-my-program
Bei den Schweizern: http://www.swissdelphicenter.ch/de/showcode.php?id=104

Luckie 11. Jan 2018 18:03

AW: Erkennen ob Hilfedatei geöffnetist
 
Warum kann man in der Hilfe deiner Anwendung nicht suchen, wenn eine Thread deiner Anwendung läuft? Was macht der Thread? Insofern ist die Frage nach dem Grund durchaus berechtigt, denn so ohne weiteres erschließt sich dein Ansinnen nicht.

Delphi.Narium 11. Jan 2018 18:18

AW: Erkennen ob Hilfedatei geöffnetist
 
Mir erscheint der Lösungsansatz, der hier verfolgt wird eher wie eine Umgehung eines Problemes und nicht wie der Versuch der Beseitigung des Problemes.

hoika 11. Jan 2018 18:27

AW: Erkennen ob Hilfedatei geöffnetist
 
Hallo,

also ich benutze den folgende Code dafür (das Free habe ich weggelassen).

Delphi-Quellcode:
var
  FS: TFileStream;
begin
  try
    FS:=TFileStream.Create(sName,fmOpenRead);
    // nicht offen
  except
    // offen
  end;

hoika 12. Jan 2018 10:05

AW: Erkennen ob Hilfedatei geöffnetist
 
Hallo,
reicht mein Code aus?

himitsu 12. Jan 2018 11:33

AW: Erkennen ob Hilfedatei geöffnetist
 
Zitat:

Zitat von hoika (Beitrag 1390832)
(das Free habe ich weggelassen).

Wieso?

"Hilfedatei geöffnet ist" oder "Hilfe angezeigt wird" :?:
Und siehe Editor (Notepad) oder TStringList/TMemo ... da ist die Datei nur während des Ladens kurz geöffnet und danach dann nicht mehr, auch wenn der Text weiterhin angezeigt wird.

hoika 12. Jan 2018 11:56

AW: Erkennen ob Hilfedatei geöffnetist
 
Hallo,
ja, im Editor, aber nicht bei der Windows-Hilfe.

himitsu 12. Jan 2018 12:27

AW: Erkennen ob Hilfedatei geöffnetist
 
Zitat:

Zitat von hoika (Beitrag 1390886)
aber nicht bei der Windows-Hilfe.

Aktuell.

hoika 12. Jan 2018 13:48

AW: Erkennen ob Hilfedatei geöffnetist
 
Hallo,
mit Free weglassen hatte ich nur gemeint, dass mein Code ein Minimalbeispiel ist.

Und bei mir konnte ich die chm-Datei nicht umbenennen, wenn die Hilfe geöffnet ist,
sei es per Programmcode oder den Explorer.
Die Datei wird gesperrt.

Das liegt glaube ich an der Möglichkeit, Lesezeichen anzulegen.
Die stehen wohl direkt in der chm-Datei.

haentschman 13. Jan 2018 06:57

AW: Erkennen ob Hilfedatei geöffnetist
 
Moin...8-)
Zitat:

Warum kann man in der Hilfe deiner Anwendung nicht suchen, wenn eine Thread deiner Anwendung läuft? Was macht der Thread? Insofern ist die Frage nach dem Grund durchaus berechtigt, denn so ohne weiteres erschließt sich dein Ansinnen nicht.
+1 :thumb:
Du arbeitest an den Symptomen aber nicht an dem eigentlichen Problem.:? Prüfe mal den Aufbau des Threads. Ein Thread soll Parallelität gewährleisten. Deiner blockiert alles... oder? :roll:


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