我有一个有效驱动器字母列表,并且我想向最终用户提供选择。我希望向他们显示驱动器的名称。以下是应该显示驱动器名称F:\
的代码:
import ctypes
kernel32 = ctypes.windll.kernel32
buf = ctypes.create_unicode_buffer(1024)
kernel32.GetVolumeNameForVolumeMountPointW(
ctypes.c_wchar_p("F:\\"),
buf,
ctypes.sizeof(buf)
)
print buf.value
然而,这个输出结果是\\?\Volume{a8b6b3df-1a63-11e1-9f6f-0007e9ebdfbf}\
。我该如何获取Windows资源管理器中显示的字符串(例如,我拥有的某个闪存驱动器的KINGSTON
)?
编辑:
仍然不起作用:
volumeNameBuffer = ctypes.create_unicode_buffer(1024)
fileSystemNameBuffer = ctypes.create_unicode_buffer(1024)
kernel32.GetVolumeInformationW(
ctypes.c_wchar_p("C:\\"),
volumeNameBuffer,
ctypes.sizeof(volumeNameBuffer),
fileSystemNameBuffer,
ctypes.sizeof(fileSystemNameBuffer)
)
这给我带来了这个错误:
WindowsError: exception: access violation reading 0x3A353FA0
lpVolumeSerialNumber
、lpMaximumComponentLength
和lpFileSystemFlags
。文档中的“可选”标识并不意味着你可以简单地省略它们,而是表示如果你对该值不感兴趣,可以将NULL
作为指向该信息的指针传递。 - Greg Hewgill