misc.log

日常茶飯事とお仕事と

Windows10に32bit OCXファイルを登録する

まさか2022年にこんな作業をするとは……。

仕事でちょっとした自動化処理を行う必要があり、取引先から提示された自動処理ツールが「HiMacroEx」というものでした。

www.vector.co.jp

制作者のサイトもあるのですが、更新されているのかされていないのかよく分かりませんでした。

fefnirm.web.fc2.com

このツール、記録開始すると、その後のマウス操作を位置、ボタン押下やキーボード入力、それぞれの間隔まで記録し、回数指定して実行したりできるという、結構シンプルながらも便利なものです。ただ、1点利用に際して壁が……。実行に、ComCtl32.ocx が必要なんですね。

まぁ……今時これか……という気もしますが、取引先からこのツールが使い勝手もよかった、と提供されているので。まずは使ってみましょう。

ComCtl32.ocxとは

ComCtl32.ocxとは、Visual Basic 6.0で作られたアプリケーションを動かす際にWindowsが必要とするソフトウェア部品の1つで、正式名称は「Common Controls(コモンコントロール)」。たとえばボタンやテキストボックスといった、Windowsアプリケーションでよく使われる部品だけをまとめて共通的に利用できるようにした部品です。作られたアプリケーションがこれを利用している場合、アプリケーションを使う環境にも、アプリ本体だけではなく、これらの部品も併せて必要になります(Windowsが標準で備えているわけではないのです)。

昔は、Visual Basic 6.0などで使うこうした共通部品だけを「Visual Basic Runtim Library(通称:VBランタイム)」としてまとめたものが用意されており、作られたアプリと一緒にこのランタイムライブラリー集をインストールすることでいろんな部品が利用可能になりました。

ただ、Visual Basic 6.0自体はすでに古い開発ツール/言語となってしまい、今主流のソフトウェア開発でこうしたソフトウェア部品が配布されたり利用される機会はほとんどありません。

HiMacroExとComCtl32.ocx

HiMacroExも、この部品を利用して作られているため、HiMacroExを動かすには、そのパソコンのWindowsが認識出来る場所にComCtl32.ocxファイルが置かれ、Windows自体に「ここですよ」と登録してやる必要があります。

幸い、HiMacroExの作者さんはComCtl32.ocxも一緒に配布してくれているため、利用の前にはこの拡張子が.ocxのファイルを「Windowsに登録する」だけでHiMacroExを動かすことができます。

どうやって登録するのか

ざっくり言うと下記の手順でWindowsにComCtl32.ocxを登録します。

  1. ComCtl32.ocxファイルを、Windowsのシステムフォルダーに置く。
  2. 管理者権限でコマンドプロンプトを起動する。
  3. 管理者権限のコマンドプロンプトで、コマンド「regsvr32 ComCtl32.ocx」を実行する。

です。regsvr32は、Windowsが使うソフトウェア部品である「DLL」や「ActiveXコントロール」と呼ばれるものの名前、場所をWindowsに登録し、Windowsが設定情報を保管する「レジストリー」と呼ばれる情報に記録する作業をやってくれるコマンドです。

Web版でないゲームや仕事用のソフトウェアには大抵「インストーラー」と呼ばれるツールがついていて、アプリケーションをWindowsで動かせるようにする作業をやってくれます。このインストーラーは、実際のゲームプログラムやデータファイルをWindowsのフォルダーにコピーするだけではなく、インストールするソフトウェアが利用する部品の情報をregsvr32のような機能を使ってWindows自体に登録する作業も行っています。
HiMacroExというツールはインストーラー無しで、Zipファイルから展開しただけで動かせるタイプのプログラムです。ですので、今回はこの「必要なファイルをWindowsに登録する作業」を手作業でやろうというわけです。

上記のざっくり手順からもう少し踏み込んだ手順を以下で説明します。

64bit WindowsにComCtl32.ocxを登録する

おそらく、現時点でWindows10を利用している人の大半は64bit版を使っているのではないかと思います。64bit版の場合、上記の手順にある「システムフォルダー」「コマンド」が以下のようになります。

  • ComCtl32.ocxを置くシステムフォルダー …… C:\Windows\SysWOW64 フォルダー*1
  • 実行するコマンド …… C:\Windows\SysWOW64\regsvr32.exe

ですので、手順は下記のようになります

  1. ComCtl32.ocxファイルを、C:\Windows\SysWOW64 に置く。
  2. 管理者権限でコマンドプロンプトを起動する。
  3. 管理者権限のコマンドプロンプトで、コマンド「C:\Windows\SysWOW64\regsvr32.exe C:\Windows\SysWOW64\ComCtl32.ocx」を実行する。

1990年代終盤~2000年代を駆け抜けたWindowsソフトウェアエンジニアの方々が、なまじ知識があるだけに引っかかるのがこのポイントです。昔、32bitが主流だった時代は、システムフォルダーは「Windows\System32」でした。しかし、この64bit時代では「System32」は64bit版のライブラリー置き場になってしまっています(名前変えろよ……と思いますが)。

また、regsvr32.exeも32bit版と64bit版があり、32bitのOCXファイルを登録できる32bit版 regsvr32.exe は SysWOW64フォルダーにあります。ですので、呼び出すコマンドやファイルを間違えないように登録コマンドを実行してください(間違えるとエラーになって登録失敗しますので、おかしいと思ったらフォルダーや32bit/64bitの組合せを疑って下さい)。

登録に成功すると下図のようなメッセージが表示されます。

64bit Windows10に32bit ComCtl32.OCXを登録する
32bit WindowsにComCtl32.ocxを登録する

もうあまりいらっしゃらないと思いますが、32bit版の場合はシステムフォルダーやregsvr32.exeが恐らく以下のようになります。申し訳ないのですが、手元に32bit Windows10が無いため、実際のフォルダーや動作を確認することが出来ません。細かい所で誤っていたらごめんなさい。

  • ComCtl32.ocxを置くシステムフォルダー …… C:\Windows\System32 フォルダー
  • 実行するコマンド …… C:\Windows\System32\regsvr32.exe
regsvr32 でエラーが出る場合

regsvr32.exe を実行してComCtl32.ocxを登録仕様としてもエラーが出る場合、下記の3パターンが考えられます。

  • ComCtl32.ocxを置くフォルダーを間違えている …… ファイルが見つからない、といったエラーが出る場合はこれです。
  • 呼び出すregsvr32.exe がSysWOW64フォルダーのものでない …… 64bit版のregsvr32.exeでは32bitのOCXファイルを登録することはできません。確実にSysWOW64フォルダーのregsvr32.exe を呼び出せるよう、コマンドプロンプトでカレントフォルダーを移動するか、フルパスでregsvr32.exeを指定してみてください。
  • コマンドプロンプトが管理者権限でない …… これが一番ありがちなパターンだと思います。下図のエラーが出た場合、コマンドプロンプトを管理者権限で実行して、そこから再度やり直してみて下さい。
管理者権限でないコマンドプロンプトで実行した場合のエラー

モジュール "C:\Windows\SysWOW64\comctl32.ocx" は読み込まれましたが、DllRegisterServer への呼び出しはエラーコード 0x8002801c により失敗しました。


この問題の詳細については、エラーコードを検索後として入力してオンラインで検索してください。

参考:regsvr32で登録したファイルを登録解除する

もうあまりこうした作業をする必要がある場面に遭遇することは無いと思いますが、念のため。regsvr32.exe で手作業でWindowsに登録したOCXファイルやDLLファイルは、不要になった場合、手作業で登録解除する必要があります。その際のコマンドは下記のようになります。

regsvr32.exe /u ファイル名

この際、注意すべき事柄があります。

  • regsvr32.exe は対象ファイルの「場所」も併せてWindowsに登録します。なので、登録後、解除する際に対象のファイルが登録した場所に無ければエラーになります。この「解除ファイルが無い」というエラーになった場合、Windowsレジストリーには実在しないファイルの情報だけがゴミとして残ってしまいます。
  • 前述の理由により、登録したファイルは解除するまで手作業で削除や移動してはいけません。

本来は、アプリケーションのインストーラーで登録し、アンインストールで自動的に登録解除されるものなので、登録を手作業でやった場合、解除も手作業で行う必要があります。もし、開発などで「状態を元通りにしなければならない」といった場面があった場合は、このことに気をつけておかないと、いろいろと問題が起きる事があります。注意してください(といっても、今のご時世、regsvr32で登録しなければならない部品を使ったWindowsアプリケーション開発の場面なんてそうそう無いと思いますけどね)。

*1:WOW64: Windows On Win64の略。64bitアーキテクチャーシステムで古い32bit版システムを動かすために、32bit版を64bit環境で共存させる仕組みの名称です。