既存の ActiveX コントロールのアップグレード

既存の ActiveX コントロール (以前の OLE コントロール) は、変更せずにインターネット上で使用できます。 ただし、コントロールを変更してパフォーマンスを向上させることができます。

重要

ActiveX は、新しい開発には使用すべきではないレガシ テクノロジです。 ActiveX に取って代わる最新のテクノロジの詳細については、「ActiveX コントロール」を参照してください。 ActiveX コントロールのサポートは、Internet Explorer の新しいバージョンでは非推奨とされており、最新のブラウザーではサポートされていません。 Microsoft は、web からアクセスできる ActiveX コンポーネントを提供しなくなりました。

Web ページでコントロールを使用する場合は、追加の考慮事項があります。 .Ocx ファイルとすべてのサポートファイルは、ターゲットコンピューター上にあるか、またはインターネット経由でダウンロードされる必要があります。 これにより、コードサイズとダウンロード時間が重要な考慮事項になります。 ダウンロードは、署名された .cab ファイルにパッケージ化することができます。 コントロールは、スクリプトに対して安全としてマークでき、初期化にも安全です。

この記事では、次のトピックについて説明します。

ActiveX コントロール: Optimization」で説明されているように、最適化を追加することもできます。 モニカーは、「インターネット上の ActiveX コントロール」で説明されているように、プロパティと大きな blob を非同期的にダウンロードするために使用できます。

ダウンロードするためのパッケージコード

このトピックの詳細については、「 ActiveX コントロールのパッケージ化」を参照してください。

CODEBASE タグ

ActiveX コントロールは、タグを使用して Web ページに埋め込まれ <OBJECT> ます。 CODEBASEタグのパラメーターは、 <OBJECT> コントロールのダウンロード元の場所を指定します。 CODEBASE は、さまざまな種類のファイルを正常に参照できます。

コードベースタグと OCX ファイルの使用

CODEBASE="http://example.contoso.com/mycontrol.ocx#version=4,
    70,
    0,
    1086"

このソリューションでは、コントロールの .ocx ファイルのみがダウンロードされ、クライアントコンピューターにはサポート Dll が既にインストールされている必要があります。 internet explorer には Visual C++ コントロールのサポート dll が付属しているので、これは Visual C++ で構築された internet explorer および MFC ActiveX コントロールに対して機能します。 コントロール対応の別のインターネット ActiveX ブラウザーがこのコントロールを表示するために使用されている場合、このソリューションは機能しません。

CODEBASE タグを INF ファイルと共に使用する

CODEBASE="http://example.contoso.com/trustme.inf"

.Inf ファイルは、.ocx とそのサポートファイルのインストールを制御します。 .Inf ファイルに署名することはできないため、このメソッドは推奨されません (コード署名のポインターの コードの署名 に関する記述を参照してください)。

コードベースタグと CAB ファイルの使用

CODEBASE="http://example.contoso.com/acontrol.cab#version=1,
    2,
    0,
    0"

MFC を使用する ActiveX コントロールをパッケージ化するには、キャビネットファイルを使用することをお勧めします。 mfc ActiveX コントロールをキャビネットファイルにパッケージ化すると、ActiveX コントロールとその依存 dll (mfc dll など) のインストールを制御するための .inf ファイルを含めることができます。 CAB ファイルを使用すると、簡単にダウンロードするためにコードが自動的に圧縮されます。 コンポーネントのダウンロードに .cab ファイルを使用している場合は、個々のコンポーネントよりも .cab ファイル全体に署名する方が高速です。

CAB ファイルの作成

キャビネットファイルを作成するためのツールがWindows SDKに含まれるようになりました。

によってポイントされるキャビネットファイルには、 CODEBASE ActiveX コントロールの .ocx ファイルと、インストールを制御するための .inf ファイルが含まれている必要があります。 キャビネットファイルを作成するには、コントロールファイルの名前と .inf ファイルを指定します。 システム上に既に存在する可能性のある依存 Dll をこのキャビネットファイルに含めないでください。 たとえば、MFC Dll は別のキャビネットファイルにパッケージ化され、.inf ファイルによって参照されます。

CAB ファイルの作成方法の詳細については、「 Cab ファイルの作成」を参照してください。

INF ファイル

次の例では、spindial に、MFC Spindial コントロールに必要なサポートファイルとバージョン情報が一覧表示されます。 mfc42.cab は、Microsoft によって提供され、署名されています。

Contents of spindial.inf:
[mfc42installer]
file-win32-x86=http://example.contoso.com/controls/vc/mfc42.cab
[Olepro32.dll] - FileVersion=5,
    0,
    4261,
    0
[Mfc42.dll] - FileVersion=6,
    0,
    8168,
    0
[Msvcrt.dll] - FileVersion=6,
    0,
    8168,
    0

<オブジェクト > タグ

次の例は、タグを使用して <OBJECT> MFC Spindial sample コントロールをパッケージ化する方法を示しています。

<OBJECT ID="Spindial1" WIDTH=100 HEIGHT=51
    CLASSID="CLSID:06889605-B8D0-101A-91F1-00608CEAD5B3"
    CODEBASE="http://example.contoso.com/spindial.cab#Version=1,0,0,001">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="2646">
<PARAM NAME="_ExtentY" VALUE="1323">
<PARAM NAME="_StockProps" VALUE="0">
<PARAM NAME="NeedlePosition" VALUE="2">
</OBJECT>

この場合、spindial.cab には spindial と spindial という2つのファイルが含まれます。 次のコマンドを実行すると、キャビネットファイルがビルドされます。

C:\CabDevKit\cabarc.exe -s 6144 N spindial.cab spindial.ocx spindial.inf

パラメーターは、 -s 6144 コード署名のためにキャビネット内の領域を予約します。

バージョンタグ

ここでは、 #Version CAB ファイルで指定された情報が、タグの #Version パラメーターで指定されたコントロールに適用されることに注意 <OBJECT> してください。

指定されたバージョンに応じて、コントロールを強制的にダウンロードできます。 OBJECTOBJECTパラメーターを含むタグの完全な指定については、「W3C リファレンス」を参照してください。

スクリプトと初期化のためのコントロールセーフのマーク付け

Web ページで使用される ActiveX コントロールは、実際に安全である場合に、スクリプトを安全としてマークし、初期化するために安全としてマークする必要があります。 安全なコントロールは、ディスク IO を実行したり、メモリにアクセスしたり、コンピューターの登録を直接行ったりすることはありません。

コントロールは、スクリプトに対して安全としてマークし、レジストリを使用して初期化することができます。 を変更し、 DllRegisterServer 次のようなエントリを追加して、レジストリのスクリプトと永続化のためにコントロールを安全としてマークします。 別の方法として、を実装することも IObjectSafety できます。

コントロールに対して、スクリプト作成と永続化のための安全を示すために、Guid (グローバル一意識別子) を定義します。 安全にスクリプト化できるコントロールには、次のようなレジストリエントリが含まれます。

HKEY_CLASSES_ROOT\Component Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}

永続データから安全に初期化できるコントロールは、次のようなレジストリエントリを使用して、永続化のために安全としてマークされます。

HKEY_CLASSES_ROOT\Component Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}

次のようなエントリを追加します (の代わりにコントロールのクラス ID を置き換え {06889605-B8D0-101A-91F1-00608CEAD5B3} ます)。キーを次のクラス id に関連付けます。

HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}
HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}

ライセンスに関する問題点

ライセンスされたコントロールを Web ページで使用する場合は、ライセンス契約によってインターネットでの使用が許可されていることを確認し、それに対してライセンスパッケージファイル (LPK) を作成する必要があります。

Internet Explorer を実行しているコンピューターでコントロールを使用するライセンスが付与されていない場合は、ライセンスされた ActiveX コントロールが HTML ページに正しく読み込まれません。 たとえば、ライセンスされたコントロールが Visual C++ を使用して作成された場合、コントロールを使用する HTML ページは、コントロールがビルドされたコンピューター上で適切に読み込まれますが、ライセンス情報が含まれていないと、別のコンピューターには読み込まれません。

Internet Explorer でライセンスされた ActiveX コントロールを使用するには、ベンダーのライセンス契約を確認して、コントロールのライセンスによって許可されているかどうかを確認する必要があります。

  • 再配布

  • インターネット上でのコントロールの使用

  • Codebase パラメーターの使用

ライセンスされたコントロールを nonlicensed コンピューターの HTML ページで使用するには、ライセンスパッケージファイル (LPK) を生成する必要があります。 LPK ファイルには、HTML ページのライセンスされたコントロールのランタイムライセンスが含まれています。 このファイルは、ActiveX SDK に付属の LPK_TOOL.EXE を使用して生成されます。

LPK ファイルを作成するには

  1. コントロールを使用するライセンスが付与されているコンピューターで LPK_TOOL.EXE を実行します。

  2. [ライセンスパッケージ作成ツール] ダイアログボックスの [使用可能なコントロール] リストボックスで、HTML ページで使用するライセンスされた各 ActiveX コントロールを選択し、[追加] をクリックします。

  3. [ Save Exit ] をクリックし、LPK ファイルの名前を入力します。 これにより、LPK ファイルが作成され、アプリケーションが終了します。

ライセンスされたコントロールを HTML ページに埋め込むには

  1. HTML ページを編集します。 HTML ページで、 <> License Manager オブジェクトのオブジェクトタグを他のオブジェクトタグの前に挿入し <> ます。 ライセンスマネージャーは、Internet Explorer と共にインストールされる ActiveX コントロールです。 クラス ID を次に示します。 License Manager オブジェクトの LPKPath プロパティを、LPK ファイルのパスと名前に設定します。 LPK ファイルは HTML ページごとに1つだけ作成できます。
<OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="relative URL to .LPK file">
</OBJECT>
  1. ライセンスさ < れ > たコントロールのオブジェクトタグを、ライセンスマネージャータグの後に挿入します。

    たとえば、Microsoft のマスクエディットコントロールを表示する HTML ページを次に示します。 最初のクラス ID は、ライセンスマネージャーコントロール用で、2番目のクラス ID はマスクエディットコントロール用です。 前の手順で作成した .lpk ファイルの相対パスを指すようにタグを変更し、コントロールのクラス ID を含むオブジェクトタグを追加します。

  2. <> ncompass ActiveX プラグインを使用している場合は、LPK ファイルの埋め込み属性を挿入します。

    コントロールを他のアクティブに対応したブラウザーで表示できる場合は — (たとえば、ncompass ActiveX プラグインを使用している Netscape)、 —< 次に示すように埋め込み構文を追加する必要があり > ます。

<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="maskedit.lpk">

<EMBED SRC = "maskedit.LPK">

</OBJECT>
<OBJECT CLASSID="clsid:C932BA85-4374-101B-A56C-00AA003668DC" WIDTH=100 HEIGHT=25>
</OBJECT>

コントロール のライセンスの詳細については、「ActiveXコントロールのライセンス」をActiveXしてください

署名コード

コード署名は、コードのソースを識別し、コードが署名された後にコードが変更されていないと保証するように設計されています。 ブラウザーの安全性の設定によっては、コードがダウンロードされる前にユーザーに警告が表示される場合があります。 ユーザーは、特定の証明書の所有者または企業を信頼することができます。その場合、それらの信頼されたによって署名されたコードは警告なしでダウンロードされます。 改ざんを回避するために、コードはデジタル署名されます。

信頼の警告メッセージを表示せずにコントロールを自動的にダウンロードできるよう、最終的なコードが署名済みである必要があります。 コードに署名する方法の詳細については、ActiveX SDK の Authenticode に関するドキュメントを参照し、「CAB ファイルに署名する」を参照してください

信頼とブラウザーの安全性レベルの設定によっては、署名者または会社を識別する証明書が表示される場合があります。 安全性レベルが none の場合、または署名されたコントロールの証明書所有者が信頼されている場合、証明書は表示されません。 ブラウザー のInternet Explorer設定 によってコントロールがダウンロードされ、証明書が表示される方法の詳細については、「ブラウザーの安全性レベルと制御動作」を参照してください。

デジタル署名では、コードが署名された後にコードが変更されていないと保証されます。 コードのハッシュが取得され、証明書に埋め込されます。 このハッシュは、後で、コードがダウンロードされた後で実行される前に取得されたコードのハッシュと比較されます。 Verisign などの企業は、コードに署名するために必要なプライベート キーと公開キーを提供できます。 ActiveX SDK には、テスト証明書を作成するためのユーティリティである MakeCert が含まれています。

パレットの管理

コンテナーによってパレットが決定され、アンビエント プロパティとして使用DISPID_AMBIENT_PALETTE。 コンテナー (たとえば、Internet Explorer) は、ページ上のすべての ActiveX コントロールが独自のパレットを決定するために使用するパレットを選択します。 これにより、表示がちらつきを防ぎ、一貫した外観を示します。

コントロールをオーバーライドして OnAmbientPropertyChange 、パレットへの変更の通知を処理できます。

コントロールをオーバーライドして OnGetColorSet 、パレットを描画する色セットを返します。 コンテナーは戻り値を使用して、コントロールがパレット対応かどうかを判断します。

[CONTROL 96 ガイドライン] では、コントロールは常にバックグラウンドでパレットを認識する必要があります。

アンビエント パレット プロパティを使用しない古いコンテナーは、WM_QUERYNEWPALETTEメッセージWM_PALETTECHANGEDします。 コントロールは、 と を OnQueryNewPalette オーバーライド OnPaletteChanged して、これらのメッセージを処理できます。

Internet Explorerの安全性レベルと制御動作

ブラウザーには、ユーザーが構成できる安全性レベルのオプションがあります。 Web ページには、ユーザーのコンピューターに損害を与える可能性のあるアクティブなコンテンツが含まれている可能性があります。このため、ブラウザーを使用すると、ユーザーは安全レベルのオプションを選択できます。 ブラウザーで安全性レベルを実装する方法によっては、コントロールをダウンロードできない場合や、証明書または警告メッセージが表示され、ユーザーはコントロールをダウンロードするかどうかに関して実行時に選択できます。 次に示ActiveXの高、中、低の安全性レベルでのInternet Explorerの動作を示します。

高い安全性モード

  • 署名されていないコントロールはダウンロードされません。

  • 署名付きコントロールでは、信頼されていない場合に証明書が表示されます (ユーザーは、今後、この証明書所有者のコードを常に信頼するオプションを選択できます)。

  • 安全とマークされたコントロールだけが永続的なデータを持ち、スクリプト可能になります。

中程度の安全性モード

  • 署名されていないコントロールでは、ダウンロード前に警告が表示されます。

  • 署名付きコントロールでは、信頼されていない場合は証明書が表示されます。

  • セーフとしてマークされていないコントロールには、警告が表示されます。

低い安全性モード

  • コントロールは警告なしでダウンロードされます。

  • スクリプトと永続化は警告なしで発生します。

関連項目

MFC インターネット プログラミング タスク
MFC インターネット プログラミングの基本
MFC ActiveX コントロール: コントロールのライセンスActiveXする