SyntaxHighlighter

2016年1月23日土曜日

HSPでPCにあるドライブの一覧を取得し、さらに詳細情報を得る



#uselib "Kernel32"
#func GetLogicalDriveStrings "GetLogicalDriveStringsA" int,var
#cfunc GetDriveType "GetDriveTypeA" var
#define DRIVE_UNKNOWN 0 //ドライブの種類が判別できません。
#define DRIVE_NO_ROOT_DIR 1 //指定のルートディレクトリが存在しません。
#define DRIVE_REMOVABLE 2 //ドライブからディスクを抜くことができます。
#define DRIVE_FIXED 3 //ドライブからディスクを抜くことができません。
#define DRIVE_REMOTE 4 //リモート (ネットワーク) ドライブです。
#define DRIVE_CDROM 5 //CD-ROM ドライブです。
#define DRIVE_RAMDISK 6 //RAM ディスクです。


sdim buf,1024
//ドライブ一覧を取得
GetLogicalDriveStrings 1024,buf

//NULL文字で区切られているので、分離して文字列に
null_cnt=0;
REPEAT 1024
b = peek(buf,cnt)
if(b == 0) : {
null_cnt++;
poke buf,cnt,','
}else{
null_cnt=0;
}

if(null_cnt>=2):{
poke buf,cnt,0
break
}
LOOP

//末端に付いた,を除去
buf = strtrim(buf,2,',')
//文字列を分離して配列に
split buf,",",drives

//詳細情報取得
dim drives_info,30 //詳細配列初期化
foreach drives
drives_info(cnt) = GetDriveType(drives.cnt)
loop

//表示
DriveListString=""
foreach drives
Show = ""+drives.cnt+" : "
if(drives_info(cnt) == DRIVE_UNKNOWN) : Show+="DRIVE_UNKNOWN"
if(drives_info(cnt) == DRIVE_NO_ROOT_DIR) : Show+="DRIVE_NO_ROOT_DIR"
if(drives_info(cnt) == DRIVE_REMOVABLE) : Show+="DRIVE_REMOVABLE"
if(drives_info(cnt) == DRIVE_FIXED) : Show+="DRIVE_FIXED"
if(drives_info(cnt) == DRIVE_REMOTE) : Show+="DRIVE_REMOTE"
if(drives_info(cnt) == DRIVE_CDROM) : Show+="DRIVE_CDROM"
if(drives_info(cnt) == DRIVE_RAMDISK) : Show+="DRIVE_RAMDISK"
mes Show

DriveListString += Show + "\n"
loop

objsize 500
DriveSelect= -1
listbox DriveSelect,100,DriveListString
button "OK",*OK

stop
*OK
mes drives.DriveSelect

0 件のコメント:

コメントを投稿