スクリプトに関して2点ほど御質問No.07032
さん 18/01/23 13:01
 
 こんにちは、お世話になります。

 スクリプトに関してなのですが、下記の2点に関して教えていただけないでしょうか。

 1.特定のファイルにフォーカスを移動させる方法はありますか。
 2.INIファイルの読み書きを行いたいと思っているのですが、何か良い方法はあり
ますでしょうか。

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

[ ]
RE:07032 スクリプトに関して2点ほど御質No.07033
秀丸担当 さん 18/01/23 14:16
 

特定のファイルを選択するには、SelectItemというメソッドを使うとできます。
例えばjsで、
SelectItem("Test.txt",2);
とすると、ファイル一覧の現在のフォルダにあるText.txtを選択します。


iniファイルの読み書きを目的としたメソッド等は無いです。
やるとしたら、WSHとしてのvbsやjsと同じようなことになると思います。
何らかの外部のオブジェクトを用意するか、標準のままの場合はテキストファイルと
して直接読み込んでごりごりと書くしかないと思います。

iniファイルでなくてもよければ、WSHとしては一般的にはファイルであればxmlの読
み書き、ファイルでなければレジストリの読み書きにすると比較的簡単だと思います。
「MSXML2.DOMDocument」とか「WScript.Shell RegRead」とかで検索すると情報が得
られると思います。

//xmlの例
objXml = new ActiveXObject("MSXML2.DOMDocument");
Message( objXml.load("c:\\Folder\\Test.xml") );
Message( objXml.getElementsByTagName("root").item(0).text );

//レジストリの例
objShell = new ActiveXObject("WScript.Shell");
Message( objShell.RegRead("HKCU\\Software\\Hidemaruo\\HmFilerClassic\\Versio
n") );

[ ]
RE:07033 スクリプトに関して2点ほど御質No.07034
さん 18/01/24 15:14
 
 こんにちは、お世話になります。
 返信が遅くなり、申し訳ありません。

 まず、SelectItemを試してみました。
 ですが、下記のようにスクリプト側で新規ファイルを作成して、SelectItemでその
ファイルを選択させようとしても、なぜかうまくいかないようです。
 以下、街頭のソースです。

----------
directory = getDirectory();
if(directory == ""){
 Message("現在のフォルダにファイルを作成することはできません。");
 EndMacro();
}else{
 filename = "test.txt";
 WriteFile(directory + "\\" + filename, "テスト用のファイルです。");
 SelectItem(0);
 SelectItem(filename, 0x02);
 EndMacro();
}

function WriteFile(filename, data){
 try{
  var fs = new ActiveXObject( "Scripting.FileSystemObject" );
  var file = fs.OpenTextFile(filename, 2, true, -1);
  file.Write(data);
  file.Close();
  fs = null;
 }catch(e){
  Message("ファイルの作成に失敗しました。");
  EndMacro();
 }
}
----------

 上記のような感じなのですが、何か対処法はありますでしょうか。

 また、INIファイルの件、了解しました。
 XMLかレジストリで検討してみたいと思います。

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

[ ]
RE:07034 スクリプトに関して2点ほど御質No.07035
秀丸担当 さん 18/01/24 15:58
 

ファイルを作成してもファイル一覧に現れるのは非同期的で、監視が反映されたとき
になります。
vbsですが、以前にご紹介させていただいたスクリプトでは、以下のような感じでSel
ectFileをする前にRefreshメソッドを呼んでいました。

set objFso=CreateObject("Scripting.FileSystemObject")
strName=InputBox("新しいフォルダ名を入力してください", _
    "","新しいフォルダー")
If strName <> "" Then
    objFso.CreateFolder GetDirectory() + "\" + strName
    Refresh
    SelectItem strName, 2
    Command "ファイル一覧にフォーカス"
End If

jsの場合はRefresh();ですが、これだとフォルダツリーも更新されてしまって遅いの
で、以下のようにしたほうがいいかもしれません。

 Command("ファイル一覧にフォーカス");
 Refresh(1);
 SelectItem(0);
 SelectItem(filename, 0x02);

[ ]
RE:07035 スクリプトに関して2点ほど御質No.07036
さん 18/01/25 15:00
 
 こんにちは、お世話になります。

 とりあえず、refreshを使えばうまくいきました。
 ありがとうございました。

[ ]