On 24/03/2012 21:29, Albert-Jan Roskam wrote:
Thanks! This seems a feasible approach. I have found this Python project that exposes some of the functions of mpr.dll: http://sourceforge.net/projects/wnetconnect/ WNetGetConnection is not among the functions, but the code will help. I have to read up on ctypes.Structure though as I never really understood this.
This particular function call doesn't require too much work in fact. Something like the following code -- error-handling mostly omitted -- should do the trick: <code> import ctypes # # Get the ANSI version of the function from its DLL # WNetGetConnection = ctypes.windll.mpr.WNetGetConnectionA ERROR_MORE_DATA = 234 # # Set up the drive name to map back from # and an empty buffer with zero length. # local_name = "Z:" length = ctypes.c_long (0) remote_name = ctypes.create_string_buffer ("") # # Call the function, expecting to receive an ERROR_MORE_DATA # result, which indicates that the buffer is too small and # which populates the length field with the right length. # result = WNetGetConnection ( local_name, remote_name, ctypes.byref (length) ) # # Assuming we did get that error, recreate the buffer and # call again with the supplied length. This isn't strictly # necessary (you could probably get away with hard-coding # 2048 or whatever) but it does save you having to guess. # if result == ERROR_MORE_DATA: remote_name = ctypes.create_string_buffer (length.value) result = WNetGetConnection ( local_name, remote_name, ctypes.byref (length) ) # # If the result of either call was an error, raise an Exception # if result != 0: raise RuntimeError ("Error %d" % result) print "Remote name is", remote_name.value </code> TJG _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor