我有一个有效的驱动器号的列表,我想给最终用户提供一个select。 我想向他们展示驱动器的名称。 这里有一些代码应该显示驱动器名称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}\
。 我怎样才能得到窗口显示在资源pipe理器中的string(例如, 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
尝试GetVolumeInformation
函数。 它直接返回卷标。
你为什么不使用win32api.GetVolumeInformation?
import win32api win32api.GetVolumeInformation("C:\\")
输出
('WINDOWS', 1992293715, 255, 65470719, 'NTFS')
使用上面的片段,我作为一个快速助手填充了缺少的(可选的,null)参数:
import ctypes kernel32 = ctypes.windll.kernel32 volumeNameBuffer = ctypes.create_unicode_buffer(1024) fileSystemNameBuffer = ctypes.create_unicode_buffer(1024) serial_number = None max_component_length = None file_system_flags = None rc = kernel32.GetVolumeInformationW( ctypes.c_wchar_p("F:\\"), volumeNameBuffer, ctypes.sizeof(volumeNameBuffer), serial_number, max_component_length, file_system_flags, fileSystemNameBuffer, ctypes.sizeof(fileSystemNameBuffer) ) print volumeNameBuffer.value print fileSystemNameBuffer.value
这应该是复制和粘贴能力。