もしかして、C,D,E,…‥ という風に、接続されているドライブのドライブ文字及びボリュームラベル
を列挙したいのですか?
違ったらごめんなさい。
もし合っていたら、下のモジュールなんかはどうでしょうか?
即興で作ってみたものですが。
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
;
; 「mod_GetDriveInfo」
;
; 製作開始 2013/7/18
; 最終更新 2013/7/18
;
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#module N_M_GDInf1 ;Name_Mod_GetDriveInfo1 の略
;接続されているドライブのドライブ文字及びボリュームラベルの一覧を取得する
;[書式]
; MGDInf_DriveList buf1,buf2
; buf1には、ドライブ文字が改行で区切られて格納される。
; buf2には、ドライブのボリューム名が改行で区切られて格納される。
; 尚、buf1,buf2の同じ行の内容は対応している。
; 検出されたドライブの数がstatに保存される。
#uselib "kernel32.dll"
#func GetLogicalDriveStringsA "GetLogicalDriveStringsA" int , var
;↓[APIの書式]
;GetLogicalDriveStringsA バッファのサイズ , バッファの名前
;バッファに、C:/ 等がヌル文字で区切られながら保存されて返ってくる。
;(例)
; C:/<null>D:/<null>E:/<null>
#func GetVolumeInformationA "GetVolumeInformationA" str , var , int , int,int,int,int,int
#deffunc MGDInf_DriveList var char_drives , var VolLabel_drives
sdim buf1,104 ;104 = (3+1)*26 の意味は、 例えば C:/ + ヌル文字 で4バイト。A〜Zで最大26台まで想定するということ。
GetLogicalDriveStringsA 104,buf1
sdim buf2,3
;sdim buf3,32 ;32 = NTFSの場合の最長文字数
sdim char_drives,104
sdim VolLabel_drives,884 ;884 = (32+2)*26 = [NTFSの場合の最長文字数 + \n]*[想定される最大ドライブ数]
repeat 26
memcpy buf2,buf1,3, 0,4*cnt ;4バイトステップで、3バイトずつ読み込む。
if buf2 = "" : cnt1 = cnt : break
char_drives += buf2 + "\n"
sdim buf3,32 ;32 = NTFSの場合の最長文字数。この内容はこちらで初期化しておく。(∵ボリュームラベルが空だった場合、Win側でバッファの内容を書き換えてくれない。)
GetVolumeInformationA buf2 , buf3 , 832 , 0,0,0,0,0 ;832 = 32*26(= [NTFSの場合の最長文字数]*[想定される最大ドライブ数])
VolLabel_drives += buf3 + "\n"
loop
return cnt1
#global
↑を「mod_GetDriveInfo.as」というファイル名で保存し、
同じフォルダ内に、下のサンプルスクリプトを作成して実行してみてください。
利用可能なドライブの一覧が表示されます。
モジュールとサンプルをザッと読めば要領が分かると思います。
#include "mod_GetDriveInfo.as"
MGDInf_DriveList char_drives,VolLabels
;[書式]
; MGDInf_DriveList buf1,buf2
; buf1には、ドライブ文字が改行で区切られて格納される。
; buf2には、ドライブのボリューム名が改行で区切られて格納される。
; 尚、buf1,buf2の同じ行の内容は対応している。
; 検出されたドライブの数がstatに保存される。
count1 = stat
mes "接続されているディスクドライブの総数は "+count1+" 個です。\n"
split char_drives,"\n",str1
split VolLabels,"\n",str2
message = "(ドライブ文字) (ボリュームラベル)\n\n"
repeat count1
message += str1(cnt) + " " + str2(cnt) + "\n"
loop
mes message