Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi WNetGetConnection erkenne ob LW getrennt wurde? (https://www.delphipraxis.net/187481-wnetgetconnection-erkenne-ob-lw-getrennt-wurde.html)

alfold 2. Dez 2015 15:26

WNetGetConnection erkenne ob LW getrennt wurde?
 
PC1 stellt das Laufwerk zur Verfügung.
PC2 verbindet sich mit diesem und dort soll geprüft werden ob das Netzlaufwerk noch da ist.
Ich teste dies gerade und stelle fest.
Beim ersten Aufruf alles Ok. Zeigt den UncNamen an usw.
Wenn die Netzwerkverbindung nicht mehr da ist und ich rufe die Funktion noch mal auf gibt es keine Fehlermeldung!
Gehe ich richtig in der Annahme das dies nicht geprüft wird ob das Netzwerk da ist?
MSDN hat zwar Fehlercode ausgewiesen aber erhalten tue ich nur zwei , NOT_CONNECTED oder NO_ERROR.

WinXP

Ich suche eine Funktion die zur Laufzeit Prüft (evtl jede sec) ob das Netzlaufwerk noch da ist was Pc1 zu Verfügung stellt.


Gruß alfold

alfold 3. Dez 2015 09:40

AW: WNetGetConnection erkenne ob LW getrennt wurde?
 
Zitat:

Gehe ich richtig in der Annahme das dies nicht geprüft wird ob das Netzwerk da ist?
Weitere Tests:

ERROR_CONNECTION_UNAVAIL erscheint wenn das LW noch nie verbunden wurde.
und das wars.

Bei Trennung oder nicht vorhandener Netzwerkkarte kommt keine weiter Fehlermeldung.:shock:
Hinweis: (ich kann kein Engl.) :oops: falls jetzt jemand kommt und sagt in MSDN steht doch alles richtig drin.

Ok:
nehme ich die einfachste Möglichkeit mit DirectoryExists im Timer. Dauert unter Umständen etwas länger bis die Meldung kommt, aber funct wenigstens. :wink: Zu mindesten bei dem für was ich es brauche.
Gruß alfold

Christian Seehase 3. Dez 2015 10:05

AW: WNetGetConnection erkenne ob LW getrennt wurde?
 
Moin alfold,

zu dem Verhalten habe ich mal eine Vermutung:

Seit Windows 2000 werden Netzwerklaufwerke nach einer bestimmten Zeit automatisch getrennt (wenn ich mich recht entsinne, nach 15 Min.), wenn kein Zugriff erfolgt.
Sobald ein Zugriff erfolgt, wird die Verbindung wieder hergestellt.
Unter Windows 2000 konnte man das getrennte Laufwerk daran erkennen, dass es im Explorer rot durchgext war, in folgenden Versionen konnte man das nicht mehr erkennen.
Vermutlich greift WNetGetConnection jetzt nicht wirklich auf das Laufwerk zu um nicht die Verbindung aufzubauen.

Du könntest es ja mit einem regelmässigen Aufruf von FindFirst auf Laufwerksbuchstabe:\. versuchen und das Ergebnis auswerten.

alfold 3. Dez 2015 10:40

AW: WNetGetConnection erkenne ob LW getrennt wurde?
 
Moin:-D
Zitat:

Zitat von Christian Seehase (Beitrag 1323280)
zu dem Verhalten habe ich mal eine Vermutung:

Vermutlich greift WNetGetConnection jetzt nicht wirklich auf das Laufwerk zu um nicht die Verbindung aufzubauen.

Soweit so gut. Was soll aber 'ERROR_NO_NETWORK / ERROR_NO_NET_OR_BAD_PATH' sein, wenn Local noch nicht mal das geprüft wird.
Zitat:

Zitat von Christian Seehase (Beitrag 1323280)
Du könntest es ja mit einem regelmässigen Aufruf von FindFirst auf Laufwerksbuchstabe:\. versuchen und das Ergebnis auswerten.

Erreich ich mit DirectoryExists ja auch:wink: . Dauert leider etwas länger 2-5sec. Je nachdem auf welcher Seite die Verbindung gekappt wurde.

Gruß alfold

hathor 3. Dez 2015 17:34

AW: WNetGetConnection erkenne ob LW getrennt wurde?
 
Hat schon jemand IsNetDrive getestet?
Ist zwar schon älter, aber solange es in SHELL.DLL vorhanden ist, kann man es auch nutzen.
This function returns one of the following values.
Return value - Description

0 - The specified drive is not a network drive.
1 - The specified drive is a network drive that is properly connected.
2 - The specified drive is a network drive that is disconnected or in an error state.

Const External_Library = 'shell32';
function IsNetDrive(iDrive:Longint):Longint;StdCall;
external External_library name 'IsNetDrive';

https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx

alfold 4. Dez 2015 08:46

AW: WNetGetConnection erkenne ob LW getrennt wurde?
 
Moin:-D
@hathor

Auch hier das gleiche es wird nur 0 oder 1 angezeigt!
0= Lw ist nicht gemappt bzw nicht vorhanden oder kein Netzlaufwerk. Selber raten was nun ist:?
1= es ist ein NetzLaufwerk

und das wars. Ob Netzwerk vorhanden oder nicht!

Gruß alfold


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