Continue to Site

Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations IDS on being selected by the Eng-Tips community for having the most helpful posts in the forums last week. Way to Go!

API - UNC vs. Mapped path in SW VB extraction

Status
Not open for further replies.

gedkins

Mechanical
May 11, 2001
45
All you clever systems folks out there:

When using the SW API call (GetPathName) it returns the mapped drive for that SW session, on that machine. Is there any way (perhaps subclassing via Windows API) to return the UNC path such that if the data extracted is used elsewhere on the same network it would yield a correct path to the file regardless of machine specific mappings?





Guy Edkins
Managing Partner
Delta Group Ltd

gedkins@deltagl.com
 
Replies continue below

Recommended for you

I'll give this a crack...

According to Microsoft's Knowledge Base this code does the trick

' 32-bit Function version.
' Enter this declaration on a single line.
Declare Function WNetGetConnection32 Lib "MPR.DLL" Alias _
"WNetGetConnectionA" (ByVal lpszLocalName As String, ByVal _
lpszRemoteName As String, lSize As Long) As Long

' 32-bit declarations:
Dim lpszRemoteName As String
Dim lSize As Long

' Use for the return value of WNetGetConnection() API.
Const NO_ERROR As Long = 0

' The size used for the string buffer. Adjust this if you
' need a larger buffer.
Const lBUFFER_SIZE As Long = 255

Sub GetNetPath()

' Prompt the user to type the mapped drive letter.
DriveLetter = UCase(InputBox("Enter Drive Letter of Your Network" & _
"Connection." & Chr(10) & "i.e. F (do not enter a colon)"))

' Add a colon to the drive letter entered.
DriveLetter = DriveLetter & ":"

' Specifies the size in characters of the buffer.
cbRemoteName = lBUFFER_SIZE

' Prepare a string variable by padding spaces.
lpszRemoteName = lpszRemoteName & Space(lBUFFER_SIZE)

' Return the UNC path (\\Server\Share).
lStatus& = WNetGetConnection32(DriveLetter, lpszRemoteName, _
cbRemoteName)

' Verify that the WNetGetConnection() succeeded. WNetGetConnection()
' returns 0 (NO_ERROR) if it successfully retrieves the UNC path.
If lStatus& = NO_ERROR Then

' Display the UNC path.
MsgBox lpszRemoteName, vbInformation

Else
' Unable to obtain the UNC path.
MsgBox "Unable to obtain the UNC path.", vbInformation
End If

End Sub

You should be able to modify it to achieve your nefarious plans. :)
 
Ah MS API does it again! Thanks Nathan I will give it a try and see if I don't fall into dll hell.

Guy Edkins
Managing Partner
Delta Group Ltd

gedkins@deltagl.com
 
I was successful in getting what I wanted done. So now when I do a VB BOM extraction from an assembly, no matter if the files are local, appear on a local mapped drive, or were browsed to via network neighborhood the path returned is always UNC. Local drives even become the correct hidden UNC (D$) with the computer name correctly prefixed. This means when it is later manipulated into an Excel spreadsheet that is then published to the web, all the hyperlinks for the file names are unbreakable regardless of different local machine maps! Viola! Instant web based vault via a browser for all SW objects, parts, assemblies, and drawings! If anyone is interested in this really simple web based viewing system (done in Excel, and any browser) that contains a plethora of data including Cost Roll-Up, Total Weight, Total Cost, NHA, Where Used, Discrete Part Count, Item Master List, and Assembly Hierachy, just drop me an e-mail.

Guy Edkins
Managing Partner
Delta Group Ltd

gedkins@deltagl.com
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor