![]() |
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. |
AW: Erkennen ob Hilfedatei geöffnetist
Ob *irgendeine* oder die der Anwendung zugeordnete?
|
AW: Erkennen ob Hilfedatei geöffnetist
Die der Anwendung zugeordnet.
|
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. |
AW: Erkennen ob Hilfedatei geöffnetist
Und wieso?
Kann dir doch egal sein |
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. |
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; |
AW: Erkennen ob Hilfedatei geöffnetist
Zitat:
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". |
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. |
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. ![]() gruss |
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: ![]() |
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;) |
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.
|
AW: Erkennen ob Hilfedatei geöffnetist
Eventuell ein Lösungsansatz:
![]() Bei den Schweizern: ![]() |
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.
|
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.
|
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; |
AW: Erkennen ob Hilfedatei geöffnetist
Hallo,
reicht mein Code aus? |
AW: Erkennen ob Hilfedatei geöffnetist
Zitat:
"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. |
AW: Erkennen ob Hilfedatei geöffnetist
Hallo,
ja, im Editor, aber nicht bei der Windows-Hilfe. |
AW: Erkennen ob Hilfedatei geöffnetist
Zitat:
|
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. |
AW: Erkennen ob Hilfedatei geöffnetist
Moin...8-)
Zitat:
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 21:10 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