3件の投稿を表示中 - 1 - 3件目 (全3件中)
  • 投稿者
    投稿
  • #22245

    qtv
    Participant

    検索の「単語のみ検索する」をトグルすることが多いため、以前、VBscriptで以下のように書いていました。
    現在の検索情報取得

    
    Set objWshShell = CreateObject("WScript.Shell")
    val = objWshShell.RegRead("HKEY_CURRENT_USER\Software\EmSoft\EmEditor v3\Common\FindFlag")
    val = val Xor eeFindReplaceOnlyWord
    objWshShell.RegWrite "HKEY_CURRENT_USER\Software\EmSoft\EmEditor v3\Common\FindFlag", val, "REG_DWORD"
    

    最近まで動いていたのですが、「型が一致しません」のエラーがRegRead()のところで出るようになっていました。
    よくわからなくなったので、JavaScriptで以下のように書いたのですが、レジストリエディタで見ていても値が反映されません。
    検索ダイアログにも反映されませんが、プロンプトではvalがトグルしているのが確認できました。
    (検索ダイアログを変更すると、レジストリには反映されています)

    
    val = editor.GetProfileInt(eeRegCommon, "", "FindFlag", eeFindReplaceOnlyWord);
    confirm(val);
    val = val ^ eeFindReplaceOnlyWord;
    editor.WriteProfileInt(eeRegCommon, "", "FindFlag", val);
    

    VBScriptが動かなくなった理由もわかっていませんが、上記で反映されないのもよくわからないため、申し訳ありませんが何か気付かれたことがありましたらお願いします。

    #22248

    Yutaka Emura
    Keymaster

    qtv 様

    いつもお世話になっております。江村です。

    これは、FindFlag の値が、REG_DWORD (32-bit 整数) から REG_QWORD (64-bit 整数) に変わったためです。
    RegRead は 64-bit の整数をサポートしていないと思われるため、この方法では、うまくいきません。

    代わりに次のマクロを書きましたので、よろしければお使いください。

    
    EEID_SHOW_FIND_BAR = 4559;
    EEID_FINDBAR_ONLY_WORD = 4576;
    // 検索バーが非表示なら、表示する
    bFindBar =editor.QueryStatusByID( EEID_SHOW_FIND_BAR ) & eeStatusLatched;
    if( !bFindBar ) {
    	editor.ExecuteCommandByID( EEID_SHOW_FIND_BAR );
    }
    // 「単語のみ検索」をトグルする
    editor.ExecuteCommandByID( EEID_FINDBAR_ONLY_WORD );
    // 検索バーが非表示だったら、非表示に戻す
    if( !bFindBar ) {
    	editor.ExecuteCommandByID( EEID_SHOW_FIND_BAR );
    }
    

    よろしくお願い申し上げます。

    #22251

    qtv
    Participant

    ありがとうございます。
    型が変わったのですね。
    レジストリなので、ここは仕方ないですね。。
    こういう書き方も、同じような動作ができました。

    
    dim arrSubKeys, arrValueTypes
    Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\default:StdRegProv")  
    objReg.GetQWORDValue &H80000001, "Software\EmSoft\EmEditor v3\Common", "FindFlag", val
    val = val Xor eeFindReplaceOnlyWord
    objReg.SetQWORDValue &H80000001, "Software\EmSoft\EmEditor v3\Common", "FindFlag", val
    
3件の投稿を表示中 - 1 - 3件目 (全3件中)

このトピックに返信するにはログインが必要です。

友達に知らせる... Tweet about this on TwitterShare on FacebookShare on Google+Email this to someone