* // Funktionstest Start
CLEAR
?GetFullUNCPath( [H:] )
?GetFullUNCPath( [H:\] )
?GetFullUNCPath( [H:\Foxprogs] )
?GetFullUNCPath( [H:\Foxprogs\] )
?GetFullUNCPath( [H:\Foxprogs\mware71] )
?GetFullUNCPath( [H:\Foxprogs\mware71\] )
?GetFullUNCPath( [H:\Foxprogs\mware71\konf.exe] )
* // Funktionstest Ende
FUNCTION GetFullUNCPath as String
LPARAMETERS vMappedName as String
* // Datendeklaration und Initialisierung
LOCAL lcUNCBuffer as String, liLength as Integer, ;
lcUNCName as String, llContinue as Boolean, ;
lcMessage as String, lcPath as String
lcUNCBuffer = []
liLength = 0
lcUNCName = []
llContinue = .T.
lcMessage = []
vMappedName = IIF(DIRECTORY( vMappedName ) , ADDBS( vMappedName ) , vMappedName )
lcPath = IIF( LEN( vMappedName ) > 2 , SUBSTR( vMappedName , 3 ) , [] )
vMappedName = JUSTDRIVE( vMappedName )
* // Deklaration der API-Funktion
TRY
DECLARE INTEGER WNetGetConnection IN WIN32API ;
STRING @ lpLocalName, ;
STRING @ lpRemoteName, ;
INTEGER @ lpliLength
CATCH
TEXT TO lcMessage NOSHOW TEXTMERGE PRETEXT 2
Deklaration von WNetGetConnection in WIN32API
ist fehlgeschlagen. Funktion wird vorzeitig beendet.
ENDTEXT
MESSAGEBOX(lcMessage,0+16+0,[Information])
llContinue = .F.
ENDTRY
* // Umsetzung des lokalen Pfades in einen UNC Pfad
IF llContinue
IF !EMPTY( vMappedName ) AND VARTYPE( [vMappedName] ) = [C]
lcUNCBuffer = REPL( CHR( 0 ) , 261 )
liLength = LEN( lcUNCBuffer )
vMappedName = ALLTRIM( vMappedName )
IF LEN( vMappedName ) = 1
vMappedName = vMappedName + [:]
ENDIF
TRY
IF WNetGetConnection( vMappedName , @lcUNCBuffer , @liLength ) = 0
lcUNCName = LEFT( lcUNCBuffer , AT( CHR( 0 ) , lcUNCBuffer ) - 1 )
ENDIF
CATCH
TEXT TO lcMessage NOSHOW TEXTMERGE PRETEXT 2
Aufruf von WNetGetConnection in WIN32API
ist fehlgeschlagen. UNC-Pfad konnte nicht
generiert werden.
ENDTEXT
MESSAGEBOX( lcMessage , 0+16+0 , [Information] )
ENDTRY
ENDIF
ENDIF
RETURN lcUNCName + lcPath
ENDFUNC
Posts mit dem Label UNC Pfadnamen werden angezeigt. Alle Posts anzeigen
Posts mit dem Label UNC Pfadnamen werden angezeigt. Alle Posts anzeigen
Freitag, 25. Juni 2010
Erzeugen von UNC Pfadnamen / Creating UNC Pathnames (Revisited)
Nachdem ich heute zufälligerweise in eine alte Funktion von mir reingeschaut habe (Erzeugen von UNC-Pfadnamen), gab es auch gleich Verbesserungsbedarf. Im Blogeintrag vom September 2008 konnte nur ein Laufwerksbuchstabe (bspw. H:) übergeben werden. Die neue Funktion habe ich nun dahingehend erweitert, dass es jetzt sowohl reine Laufwerksbuchstaben, als auch komplette Verzeichnis- und/oder Dateinamen sein dürfen. Die verschiedenen Möglichkeiten sind im vorgelagerten Funktionstest zu ersehen.
Mittwoch, 3. September 2008
Erzeugen von UNC Pfadnamen / Creating UNC pathnames
Im folgenden Posting geht es um die Konvertierung von Verzeichnisnamen die auf gemappte Laufwerke zugreifen.
Mit Hilfe der WIN32API können wir über die dort verfügbare Funktion WNetGetConnection den UNC Namen ( Universal/Uniform Naming Convention ) einer solchen Verbindung abfragen.
Mit Hilfe der WIN32API können wir über die dort verfügbare Funktion WNetGetConnection den UNC Namen ( Universal/Uniform Naming Convention ) einer solchen Verbindung abfragen.
FUNCTION GetUNCPath
LPARAMETERS vMappedName as String
* // Datendeklaration und Initialisierung
LOCAL lcUNCBuffer as String, liLength as Integer, ;
lcUNCName as String, llContinue as Boolean, ;
lcMessage as String
lcUNCBuffer = []
liLength = 0
lcUNCName = []
llContinue = .T.
lcMessage = []
* // Deklaration der API-Funktion
TRY
DECLARE INTEGER WNetGetConnection IN WIN32API ;
STRING @ lpLocalName, ;
STRING @ lpRemoteName, ;
INTEGER @ lpliLength
CATCH
TEXT TO lcMessage NOSHOW TEXTMERGE PRETEXT 2
Deklaration von WNetGetConnection in WIN32API
ist fehlgeschlagen. Funktion wird vorzeitig beendet.
ENDTEXT
MESSAGEBOX(lcMessage,0+16+0,[Information])
llContinue = .F.
ENDTRY
* // Umsetzung des lokalen Pfades in einen UNC Pfad
IF llContinue
IF !EMPTY(m.vMappedName) AND VARTYPE([m.vMappedName]) = [C]
lcUNCBuffer = REPL(CHR(0),261)
liLength = LEN(lcUNCBuffer)
m.vMappedName = ALLTRIM(m.vMappedName)
IF LEN(m.vMappedName) = 1
m.vMappedName = m.vMappedName + [:]
ENDIF
TRY
IF WNetGetConnection(m.vMappedName, @lcUNCBuffer, @liLength) = 0
lcUNCName = LEFT(lcUNCBuffer,AT(CHR(0),lcUNCBuffer)-1)
ENDIF
CATCH
TEXT TO lcMessage NOSHOW TEXTMERGE PRETEXT 2
Aufruf von WNetGetConnection in WIN32API
ist fehlgeschlagen. UNC-Pfad konnte nicht
generiert werden.
ENDTEXT
MESSAGEBOX(lcMessage,0+16+0,[Information])
ENDTRY
ENDIF
ENDIF
RETURN lcUNCName
ENDFUNC
Abonnieren
Posts (Atom)