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環境で共存させる仕組みの名称です。

デジカメ画像とネガフィルム画像をDropboxに入れる

先日、Dropbox有料オプションDropbox Plus」の3年ライセンスを購入し、登録しました。

www.backyrd.net

だいたい1万円/年という感じ。まぁ、毎日外食で1500円近く使っていた頃に比べたら、在宅勤務でお金の使い方は変わってきているので、月に1000円と思えばたいした額ではないですね。で、せっかくなので2テラバイトの容量はフル活用しましょう。

ネガフィルム画像をDropboxに入れる

これまで、ネガフィルムをフィルムスキャナーでスキャンした画像データは、自宅NASに保管。レタッチまで済ませたものはFlickrに登録して実家の家族などと共有できるようにしていました。しかし、なんだかんだいって自宅NASのハードディスクが壊れたら終わりなので。これをDropboxに入れましょう。

ネガフィルム画像フォルダー

現時点で、フィルム250本ぐらいのデータが50GB。NASのデータをローカルドライブにコピー。ファイルの追加頻度はかなり低いので、念のためNASDropboxの多重保管を手作業で行う事にします(フォルダーの同期アプリを作っちゃえばいいのですが、面倒で手を出せていません)。

デジカメ画像をDropboxに入れる

次はデジカメの画像です。こちらは1997年頃からのファイルで、分量もかなりの量ですが……。これもローカルPCとNASの多重管理をしていたので、ここにDropboxを入れて、とりあえずカメラやスマホから写真をローカルに移した時点でDropboxと同期されるようにしましょうか。

デジカメ画像フォルダー

セキュリティ面は大丈夫か?

Dropboxということは、要するに自宅外のどこかにファイルが保管されるわけですが。気になるのはセキュリティ関連。まぁ、もう登場して10年以上経つサービスで、それなりにトラブルや改良も乗り越えてきているでしょうから、余り心配してはいませんが。仮に漏れたとしてもどこの誰とも判らない大量の画像データで、現時点の生活に直撃するような問題は起きないはずですから、利便性とトラブル可能性を天秤にかけて利便性を取ることにします。

Dropbox Plusに無料トライアルがある?使ってみる?

Dropboxを有料アカウントに切り替えようか、というのは下記のエントリーで書いたとおりです。で、ソースネクストで3年分のライセンスを購入したのですが……どうも買ったプランの無料体験が30日使えるようなのです。

www.backyrd.net

Dropbox Plusの30日間無料トライアル

ライセンスを購入したのは、個人1名の利用量上限が2TBになる「Dropbox Plus」。通常の「アップグレードする」や「プランを比較する」というページから見ると、このPlusというコースには無料トライアルはないように見えます。

Plusに無料トライアルの選択肢は見当たらない

ですが、Dropboxのサイト、右上のアカウント情報メニューから「設定」を開くと……

Dropbox Plus 30日間無料トライアルがある

現在のプランとの比較で、Dropbox Plusにも無料トライアルがあるように表示されます。3年のライセンスはシリアルコードを入れる方式なので、1ヶ月ずらしてスタートしても問題無いようですから、まずはこの無料トライアルを30日試してみましょうか、と思いました。

無料トライアルのボタンを押してみた

結論:これはやめておこう……。です。

無料トライアル開始の画面

無料トライアルのボタンを押すと出てくるのは、クレジットカード情報を登録する会計ページでした。要するに、先にカード情報を登録し、無料期間が終わったら自動的(または申請して?)有料アカウントに移行できる準備をしておかないといけないということですね。まぁ……わかります。ただ、今回、ソースネクストで3年分のライセンスを買っているので、Dropbox側のカード情報と、ソースネクストのライセンスキーと、どっちが優先されるの?とか余計な不安を抱えてしまいそうです。ややこしいことはせずにソースネクストのライセンスを登録してしまおうと思います。

というのも、この状態でDropboxにカード情報を登録してしまうと、ソースネクストで買った3年ライセンスが終わった時に、自動的にDropbox側で更新の購入手続きをやってしまう??みたいなツイートを見かけたので。念のためDropboxのアカウント設定にはカード情報を入れないでおこうと思います。

参考:ライセンスキーとその他支払い方法どちらが優先されるか

一応、アカウントの設定→プランのところで、ライセンスキーを入力する欄には下図のように記載されていました。

ライセンスキーとその他支払い方法の優先度

ライセンスキーがあると、その他のお支払い方法に優先して適用されます。

なので、カード情報を入力して、無料プランを使い、終わる頃にライセンスキーを入れれば1ヶ月得をすることができるかもしれませんが……。絶対なにか落とし穴があるとおもうので。1ヶ月分ぐらいならサッサと買ったキーを入れて有効化することにします。