我有一个有效驱动器号的列表,我想向最终用户提供一个选择。我想向他们显示驱动器的名称。下面的一些代码应该会向我显示驱动器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
7条答案
按热度按时间anauzrmj1#
为什么不使用win32api.GetVolumeInformation呢?
产出
rdrgkggo2#
尝试
GetVolumeInformation
函数,它直接返回卷标。2skhul333#
使用上面的代码片段,我填充了缺少的(可选的,null)参数作为快速助手:
这应该是可复制和粘贴的。
p1tboqfb4#
def查找驱动器按驱动器标签(驱动器标签):
vxf3dgd45#
您可以执行windows shell cmd并解析输出。
在Python 3.x中:
在Python 2.7中:
zyfwsgd66#
你可以在下面的代码,以获得您的驱动器名称,如果你觉得有用
n6lpvg4x7#
导入win32 api导入win32 file驱动器= win32api.GetLogicalDriveStrings()驱动器=驱动器.split('\000')[:-1]
对于驱动器中的驱动器:如果win32file.GetDriveType(驱动器)== win32file.驱动器可移除:标签,文件系统,串行,c,d = win32api.GetVolumeInformation(获取卷信息)打印(标签)