HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0715
可憐ボリュームラベルを取得したいです8未解決


可憐

リンク

2013/7/15(Mon) 21:43:56|NO.55698

お世話になります。
ハードディスクのCドライブ、Dドライブのボリュームラベルはどう取得すれば良いでしょうか?
過去のスレッドを色々探してみたんですが見つかりませんでした。
よろしくお願いします。



この記事に返信する


cats

リンク

2013/7/15(Mon) 23:25:23|NO.55701

VBSかBATをHSPで動かせばできます。
ちなみにVBSのスクリプトは

Set fso = CreateObject("Scripting.FileSystemObject") Set src = fso.GetDrive("C:") WScript.Echo src.VolumeName
BATのスクリプトは

vol C:
です。
それぞれ「C:」のところを調べたいドライブを指定してください。



hiro

リンク

2013/7/15(Mon) 23:50:23|NO.55702

kernel32.asに定義されているGetVolumeInformation関数で取得できます。

MSDN GetVolumeInformation
http://msdn.microsoft.com/ja-jp/library/cc429511.aspx

Cドライブのボリューム名の表示例
#include "kernel32.as"
sdim volName, 261 GetVolumeInformation "c:\\", varptr(volName), 261, 0, 0, 0, 0, 0 mes volName stop



可憐

リンク

2013/7/16(Tue) 21:30:44|NO.55712

返事遅れてすみませんでした。
hiroさん

Sdim 261は
Cドライブのボリューム名ですか?
Dドライブはどうやって取得したらいいでしょうか?
質問ばかりで申し訳ないです。
そしてソースありがとうございます。



cats

リンク

2013/7/16(Tue) 22:57:07|NO.55716

>Dドライブはどうやって取得したらいいでしょうか?
hiroさんが載せてくださったサイトを見ましょう。



GENKI

リンク

2013/7/17(Wed) 00:09:51|NO.55720

> Sdim 261は

HSPスクリプトエディタ上で、sdimにカーソルを当て(sdimをクリック)キーボードのF1キーを押すとHSPのヘルプが起動します。
成功するとsdimの説明ページが開きます。sdimのページが開かなかったら左上の入力ボックスでsdimで検索すると出てきます。
ざっと目を通してみてください。

次はcatsさんの言うとおり、hiroさんが紹介しているページを開いて見てみてください。

マニュアルは読んでもなかなか理解しがたいものですが、分からないでもまずは目を通しておく。
それだけでも理解の助けになります。
またわからない事を調べるいとぐちにもなります。



hiro

リンク

2013/7/17(Wed) 23:13:18|NO.55725

>Sdim 261は
>Cドライブのボリューム名ですか?
Cドライブのボリューム名が、変数volNameに格納されます。

>Dドライブはどうやって取得したらいいでしょうか?
GetVolumeInformationの第一引数に、"d:\\"を指定してください。

catsさん、GENKIさんがレスされているので蛇足になりますが、
詳細は、MSDNのGetVolumeInformationを見てください。



FunnyMaker

リンク

2013/7/18(Thu) 18:10:50|NO.55734

もしかして、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



FunnyMaker

リンク

2013/7/18(Thu) 18:19:47|NO.55735

ごめんなさい。
上のモジュール、47行目でミス(無駄な要領確保)がありました。

↓で置き換えてください。

GetVolumeInformationA buf2 , buf3 , 32 , 0,0,0,0,0



ONION software Copyright 1997-2021(c) All rights reserved.