web-dev-qa-db-ja.com

コンピュータに接続されているリムーバブルドライブのリストを取得するにはどうすればよいですか?

コンピューターに接続されているリムーバブルドライバーのリストを取得したいのですが。

レジストリを使えばできると思いますが、正確にはわかりません。

別の方法があれば、私はそれについて聞きたいです。

注:リムーバブルドライブを固定ドライブから分離できることが重要です。

3

アルゴリズムは単純です。

  • [MS.Docs]:GetGetLogicalDriveStringsW function を呼び出します。これにより、既存のすべてのルートディレクトリ(C:\\)を含む文字列が返されます。[〜#〜] null [〜#〜]\ x00)chars
    • Rootdirを繰り返し処理し、 [MS.Docs]:GetDriveTypeW function を使用してそれぞれのタイプを取得します。
    • リムーバブルドライブをフィルタリングします(タイプDRIVE_REMOVABLE

これは、Pythonpywin32ラッパーを使用)での外観です。 win32con.DRIVE_*定数のいずれかをdrive_typesタプルに追加して、さまざまなドライブタイプの組み合わせを取得します。

code.py

import sys
import win32con
from win32api import GetLogicalDriveStrings
from win32file import GetDriveType


def get_drives_list(drive_types=(win32con.DRIVE_REMOVABLE,)):
    drives_str = GetLogicalDriveStrings()
    drives = [item for item in drives_str.split("\x00") if item]
    return [item[:2] for item in drives if drive_types is None or GetDriveType(item) in drive_types]


def main():
    drive_filters_examples = [
        (None, "All"),
        ((win32con.DRIVE_REMOVABLE,), "Removable"),
        ((win32con.DRIVE_FIXED, win32con.DRIVE_CDROM), "Fixed and CDROM"),
    ]
    for (drive_types_Tuple, display_text) in drive_filters_examples:
        drives = get_drives_list(drive_types=drive_types_Tuple)
        print("{:s} drives:".format(display_text))
        for drive in drives:
            print("{:}  ".format(drive), end="")
        print("\n")


if __== "__main__":
    print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
    main()

出力

(py35x64_test) e:\Work\Dev\StackOverflow\q041465580>"e:\Work\Dev\VEnvs\py35x64_test\Scripts\python.exe" code.py
Python 3.5.4 (v3.5.4:3f56838, Aug  8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)] on win32

All drives:
C:  D:  E:  F:  G:  H:

Removable drives:
D:

Fixed and CDROM drives:
C:  E:  F:  G:  H:
4
CristiFati