◀ANSI版開発トップへ
  • 2283 WSHサポートしたものの問題が...
    • 2284 Re:WSHサポートしたものの問題が...
      • 2285 Re2:WSHサポートしたものの問題が...
      • 2286 Re2:WSHサポートしたものの問題が...
    • 2288 Re:WSHサポートしたものの問題が...
    • 2289 Re:WSHサポートしたものの問題が...
    • 2292 Re:WSHサポートしたものの問題が...
      • 2293 Re2:WSHサポートしたものの問題が...
      • 2298 Re2:WSHサポートしたものの問題が...
    • 2296 Re:WSHサポートしたものの問題が...
      • 2297 Re2:WSHサポートしたものの問題が...
    • 3347 RE: WSHサポートしたものの問題が...
      • 3354 Re2: WSHサポートしたものの問題が...
      • 3356 Re2: WSHサポートしたものの問題が...
  • [2283] WSHサポートしたものの問題が... げんた 2002年08月26日 02:09

    2ヶ月以上遅れてしまいましたが,WSHマクロのサポートを組み込みました.

    5月に案を出した割には結局それは全然できていませんで,拡張子-Engineの対応表の他にEngineのみのリストを追加して,拡張子を全部登録するのと逐次問い合わせるのを選択できるようにしました.

    まず対応表を調べた後,見つからなければEngineを1つずつ当たっていきます.NULLじゃない値が返されたら対応するエンジンが見つかったとしてそれを対応表に記録して次回以降は表引きできるようにしました.

    --
    で,問題のWSHですが,制御文やEditor.method()というのは動くのですがVBScript標準のメソッドがうまく動きません.

    MsgBoxとかInputBoxとかを試そうとしたのですが,書き込みできませんというメッセージが出てしまいます.この辺わかる方いらっしゃいますか?

    ソースとバイナリを置いておきます.
    http://sakura-editor.sourceforge.net/snapshot/ssrc_2002-08-26_wsh1.tar.bz2
    http://sakura-editor.sourceforge.net/snapshot/sakura_2002-08-26_wsh1.zip
    • [2284] Re:WSHサポートしたものの問題が... おに 2002年08月28日 08:10

      お久しぶりです。

      Editor.Insert("123")だけのマクロを作って試してみようとしたのですが、0x00000074のメモリを参照しようとして、エディタごと落ちました。
      空のファイルで試しても同様でした。

      Win2000 SP2です。おっかしいなあ…
      (調査をしようにも、自分が書いたコードなのに忘れかけてます;_;)
      • [2285] Re2:WSHサポートしたものの問題が... げんた 2002年08月28日 10:11

        >0x00000074のメモリを参照しようとして、エディタごと落ちました。
        ありゃ.ほんと.

        でもDebugモードでコンパイルしたらそれなりに動くんですよね.
        ポインタ周りのバグかな.また見てみます.
      • [2286] Re2:WSHサポートしたものの問題が... げんた 2002年08月29日 01:10

        >0x00000074のメモリを参照しようとして、エディタごと落ちました。
        すいません.配列の番人の値を0から-1に変えたのを忘れていました.

        CWSH.cppの626行目 CWSHMacroManager::ReadyCommandsの
        while(Info->m_nFuncID != 0 )
        を
        while(Info->m_nFuncID != -1)
        にする必要がありました.

        修正した物をUPしました.
        http://sakura-editor.sourceforge.net/snapshot/ssrc_2002-08-29_wsh2.tar.bz2
        http://sakura-editor.sourceforge.net/snapshot/sakura_2002-08-29_wsh2.zip
    • [2288] Re:WSHサポートしたものの問題が... Youma 2002年08月30日 10:33

      ▼ げんたさん
      > 2ヶ月以上遅れてしまいましたが,WSHマクロのサポートを組み込みました.

      うーん、自分の得意?分野でのマクロ作成が可能に
      なりそうなので、ひっじょーに、期待してます(嬉)

      WSHで対応すると、予想以上に色々な事が出来るように
      …なるよーな、ならないよーな(知識不足)

      リリースされるのを、キリン状態でお待ちしております。
      頑張ってください。
    • [2289] Re:WSHサポートしたものの問題が... おに 2002年08月30日 19:07

      > MsgBoxとかInputBoxとかを試そうとしたのですが,書き込みできませんというメッセージが出てしまいます.この辺わかる方いらっしゃいますか?

      単なる思いつきですが、ダイアログを出すにはウィンドウハンドルが必要になるので、IActiveScriptSiteWindowの実装が必要かも。
      (外しているかも)
      暇を見て実験してみます。
    • [2292] Re:WSHサポートしたものの問題が... dfft 2002年09月03日 15:38

      ▼ げんたさん
      > 5月に案を出した割には結局それは全然できていませんで,拡張子-Engineの対応表の他にEngineのみのリストを追加して,拡張子を全部登録するのと逐次問い合わせるのを選択できるようにしました.

      はじめまして。こちらのソースをDLいたしまして、[2286]の修正を行った後、以下のスクリプトを試してみました。
      (1)VBScript
      Set FSO = CreateObject("Scripting.FileSystemObject")
      Set strm = FSO.CreateTextFile("a.txt")
      (2)JScript
      var FSO = WScript.CreateObject("Scripting.FileSystemObject")
      var strm = FSO.CreateTextFile("a.txt")
      (1)は正常終了し、空のファイルa.txtが作成されました。
      (2)については、「'WScript'は宣言されていません。」
      とエラーメッセージが出力され、ファイルa.txtは作成されませんでした。
      OSバージョンはWindows2000SP1、
      WSHは5.6です。


      また、カーソルのある現在行を取得し、Result->bstrValにBSTRオブジェクトとして代入する
      マクロ、F_GET_CURRENT_LINEを試作しましたが、F_GETFILENAMEと同様に、
      CWSH::MacroCommand()内で実装するという方式にせざるを得ませんで
      した(CEditView::Command_GETCURRENTLINEを追加するべきかとも考えたのです
      が)。より良い方法について御示唆いただければ幸いです。
      • [2293] Re2:WSHサポートしたものの問題が... おに 2002年09月04日 21:40

        ▼ dfftさん
        > (2)JScript
        > var FSO = WScript.CreateObject("Scripting.FileSystemObject")

        "WScript"は、cscript.exe/wscript.exeが渡して来るオブジェクトなので、ここでは使えません。
        JScriptからはActiveXObjectで試していただけませんか?

        …まだ何も試せていません。\(_ _
      • [2298] Re2:WSHサポートしたものの問題が... げんた 2002年09月09日 15:38

        >CWSH::MacroCommand()内で実装するという方式にせざるを得ませんでした
        現時点では他にやりようが無いように思います.

        >(CEditView::Command_GETCURRENTLINEを追加するべきかとも考えたのですが)。
        CEditView::HandleCommandは値を返すことを前提にしていないので無理だと思います.

        > より良い方法について御示唆いただければ幸いです。
        WSHではオブジェクトを扱えるので,オブジェクト+メソッドという形にできればいいんじゃないかと思いますが.
    • [2296] Re:WSHサポートしたものの問題が... dfft 2002年09月06日 19:02

      ▼ げんたさん
      記録したキーマクロをもとに、WSHマクロを動かしてみたの
      ですが、引数が逆順に解釈されるようですね。
      エディタヴァージョン:sakura_2002-08-29
      OS :Winsows2000 SP1
      Compiler :VisualStudio Ver6.0

      エディタの内容が
      123456
      であるとき、JScriptマクロにて
      Editor.ReplaceAll('1','a',0);
      では1をaに変換せず、
      Editor.ReplaceAll(0,'a','1');
      と記述すると、うまく行きました。

      • [2297] Re2:WSHサポートしたものの問題が... おに 2002年09月08日 02:41

        単純に逆にしてみました。

        CWSH.cpp 424行
        > Info->Arguments[I].tdesc.vt = ArgumentTypes[I];
        Info->Arguments[I].tdesc.vt = ArgumentTypes[ArgumentCount - I - 1];

        CWSH.cpp 543行
        > StrArgs[I] = S;
        StrArgs[ArgCount - I - 1] = S;

        何ででしょうね?

        追伸。makefileにCWSH.objを書き足す必要があります。
    • [3347] RE: WSHサポートしたものの問題が... みく 2004年01月07日 22:04


      >MsgBoxとかInputBoxとかを試そうとしたのですが,書き込みできませんというメッセージが出てしまいます.この辺わかる方いらっしゃいますか?

      class CWSHSite public ImplementsIUnknown<IActiveScriptSite>,
      public ImplementsIUnknown<IActiveScriptSiteWindow> {

      として、

      public:
      HRESULT STDMETHODCALLTYPE GetWindow(
      /* [out] */ HWND *phwnd) {
      if( phwnd ){
      *phwnd = NULL; //とりあえずNULLで...
      return S_OK;
      }
      return E_POINTER;
      }

      HRESULT STDMETHODCALLTYPE EnableModeless(
      /* [in] */ BOOL fEnable) {
      return S_OK;
      }

      を追加する。そして、
      CWSHSite の QueryInterface()で、

      else if(IsEqualIID(iid, IID_IActiveScriptSiteWindow))
      {
      AddRef();
      *ppvObject = static_cast<IActiveScriptSiteWindow*>(this); //ここ大事
      return S_OK;
      }

      とすれば、MsgBox とかが使えるようになるはずです。

      あと、CMacroManagerBase* CWSHMacroManager::Creator
      のMultiByteToWideCharの引数6番目おかしくないですか。
      • [3354] Re2: WSHサポートしたものの問題が... おに 2004年01月11日 16:32

        ImplementsIUnknownが参照カウントを管理してますので、多重継承するとまずい気が…。
      • [3356] Re2: WSHサポートしたものの問題が... もか 2004年01月11日 17:48

        >あと、CMacroManagerBase* CWSHMacroManager::Creator
        >のMultiByteToWideCharの引数6番目おかしくないですか。

        ▼CWSH.cpp 1.7 2003/11/15
        >MultiByteToWideChar(
        > CP_ACP, 0, EngineName, -1, EngineNameW,
        > sizeof(EngineNameW) / sizeof(wchar_t)
        >);
        で、6番目は
        ▼MSDN 2001年7月(jp/en)
        >cchWideChar
        >バッファのサイズをワイド文字数の単位で指定します。
        >[in] Specifies the size, in wide characters, of the buffer ...
        なので、配列数で指定します。また、
        >cbMultiByte
        >(日本語版には下記の記述なし)
        >If this parameter is -1, the function processes the entire input string including the null terminator.
        >The resulting wide character string therefore has a null terminator, and the returned length includes the null terminator.
        とのことで、末尾のNULも変換の対象範囲に含まれると読めます。
        以上により、正しいような気がします。