◀ANSI版開発トップへ
  • 3921 VBScriptでMsgBoxとInputBoxを利用可能に
    • 3923 RE: VBScriptでMsgBoxとInputBoxを利用可能に
      • 3926 Re2: VBScriptでMsgBoxとInputBoxを利用可能に
  • [3921] VBScriptでMsgBoxとInputBoxを利用可能に FILE 2005年04月18日 23:08

     こんばんは。

     Ver. 1.5.2.1(2005-02-04)の CWSH.cpp をベースに変更し、
    Win95(+IE5.5), WinMe(+IE5.5), WinXP(+IE6)でMsgBoxとInputBox
    のダイアログが表示される事を確認しました。
     (>>dev:3482 の中身が気になりますが…)

    diff --dos -u1 CWSH_bef.cpp CWSH_aft.cpp > CWSH.diff

    --- CWSH_bef.cpp Mon Jan 31 01:27:52 2005
    +++ CWSH_aft.cpp Mon Apr 18 18:00:00 2005
    @@ -181,5 +181,6 @@

    -//IActiveScriptSite
    +// Apr. 18, 2005 FILE IActiveScriptSiteWindow実装
    +//IActiveScriptSite, IActiveScriptSiteWindow

    -class CWSHSite: public ImplementsIUnknown<IActiveScriptSite>
    +class CWSHSite: public IActiveScriptSite, public IActiveScriptSiteWindow
    {
    @@ -188,4 +189,5 @@
    ITypeInfo *m_TypeInfo;
    + ULONG m_RefCount;
    public:
    - CWSHSite(CWSHClient *AClient): ImplementsIUnknown<IActiveScriptSite>(), m_Client(AClient)
    + CWSHSite(CWSHClient *AClient): m_RefCount(0), m_Client(AClient)
    {
    @@ -193,2 +195,30 @@

    + virtual ULONG _stdcall AddRef() {
    + return ++m_RefCount;
    + }
    +
    + virtual ULONG _stdcall Release() {
    + if(--m_RefCount == 0)
    + {
    + delete this;
    + return 0;
    + }
    + return m_RefCount;
    + }
    +
    + virtual HRESULT STDMETHODCALLTYPE QueryInterface(
    + /* [in] */ REFIID iid,
    + /* [out] */ void ** ppvObject)
    + {
    + *ppvObject = NULL;
    +
    + if(iid == IID_IActiveScriptSiteWindow){
    + *ppvObject = static_cast<IActiveScriptSiteWindow*>(this);
    + ++m_RefCount;
    + return S_OK;
    + }
    +
    + return E_NOTIMPL;
    + }
    +
    virtual HRESULT STDMETHODCALLTYPE GetLCID(
    @@ -295,2 +325,16 @@
    return S_OK;
    + };
    +
    + // Apr. 18, 2005 FILE IActiveScriptSiteWindow実装
    + virtual HRESULT __stdcall GetWindow(
    + /* [out] */ HWND *phwnd)
    + {
    + *phwnd = ((CEditView*) m_Client->m_Data)->m_pcEditDoc->m_hWnd;
    + return S_OK;
    + }
    +
    + virtual HRESULT __stdcall EnableModeless(
    + /* [in] */ BOOL fEnable)
    + {
    + return S_OK;
    };


     今回の変更で、特に以下の点が気になっています。

    ・GetWindow()でのウィンドウハンドルの取得方法
     (モーダルにこだわらなければ、NULLや::GetDesktopWindow()でも良い様ですが)
    ・Visual C++ 6.0以外でもコンパイルや実行が可能かどうか
     (特にIActiveScriptSiteWindow)
    ・ImplementsIUnknownを使わない事(>>dev:3347)による、想定外の動作が無いかどうか

     上記の点、ご検証いただけますでしょうか。

    以上、よろしくお願いいたします。
    • [3923] RE: VBScriptでMsgBoxとInputBoxを利用可能に みく 2005年04月19日 18:37


      > (>>dev:3482 の中身が気になりますが…)

      私も、
      class CWshSite : public IActiveScriptSite,
      public IActiveScriptSiteWindow
      ってやってますね。

      作りかけで止まってますが、ソースをアップしておきます。
      ほぼ書き直しているのですが、主な目的はWSHをマクロから
      分離し、マクロやアウトライン解析からWSHを利用できる
      ようにしようと(妄想)しました。
      アウトラインの解析は妄想済みなのですが、ダイアログへの
      表示の共通化の部分で思考停止中です。
      どなたか引き継いでいただけると幸いです。

      eGroups:Source/wsh20040320.lzh
      • [3926] Re2: VBScriptでMsgBoxとInputBoxを利用可能に FILE 2005年04月20日 23:27

         ソース、ありがとうございます。

         ざっと拝見いたしましたが、私がサクラエディタに
        "Win9x系で動かしつつ、exeのサイズを増やさないように"
        実装する事は、かなり困難そうです…(力不足)。

         ところで、(試していないのですが、)ChallengeInt()の
        代わりにVariantChangeType()という関数は使えないので
        しょうか?(型変換してくれる様です)