[ 新規に投稿する ]

スクリプトに関して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\\Version") );
[ ]
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ですが、以前にご紹介させていただいたスクリプトでは、以下のような感じでSelectFileをする前に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を使えばうまくいきました。
 ありがとうございました。
[ ]

[ 新規に投稿する ]