SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

IEのコンテキストメニュー用インストーラーとソフトの作成

IEで選択した部分のソースコードを右クリックメニューで編集する(前編)

IEのコンテキストメニュー用インストーラーとソフトの作成


「レジストリの編集」Subプロシージャ

 いよいよ、「コンテキストメニュー・インストーラ」の主要部分です。確認ダイアログを出して、[OK]ボタンが押されれば、インストール(アンインストール)を実行します。

インストールを選択時
インストールを選択時
「レジストリの編集」Subプロシージャ
'//==================================================================
    '//========================================
    '//
    '//    レジストリの編集
    '//
    '//========================================
    '//    引数 :なし
    '//    返り値:なし
    '//    仕様 :レジストリを変更する。

Sub EditReg
    '//==== 変数の初期化 ============================================
    '//
    Dim WSHShell, fSys, addReg, myPath, myFolder, addPath, strMsg

    ' WScript.Shellの初期化
    Set WSHShell = CreateObject( "WScript.Shell" )

    ' FileSystemObjectの初期化
    Set fSys = WScript.CreateObject( "Scripting.FileSystemObject" )

    ' レジストリのパスを設定
    addReg = baseReg & strTitle & "\"

    '//==== HTMLファイルのパスを作成 ================================
    '//
    myPath = WScript.ScriptFullName
    myFolder = fSys.GetParentFolderName( myPath ) & "\"
    addPath = myFolder & addFile

    '//==== 表示メッセージを作成 ====================================
    '//
    strMsg = vbCrLf & "「" & strTitle & "」を「レジストリ」"
    If strInstallMode = "インストール" Then
        strMsg = strMsg & "に「インストール」"
    Else
        strMsg = strMsg & "から「アンインストール」"
    End If
        strMsg = strMsg & "してよろしいですか?" & vbCrLf

    '//==== 確認メッセージボックス ==================================
    '//
    If MsgBox( strMsg, 1 ) = 1 Then
        '//==== [OK]の場合([キャンセル]の場合は何もしない) ====
        '//
        If strInstallMode = "インストール" Then
            '//==== インストールの場合(各項目をレジストリに追加) ==
            '//
            WSHShell.RegWrite addReg, addPath
            WSHShell.RegWrite addReg & _
                                 "contexts", intContexts, "REG_DWORD"
            WSHShell.RegWrite addReg & "flags", intFlags, "REG_DWORD"
        Else
            '//==== アンインストールの場合 ==========================
            '//
            On Error Resume Next    ' 未インストール時のエラー回避
            WSHShell.RegDelete addReg
        End If

        '//==== 終了メッセージ ======================================
        '//
        strMsg = strInstallMode & "しました" & vbCrLf & vbCrLf
        strMsg = strMsg & _
                "IEを起動している際は、IEを起動しなおしてください"
        MsgBox strMsg
    End If
End Sub

 ここは少し丁寧に解説します。

変数の初期化

 まず最初は、WSHShellに関してです。CreateObject( "WScript.Shell" )として初期化されているWSHShellは、レジストリの操作のために必要なオブジェクトになります。なぜならば、レジストリの編集は、WScript.Shellというオブジェクトのメソッドを通して行われるからです。

 次はfSysに関してです。CreateObject( "WScript.Shell" )として初期化されるfSysオブジェクトは、ファイル操作のために必要なオブジェクトになります。以降、このオブジェクトを利用して、「source_view.html」のフルパスを作成することになります。

 addRegは、レジストリに登録する際の「レジストリのキーのパス」になります。「基準パス baseReg」に「メニューへの表示名 strTitle」を結合することでパスを作成しています。また、末尾に\が追加されていることに注目しておいてください。この末尾の\に関しては、実際にレジストリを編集する段階で詳しく説明します。

HTMLファイルのパスを作成

 ここでは、addPathという、レジストリに書き加えるための「source_view.html」のフルパスを作成しています。WScript.ScriptFullNameは「installer.vbs」のフルパスになります。このフルパスから、親フォルダのパスをfSys.GetParentFolderName( myPath )として取り出し、「source_view.html」というHTMLファイル名を結合することで、「source_view.html」のフルパスが完成します。「installer.vbs」と「source_view.html」を同じフォルダに置いているのは、こうやって「source_view.html」のフルパスを作成するためです。

 次の「表示メッセージを作成」「確認メッセージボックス」の部分について説明します。

 ここでは、本当にインストール(アンインストール)を行ってよいのかどうか、ユーザーに確認を行います。[OK]ボタンが押された場合は、実際のレジストリの編集が行われます。[キャンセル]が選ばれた場合は、そのまま終了します。

インストール時のレジストリの編集

 いよいよ山場です。RegWriteというのが、レジストリへの書き込みを行うメソッドです。WSHShell.RegWrite addReg, addPathとすることで、addRegのパスの(標準)に、addPathを書き込みます。このとき注意して欲しいのは、レジストリのパスaddRegは、末尾に\が付いていることです。つまり、Explorerで言うところの「フォルダ」のようなものとして、レジストリに新たなキーを作成していることになります。

 次の2行は、書き込み先がaddReg & "contexts"addReg & "flags"となっています。この2つの書き込み先は、末尾に\が付いていません。この2行では、先ほど作成したaddRegのパスの下に、値を登録することになります。Explorerで言うところの「ファイル」のようなものとして、レジストリに新たな値を作成することになります(ちなみに、この値に入れるデータは、「ファイルの中身」のようなものになります)。

 レジストリのcontextsには、「メニューへの表示条件 intContexts」が、flagsには、「ウィンドウの表示フラグ intFlags」が、それぞれ"REG_DWORD"(DWORD値)として登録されます。

アンインストール時のレジストリ編集

 On Error Resume Nextという行について説明しておく必要があるでしょう。この命令は、エラーが発生しても処理を継続するというものです。アンインストールではレジストリを削除します。しかし、まだソフトがインストールされていない場合は、削除するパスが存在しないという事態が発生します。そしてその場合、エラーが発生します。このとき、このエラーを無視してそのまま処理を継続させるために、この行は用意されています。

 レジストリを削除するのはRegDeleteメソッドです。WSHShell.RegDelete addRegで、addRegのレジストリのパスを削除しています。addRegを削除すれば、その下に作成されたcontextsflagsの値もまとめて削除されます。

 最後に「終了メッセージ」を表示して、レジストリの編集は終わりです。レジストリを書き換えた場合は、起動しているIEをいったん終了して、再度IEを起動しなおす必要があります。そのために、そのことを促すメッセージを表示させています。

 このメッセージは、ダイアログとして次のように表示されます。

インストール完了時
インストール完了時

 以上で、「コンテキストメニュー・インストーラ」のコーディングは終了です。

次のページ
まとめ(完成プログラム)

この記事は参考になりましたか?

IEのコンテキストメニュー用インストーラーとソフトの作成連載記事一覧
この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/874 2008/08/21 21:12

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー