【HSP】ディスクの挿入/取り出し確認&情報表示【サンプル】

【HSP】ディスクの挿入/取り出し確認&情報表示【サンプル】

HSPサンプル蔵や他のサイトを参考にして作りました。その方々にはサンクス。

//// プラグイン/モジュール
// 関数定義
#uselib "kernel32.dll"
#cfunc  GetDriveType "GetDriveTypeA" var
#func   GetDiskFreeSpaceEx "GetDiskFreeSpaceExA" var,var,var,var
#func   GetVolumeInformation "GetVolumeInformationA" var,var,int,var,var,var,var,int

//// メイン
// 準備
screen 0,640,480
// 全般
sdim dir,64 // ドライブ名 (A~Z)
sdim dir2,64 // ドライブ名 (A:\~Z:\)
// GetDriveType
dim type // ドライブの種類 (ディスクあってもなくても)
// GetDiskFreeSpaceEx
dim mine_sp,2 // 自分が使用できるサイズ
dim all_sp,2 // ドライブサイズ
dim free_sp,2 // ドライブ空きサイズ
// GetVolumeInformation
sdim vol_name,261 // ボリューム名
dim vol_no // ボリュームのシリアル番号
dim file_name_len_max // ファイル名の長さ最大
dim file_system_option // ファイルシステムオプション
sdim file_system_name // ファイルシステム名
// メイン
gosub *cdRomSearch
oncmd gosub *getcmd,0x0219
stop
*getcmd
if wparam=32768 : gosub *cdRomSearch
if wparam=32772 : dialog "ディスクが取出されました",,"情報" : gosub *cdRomSearch
return
*cdRomSearch
color 255,255,255 : boxf
color : pos 0,0
repeat 26
lpoke dir,0,65+cnt;+32 (小文字に変換)
dir2=dir+":\\"
type=GetDriveType(dir2)
if type=5 {
GetVolumeInformation dir2,vol_name,261,vol_no,file_name_len_max,file_system_option,file_system_name,261
if stat {
mes dir2
mes "ボリューム名 : "+vol_name
mes "シリアル番号 : "+vol_no
mes "ファイル名の長さ最大 : "+file_name_len_max
mes "ファイルシステム名 : "+file_system_name
GetDiskFreeSpaceEx dir2,mine_sp,all_sp,free_sp
all_sp.0=all_sp.1<<22|(total.0>>10&$3fffff)
free_sp.0=free_sp.1<<22|(free.0>>10&$3fffff)
mes "使用中サイズ : "+((all_sp-free_sp)>>20)+" GB / "+(all_sp>>20)+" GB"
}
}
loop
return

このスクリプト実行時にすでにCDドライブにディスクが入っていた場合は、そのディスクの情報が表示されます。
後からディスクを入れたり外したりしてもおk。後から入れるとちゃんと再取得し、取り出されたらダイアログで注意してから更新。
(使用中サイズが0GBなのはたぶん1GB未満だからだと…)
本当はこれからリッピング機能つけたいんですけど…あっちでエラーこっちでエラーで全然進まない…orz
まあぼちぼちやっていきます。
ではまたいつか。
↓投票 (クリック) お願いします~


「【HSP】ディスクの挿入/取り出し確認&情報表示【サンプル】」への2件のフィードバック

  1. おお、これいいですね^^!
    ディスクの有無で何か行動を起こさせたいときに利用できそうです。
    参考にします^^

  2. ありがとうございます!!
    CD再生ソフトの作成や、特定のディスクを挿入することでバージョンアップできるソフトなどの作成ができます!!

コメントは受け付けていません。