フロッピーのがaかどうか調べるNo.02755
haru さん 01/12/05 20:15
 
いつも、お世話様です。haruです。こんにちは。
早速なんですが、

 pc98 だと、フロッピーが a 以外になるんですが、これがドライ
ブの何なのか調べる方法はあるのでしょうか?
 是非教えていただきたいのですが。

以上、よろしくお願いします。
 

[ ]
RE:02755 フロッピーのがaかどうか調べるNo.02756
きいろいまふらあ さん 01/12/06 00:24
 
> pc98 だと、フロッピーが a 以外になるんですが、これがドライ
>ブの何なのか調べる方法はあるのでしょうか?

マクロでは無理でしょう。
フロッピーディスクドライブは複数ある場合もありますね。

[ ]
RE:02755 フロッピーのがaかどうか調べるNo.02758
encodingshiftjis さん 01/12/06 01:20
 
> pc98 だと、フロッピーが a 以外になるんですが、これがドライ
>ブの何なのか調べる方法はあるのでしょうか?

拡張子.HTA で以下を保存し、ダブルクリックすると動きます。

==================== Drive.HTA  

<HTML><HEAD><TITLE>ドライブ情報</TITLE>
<!--
WSH ではこれくらい、秀丸の runsync でマクロで接続か
対象: Drive オブジェクト
関連項目
AvailableSpace プロパティ | DriveLetter プロパティ | DriveType プロパティ |
FileSystem プロパティ | FreeSpace プロパティ | IsReady プロパティ | Path プ
ロパティ | RootFolder プロパティ | SerialNumber プロパティ | ShareName プロ
パティ | VolumeName プロパティ
-->
</HEAD><BODY><P>
<SCRIPT TYPE="text/JavaScript">
function ShowDriveInfo(drvSpec){
  var fso, d, s, t;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  d = fso.GetDrive(drvSpec);
  switch (d.DriveType)
  {
    case 0:t = "不明"; break;
    case 1:t = "リムーバブル ディスク"; break;
    case 2:t = "ハード ディスク"; break;
    case 3:t = "ネットワーク ドライブ"; break;
    case 4:t = "CD-ROM"; break;
    case 5:t = "RAM ディスク"; break;
  }  
    s = "ドライブ " + d.DriveLetter + ": - " + t;
if (d.IsReady){
      s += "<BR>" + "ドライブの準備ができています。";
      s += "<br>" + "SN: " + d.SerialNumber;
   }else
      s += "<BR>" + "ドライブの準備ができていません。";
  return(s);
}
function SpaceReport(drvSpec)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(drvSpec);
if (!d.IsReady)return;

   s = "ドライブ " + drvSpec + " - ";
   s += d.VolumeName + "<BR>";
   s += "合計サイズ:"+ d.TotalSize/1024 + " KB <BR>";
   s += "空き領域:   " + d.FreeSpace/1024 + " KB";
   return(s);
}
document.write(ShowDriveInfo("A:")+" :: "+ SpaceReport("A:")+"<BR>"  );
document.write(ShowDriveInfo("C:")+" :: "+ SpaceReport("C:")+"<BR>"  );
</SCRIPT>
</P></BODY></HTML>
=============================================
上をのスクリプト部分を  .JS で保存し
document.write を stdoutに出力、に変更すると
秀丸マクロの run "***.js  >con";
で取得できるでしょう。

[ ]
RE:02758 フロッピーのがaかどうか調べるNo.02761
haru さん 01/12/06 08:56
 
>上をのスクリプト部分を  .JS で保存し
>document.write を stdoutに出力、に変更すると
>秀丸マクロの run "***.js  >con";
>で取得できるでしょう。

ありがとうございます。使わせて頂きます。何かあったらまたよろ
しくお願いします。

[ ]
RE:02758 フロッピーのがaかどうか調べるNo.02767
山紫水明 さん 01/12/06 20:51
 
 encodingshiftjisさん,こんばんは。

》拡張子.HTA で以下を保存し、ダブルクリックすると動きます。

 たしかに動きましたが,なにやら,読めない文字がズラズラ出てきました。
さらにそれをコピーして秀丸に貼り付けたら次のようになりました。

?h?‰?C?u A: - ?????[?o?u?? ?f?B?X?N
?h?‰?C?u?I??”o?a?A?≪?A?¢?U?・?B
SN: 202512109 :: ?h?‰?C?u A: -
?‡?v?T?C?Y:1221 KB
?o?≪?I?a: 692 KB
?h?‰?C?u C: - ?n?[?h ?f?B?X?N
?h?‰?C?u?I??”o?a?A?≪?A?¢?U?・?B
SN: 744361472 :: ?h?‰?C?u C: -
?‡?v?T?C?Y:2044192 KB
?o?≪?I?a: 238944 KB

 何か文字コードの問題があるのでしょうか。

》document.write を stdoutに出力、に変更すると

 これは具体的には,どこをどのように変更したらよろしいのでしょう?

     では, (^^)/~
                                        山紫水明

[ ]
RE:02767 フロッピーのがaかどうか調べるNo.02770
ENCODINGSHIFTJIS さん 01/12/07 12:36
 
YahooBB のように、忙しかったので
>?h?‰?C?u?I??”o?a?A?≪?A?¢?U?・?B
>SN: 744361472 :: ?h?‰?C?u C: -
>?‡?v?T?C?Y:2044192 KB
>?o?≪?I?a: 238944 KB
> 何か文字コードの問題があるのでしょうか。

どこかに英語版のモジュールが挟まっていませんか?
.HTA の拡張子を .HTML に変更して IE で開いてみます

あとは、IEを最新日本語版などにしたり
(パッケージ内のDHTML関連のモジュールで、新しくなるはず)
だめなら
ウィンドウズ・インストーラを最新にしてから
WSHをダウンロード(日本語版の)かな
.CHM のヘルプファイル(日本語)も近くにあります

>》document.write を stdoutに出力、に変更すると
> これは具体的には,どこをどのように変更したらよろしいのでしょう?
後で書きます。

[ ]
RE:02770 フロッピーのがaかどうか調べるNo.02771
ENCODINGSHIFTJIS さん 01/12/07 13:50
 
>>》document.write を stdoutに出力、に変更すると
>> これは具体的には,どこをどのように変更したらよろしいのでしょう?
==================== Drive.js

function ShowDriveInfo(drvSpec){
  var fso, d, s, t;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  d = fso.GetDrive(drvSpec);
  switch (d.DriveType)
  {
    case 0:t = "不明"; break;
    case 1:t = "リムーバブル ディスク"; break;
    case 2:t = "ハード ディスク"; break;
    case 3:t = "ネットワーク ドライブ"; break;
    case 4:t = "CD-ROM"; break;
    case 5:t = "RAM ディスク"; break;
  }  
    s = "ドライブ " + d.DriveLetter + ": - " + t;
if (d.IsReady){
      s += "<BR>" + "ドライブの準備ができています。";
      s += "<br>" + "SN: " + d.SerialNumber;
   }else
      s += "<BR>" + "ドライブの準備ができていません。";
  return(s);
}
function SpaceReport(drvSpec)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(drvSpec);
if (!d.IsReady)return;

   s = "ドライブ " + drvSpec + " - ";
   s += d.VolumeName + "<BR>";
   s += "合計サイズ:"+ d.TotalSize/1024 + " KB <BR>";
   s += "空き領域:   " + d.FreeSpace/1024 + " KB";
   return(s);
}

    var stdout = WScript.StdOut;
   
stdout.write(ShowDriveInfo("A:")+" :: "+
SpaceReport("A:")+"<BR>"  );
stdout.write(ShowDriveInfo("C:")+" :: "+
SpaceReport("C:")+"<BR>"  );
=============================================
13:34 C:\Windows\TEMP > cscript C:\WINDOWS\デスクトップ\DRIVE.JS

ドライブ A: - リムーバブル ディスク<BR>ドライブの準備ができていま
ined<BR>ドライブ C: - ハード ディスク<BR>ドライブの準備ができてい
11874535 :: ドライブ C: - <BR>合計サイズ:2096320 KB <BR>空き領域:
==============================================
// testDrive.mac
run "cscript.exe C:\\WINDOWS\\デスクトップ\\DRIVE.JS >CON";

で動きます。 仕組みとしては OLE をたたくだけなので 、 OLE を扱える言語なら
同様です、 JAVA,Perl,Ruby など、書き方も普通のオブジェクト言語のタイプです

[ ]
RE:02771 フロッピーのがaかどうか調べるNo.02778
山紫水明 さん 01/12/08 10:18
 
 ENCODINGSHIFTJISさん,こんにちは。 いろいろご教示ありがとうございます。

》どこかに英語版のモジュールが挟まっていませんか?
》.HTA の拡張子を .HTML に変更して IE で開いてみます

 同じ文字化けがおこります。

》あとは、IEを最新日本語版などにしたり
》(パッケージ内のDHTML関連のモジュールで、新しくなるはず)
》だめなら
》ウィンドウズ・インストーラを最新にしてから
》WSHをダウンロード(日本語版の)かな
》.CHM のヘルプファイル(日本語)も近くにあります

 現在の環境が Windows98+IE5.5 ですので,こちらの方は,また別の機会にや
ってみます。

》>> これは具体的には,どこをどのように変更したらよろしいのでしょう?
》run "cscript.exe C:\\WINDOWS\\デスクトップ\\DRIVE.JS >CON";
》で動きます。

 動きました。
 ところで,"リムーバブル ディスク" の値を直接秀丸の変数に取り込むとしたら,
どういう記述になりますか?

     では, (^^)/~
                                        山紫水明

[ ]
RE:02778 フロッピーのがaかどうか調べるNo.02779
ENCODINGSHIFTJIS さん 01/12/08 15:10
 
>            同じ文字化けがおこります。
IEの表示文字コードを変えてみて、Ctrl+R (再読み込み)を試します。
IEはワールド対応で、各言語モジュールをたくさん入れると
文字コード自動認識の失敗率が上がります。HTAに lang や charset を
指定するのてすかね? 私もわかりません。デフォルト言語・文字コード?

>            現在の環境が Windows98+IE5.5 ですので,こちらの方は,また別の
>機会にやってみます。
「生き物」の世話のように気を使います、Gショックのようにタフならよいのですが

>            ところで,"リムーバブル ディスク" の値を直接秀丸の変数に取り込
>むとしたら,どういう記述になりますか?

クリップボードは使えないので、>CON 経由となります。
最初の質問に回答するとして
有効ドライブの列挙、最初のリムーバブル・ディスクの
ドライブレターを返す、では
===========================================================
// testFDinfo.mac
beginsel;        // 起動時のカーソル位置は行頭に
run "cscript.exe C:\\WINDOWS\\デスクトップ\\FDinfo.JS //NoLogo >CON";
beginsel up 3; cut;
beginclipboardread;
         #i =0;
      $a[#i]=getclipboard;
while($a[#i]!=""){
         #i =#i +1;
      $a[#i]=getclipboard;
 }
menuarray $a,#i;
// プロセス起動なので遅いです、早くするには?
// マクロに常駐ソフトとの「通信」機能を追加(過激だ)
// ローカル内の分散でオブジェクト通信
=================================================  FDinfo.JS
// FDinfo.js
// 90% ヘルプファイル・サンプルのコピーです

   var fso, s, n, e, x;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);// 列挙
   s = "";
   for (; !e.atEnd(); e.moveNext())
   {
      x = e.item();
      if (x.DriveType == 1){
      s = x.DriveLetter + "\n";
      if (x.IsReady)
      s = s + "+\n" + x.VolumeName;
      else
      s = s + "-\n";
      } break; // 最初のリムーバブル
   }
WScript.Echo(s);


[ ]
RE:02779 フロッピー・ドライブを探すNo.02780
山紫水明 さん 01/12/08 17:26
 
 ENCODINGSHIFTJISさん,こんにちは。

》IEの表示文字コードを変えてみて、Ctrl+R (再読み込み)を試します。

 自動選択から日本語に変えたら表示されました。
 読み込み時に,「このページの ActiveX コントロールは,安全でない可能性が
あり,ページの他の部分に影響するかもしれません・・・」という警告が出てき
ますが。

》クリップボードは使えないので、>CON 経由となります。

 やはり,そうですか。最初の Drive.js の結果画面で検索してドライブを探す
ことはできたのですが,もっとスマートにやる方法はないものかと思ったもので
すから。

》有効ドライブの列挙、最初のリムーバブル・ディスクの
》ドライブレターを返す、では

 マクロ実行の結果;
---------------------
A
+

---------------------
となります。2行目3行目は何でしょう。

     では, (^^)/~
                                        山紫水明

[ ]
RE:02780 フロッピー・ドライブを探すNo.02785
encodingshiftjis さん 01/12/09 00:19
 
>読み込み時に,「このページの ActiveX コントロールは,安全でない
>可能性があり,ページの他の部分に影響するかもしれません・・・」
>という警告が出てきますが。

そうなるのが、正しい動作です。セキュリティの検査が働いています。
Web ページ内のスクリプトは、送出サーバーとの通信とWeb ページの表示操作のみ
可能でないとダメです、ローカルな資源(ファイルの操作など)にさわれると
ウィイルスが作れます。時々このチェックをすり抜ける穴(バグ)が見つかり、
人々を恐怖に陥れます。DHTML で各種拡張機能が使えるが難しいとこです。

》クリップボードは使えないので、

これも、少しセキュリティにもかかわっている、ウィイルスがクリップボードを
のぞき見したり、クリップボードを書替えて攻撃の可能性があるから。
クリップボードはスクリプトで完全支配下に置けないものですから、
スクリプト実行中に無関係な手操作で変更されてしまうかも、が、ありますから。

   s = x.DriveLetter + "\n";// 1行目(ドライブ英字)
   s = s + "+\n" + x.VolumeName;// 2行目(+または−)
                                   3行目(ボリュームラベル)
    +が アリで −媒体が入っていない、です \n は改行コード、\r なども使えます。
   s += "\n" + x.TotalSize;// 媒体バイト数
   s += "\n" + x.FreeSpace;// 空きバイト数

も追加できます。コマンドライン実行ですから コマンドライン引数も渡せます。


[ ]
RE:02785 フロッピー・ドライブを探すNo.02787
山紫水明 さん 01/12/09 10:52
 
 encodingshiftjisさん,こんにちは。

》そうなるのが、正しい動作です。セキュリティの検査が働いています。

》これも、少しセキュリティにもかかわっている、ウィイルスがクリップボードを
》のぞき見したり、クリップボードを書替えて攻撃の可能性があるから。

 なるほど,わかりました。セキュリティの問題はこういうところにも現れるの
ですか。

 ともあれ,ドライブ名を取得することは可能なことはわかりました。どうもあ
りがとうございました。
 それにしても,こういうドライブ構成の情報は,レジストリから直接取得する
方法はないものですかね。

 ところでマクロ冒頭の
》  beginsel;        //起動時のカーソル位置は行頭に
の1行,どんな役割でしょう。たしかにこの beginsel がないと具合が悪いよう
で,面白い使い方だなと思います。ただし,画面が閲覧モードや上書き禁止の時
は別の処理が必要のようです。

     では, (^^)/~
                                        山紫水明

[ ]
RE:02787 フロッピー・ドライブを探すNo.02795
encodingshiftjis さん 01/12/09 21:48
 
> それにしても,こういうドライブ構成の情報は,レジストリから直接取得する方
>法はないものですかね。

msdn な人じゃないので、できるかもしれないが
ネットワークドライブは動的だからどうか?
媒体が入っていないと、空きバイト数もわからない、ノートパソコンの
CardのHDDとかUSBドライブ(ドングル形)なども、レジストリに入るか?

> ところでマクロ冒頭の
>》  beginsel;        //起動時のカーソル位置は行頭に
>の1行,どんな役割でしょう。たしかにこの beginsel がないと具合が悪

デバッグしている時、>con の新面がパカパカ開くのを避けるだけです
マクロの編集面でカーソルを[EOF]に飛ばして、即マクロ実行です。

[ ]
RE:02795 フロッピー・ドライブを探すNo.02797
encodingshiftjis さん 01/12/09 22:38
 
>> それにしても,こういうドライブ構成の情報は,レジストリから直接取得する方
>法はないものですかね。

レジストリ 、 ドライブレター の2単語でWeb検索すると出るが
OSとかハードで固定位置ではないようです。
WinMe では
[HKEY_LOCAL_MACHINE\Enum\FLOP\GENERIC_NEC__FLOPPY_DISK_\ACPI&*PNP0700&000]
"CurrentDriveLetterAssignment"="A"

HKEY_LOCAL_MACHINE\Enum\FLOP  と  "CurrentDriveLetterAssignment"
は固定だが 途中の機種名は可変ですから、そことOSの違いを
吸収できれば、行数的にはスクリプトよりマシか?

●ドライブレターの呪縛はいろいろあるらしいですが。
レジストリエディタによる「ドライブ割当文字の変更」
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
ブート ドライブ文字が変更されているとログオンできない
http://www.microsoft.com/japan/support/kb/articles/JP249/3/21.asp
J052589 [NT] Win2000 でドライブ文字の割り当て、予約、格納を行う方法
マクロで楽しよう、とは別世界でした。

[ ]
RE:02797 フロッピー・ドライブを探すNo.02805
山紫水明 さん 01/12/10 22:12
 
 encodingshiftjisさん,こんばんは。

》ネットワークドライブは動的だからどうか?

 これは念頭にありませんでした。

》媒体が入っていないと、空きバイト数もわからない、

 媒体の有無,空きバイト数などは当然アクセスしないと無理だと思います。

》デバッグしている時、>con の新面がパカパカ開くのを避けるだけです
》マクロの編集面でカーソルを[EOF]に飛ばして、即マクロ実行です。

 beginsel にどうしてそういう効用があるのだろう?

》レジストリ 、 ドライブレター の2単語でWeb検索すると出るが
》OSとかハードで固定位置ではないようです。
》WinMe では
》[HKEY_LOCAL_MACHINE\Enum\FLOP\GENERIC_NEC__FLOPPY_DISK_\ACPI&*PNP0700&000]
》"CurrentDriveLetterAssignment"="A"

こちらの Windows98 では,
HKEY_LOCAL_MACHINE\Enum\FLOP\\GENERIC_NEC__FLOPPY_DISK_\BIOS&*PNP0700&1300
同2nd editoin では,
HKEY_LOCAL_MACHINE\Enum\FLOP\\GENERIC_NEC__FLOPPY_DISK_\BIOS&*PNP0700&1500

となっています。

》HKEY_LOCAL_MACHINE\Enum\FLOP  と  "CurrentDriveLetterAssignment"
》は固定だが 途中の機種名は可変ですから、そことOSの違いを
》吸収できれば、行数的にはスクリプトよりマシか?

 吸収する方法がありますか? ちょっと思いつきませんが。
 レジストリの他のところに書いてあるのでしょうか?

     では, (^^)/~
                                        山紫水明

[ ]
RE:02805 フロッピー・ドライブを探すNo.02808
ENCODINGSHIFTJIS さん 01/12/11 09:32
 
> beginsel にどうしてそういう効用があるのだろう?

秀丸エディタヘルプ/リダイレクトの応用/●フィルタを使用する
例えば、範囲選択の内容をsort.exeに渡して、結果を置換する場合、「<con」と「>c
on」を付けます。「<con」は範囲選択の内容をsort.exeに渡すという意味で、「>co
n」は範囲選択の内容とsort.exeの出力結果を置換するという意味にいなります。
例:sort <con >con
beginsel; でサイズ0の選択範囲を 作っているつもりです。

> レジストリの他のところに書いてあるのでしょうか?

リソースキットを枕にして眠る人じゃないと、答えられないのでは
もう、Win開発者MLのような質問になってきた
WIN32API では REGEDIT の検索(文字列)にあたる
LONG RegQueryInfoKey (
 To retrieve(検索) the index of the last subkey,
  use the RegQueryInfoKey function.
とか、サブキーを列挙する
LONG RegEnumKeyEx(
  The RegEnumKeyEx function enumerates(列挙) subkeys of the specified
  open registry key.
関数があるから、DLL を作るとできますが。

でも、こうゆう要求を全部実現するには、WIN32API を秀丸マクロから
呼び出せるラッパー(仲介者、デレゲート、アダプター・・)になる
巨大なDLLを作らないといけなくなる。
それなら、Cとか簡易C言語を組み込める、別のエディタに乗り換えた
ほうがスッキリするかも。これらなら入力キーも横取りでき、常時監視
もできる (Winソフト開発の技能が必要です)
OLEを呼び出せるようにする方向でも、引数・戻り値・定数の変換は面倒です
秀丸の分かりやすさと、人々の要求の範囲のバランスの問題になる。

.NET の コモンランゲージランタイム を使うようになる頃は
どうかわかりませんが。

[ ]
RE:02808 フロッピー・ドライブを探すNo.02824
山紫水明 さん 01/12/11 22:50
 
 ENCODINGSHIFTJISさん,こんばんは。

》リソースキットを枕にして眠る人じゃないと、答えられないのでは
》もう、Win開発者MLのような質問になってきた

 どうもすみません。無知なるが故の厚かましさでした。

》でも、こうゆう要求を全部実現するには、WIN32API を秀丸マクロから
》呼び出せるラッパー(仲介者、デレゲート、アダプター・・)になる
》巨大なDLLを作らないといけなくなる。

 どうも私のついていける領域ではないようです。
 しつこい質問に丁寧にコメントいただきありがとうございました。

     では, (^^)/~
                                        山紫水明

[ ]