Windows Ereignis aus einer Xbase-Anwendung auslösen

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Windows Ereignis aus einer Xbase-Anwendung auslösen

Beitrag von notloesung »

Hallo,

ich habe hier eine bisher nicht lösbare Aufgabe (zumindest konnte ich sie nicht lösen):

Wenn ich aus einer Xbase Anwendung auf einem Netzlaufwerk eine Datei lösche oder anlege so aktualisiert der Explorer (dieser läuft parallel und zeigt den Inhalt des Laufwerks auf dem die o.g. Dateien angelegt bzw. gelöscht werden) seine Übersicht nicht automatisch.
Die Aktualisierung erfolgt erst nach manuellen drücken von „F5“ oder „Aktualisieren“.

Gibt es eine Möglichkeit solch ein Ereignis auch aus Xbase auszulösen? Hat jem. Erfahrung damit?

Vielen Dank schon mal im Voraus,
Notloesung


PS. Ich arbeite mit Visual Xbase. Das exPress++ kenne ich (bisher) nicht. Kann mir jem. den Unterschied (Vorteile/Nachteile) erkläre? Vielleicht kennt jem. einen Link wo ich es nachlesen kann?
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Hallo!
Für Dein Problem der Explorer-Aktualisierung gibt es eine einfache Lösung:

Setze innerhalb der Registry den Wert für den Schlüssel: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Update\UpdateMode
auf 0. Dieser Wert steht standardmäßig auf ein 1

Jetzt sollte der Windows-Explorer die Anzeige automatisch aktualisieren.

Gruß,
Olaf
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

Hallo Olaf,

tut mir leid habe ich vergessen zu erwähnen: Diesen Registryeinstellung hatte ich schon getestet. Leider ohne Erfolg.

Gibt es vielleicht eine Möglichkeit das Windows Ereignis zu (genauer) zu bestimmen?
So richtig weis ich selbst nicht wo ich suchen und „basteln“ soll :?: .
Ich habe schon versucht nach dem Anlegen bzw. Löschen den Explorer aufzurufen und dort das besagte Laufwerk anzuzeigen. Das klappt ganz gut. Jetzt suche ich lediglich etwas (?) womit ich bestimmen kann ob der Explorer überhaupt offen ist (wenn es nötig ist) und dann lediglich das „F5“ Ereignis abfeuern. Das ganze am besten noch so, dass der Explorer dabei nicht den Fokus bekommt.

Oh je, oh je …
Notloesung
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9355
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Notloesung.

M.E. müßtest Du das über das Windows Messaging-System hinbekommen können. Such mal im MSDN nach "DispatchMessage()". Das WMS ist Bestandteil der USER32.DLL. Wenn ich später am Tag Zeit finde, schaue ich selbst mal nach.
Herzlich,
Tom
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Nun, bei mir funktioniert es mit der Registry-Einstellung.

Ob der WE-Explorer bereits aktiv ist, läßt sich allenfalls über das Windows-API ermitteln. Die Schwierigkeit liegt allerdings darin, dass es für den WE kein eindeutigen Fensternamen gibt. Dieser hängt davon ab, in welchem Ordner du dich gerade mit dem WE befindest. Die Api-Funktion "WindWindowEx" greift hier also nicht. Ein Ansatz wäre, alle aktiven Prozesse zu ermitteln und anschließend die dazugehörige Exe-Datei. Das API stellt hierfür entsprechende Routinen zur Verfügung.

Warum programmierst Du innerhalb Deiner Anwendung nicht eine eigene Dateianzeige?

Gruß, Olaf
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

Hallo,

da ich bis her nichts mit Windows-API gemacht habe, mich aber gerne der Herausforderung stellen will, währe es nett wenn du mir einen Tipp geben könntest wo ich anfangen soll.
Also im Prinzip: Wie binde ich die API in Xbase etc. Vielleicht gibt es da auch irgendwo ein simples Beispiel das ich mir anschauen könnte? Das habe ich allerdings noch nicht gefunden.

Zur deine Frage:
“Warum programmierst Du innerhalb Deiner Anwendung nicht eine eigene Dateianzeige?“

Habe ich. D.h. die Auswahl der zu bearbeitenden Dateien findet schon in einer „Datenanzeige der Anwendung“ statt. Trotzdem haben einige User nebenbei den Explorer offen. Und dann kommt es eben dazu dass z.b. Dateien aus der Anwendung heraus gelöscht werden aber der Explorer sie immer noch Auflistet da seine Übersicht nicht automatisch aktualisiert wird.

Ach ja, handelt es sich bei der Windows-API um das gleiche das Tom mit „DispatchMessage()" meint? Wie gesagt Windowsprogrammierung ist Neuland für mich. Ich hoffe ich stelle nicht all zu dumme Fragen(?).

Gruß,
Notloesung
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Zur Nutzung des Windows-API findest Du ein Beispiel unter dem Thread "Anwendung in den Vordergrund holen/Windows-API"

Warum willst Du eigentlich diesen Entwicklungsaufwand betreiben? Wenn der WE bei der bezeichneten Registry-Einstellung die Anzeige nicht aktualisiert, dann ist das ein Problem vom WE und nicht Deiner Anwendung. Auch Anwender können sich durchaus Einsichtig zeigen ;-)

Viele Grüße
Olaf
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

Wenn der WE bei der bezeichneten Registry-Einstellung die Anzeige nicht aktualisiert, dann ist das ein Problem vom WE und nicht Deiner Anwendung.
Das muss ich dir Recht geben.
Auch Anwender können sich durchaus Einsichtig zeigen
Es gibt Anwender die tun es nicht. Ein Tastendruck auf "F5" ist für sie ein Tastendruck zu viel.
Warum willst Du eigentlich diesen Entwicklungsaufwand betreiben?
Bin relativ unerfahren im Windowsbereich und sehe das als einer Art Herausforderung und Übung an. Mal lernt eben dazu. Außerdem habe ich schon das nächste Problem (ich meine die nächste Herausforderung) und ich denke da komme ich ganz schön ins schwitzen. Deshalb ist das ganz gut zum Aufwärmen.

Gruß,
Notloesung
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15694
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

der Explorer aktualisiert die Anzeige nicht immer automatisch (bei mir unter Win2000 wird die Dateianzeige etwa alle 5 Sekunden angepaßt ohne eine Änderung irgendwo), da dies je nach Speichermedium eine erhebliche Systemlast erzeugen würde.

Lokale Festplatte wäre egal,
Server für 1000 User im LAN, der könnte schon schnaufen
Schmale WAN Verbindung, hier würde sonst nichts mehr laufen.

Der Internet Explorer verheimlicht so ja nicht nur Änderungen deiner Programme, sondern z.B. auch neue Word Dateien. Es sollte also leicht zu beweisen sein, dass es nicht deine Anwendung ist, welche die Umstände bereitet.
Gruß
Hubert
Antworten