IPublishingWizard
COM公式ドキュメント
オンライン印刷ウィザード、Web 発行ウィザード、およびネットワークプレースの追加ウィザードを操作するためのメソッドを公開します。Windows Vista では、IPublishingWizard は Web 発行ウィザードおよびオンライン印刷ウィザードをサポートしなくなりました。
解説(Remarks)
オンライン印刷ウィザードは、写真のプリントをオンラインで注文するためのウィザードです。IPublishingWizard を使用したオンライン印刷ウィザードの操作は、Windows Vista ではサポートされなくなりました。
ネットワークプレースの追加ウィザードを使用すると、ユーザーはマイ ネットワーク(Windows XP の場合)またはコンピューター(Windows Vista の場合)にネットワークリソースへのショートカットを作成できます。
Windows シェルは、IPublishingWizard および IWizardExtension を実装した発行ウィザードオブジェクトを提供します。IPublishingWizard のメソッドは、ウィザードの種類を初期化し、ウィザードの特定の属性を設定し、転送マニフェストを取得するために使用します。IWizardExtension のメソッドは、選択したウィザードの本体を構成する拡張ページを取得するために使用します。発行ウィザードオブジェクトをインスタンス化するには、CoCreateInstance を呼び出し、クラス識別子 (CLSID) として CLSID_PublishingWizard を、REFIID として IID_IPublishingWizard を使用します。
IPublishingWizard *pPublish = NULL;
HRESULT hr = CoCreateInstance(CLSID_PublishingWizard,
NULL,
CLSCTX_INPROC_SERVER,
IID_IPublishingWizard,
(LPVOID*)&pPublish);
発行ウィザードオブジェクトをインスタンス化したら、IPublishingWizard::Initialize を呼び出して発行ウィザードオブジェクトを初期化します。
// Initializing the Online Print Wizard
hr = pPublish->Initialize(pDataObject,
SHPWHF_NOFILESELECTOR,
L"InternetPhotoPrinting");
// pDataObject: A data object that represents files or folders to transfer.
// SHPWHF_NOFILESELECTOR: This flag must be set.
// L"InternetPhotoPrinting": Display the Online Print Wizard.
IPublishingWizard::Initialize は実際にウィザードを表示するわけではないことに注意してください。オンライン印刷ウィザードを表示するには、PROPSHEETHEADER 構造体を作成し、その phpage メンバーを変更して、IWizardExtension::AddPages が返す PROPSHEETPAGE ハンドルの配列を含める必要があります。IWizardExtension::AddPages は、IPublishingWizard を実装しているのと同じ発行ウィザードオブジェクトによって実装されています。
オンライン印刷ウィザードを表示する場合は、拡張ページを格納する PROPSHEETHEADER 構造体の dwFlags メンバーに PSH_NOMARGIN フラグを設定してください。
IWizardExtension::AddPages から取得した拡張ページに加えて、phpage 配列には、アプリケーションが提供する開始ページ、キャンセルページ、および完了ページを含める必要があります。ユーザーが拡張機能から戻ったりキャンセルしたりした場合、または拡張機能がページの表示を完了した場合、拡張機能はウィザードに対して、拡張ページのスタックからこれらのアプリケーション提供のページのいずれかへ移動する必要があることを伝えます。アプリケーションは、この通信を処理する IWizardSite の実装を提供する必要があります。IPublishingWizard オブジェクトのサイトは、この IWizardSite の実装に設定する必要があります。サイトの設定には IUnknown_SetSite 関数を使用できます。IPublishingWizard::Initialize を使用してウィザードの設定を指定し、PROPSHEETHEADER 構造体の phpage メンバーを適切に設定し、サイトを IWizardSite の実装に設定したら、PropertySheet 関数を呼び出してウィザードを表示できます。
/* This is example code demonstrating how to populate a PROPSHEETHEADER
structure and use it to display the Online Print Wizard.
This sample assumes that the PublishingWizard object has already
been instantiated and initialized elsewhere in the application. */
// Define the number of wizard pages that we expect to get from
// the Publishing Wizard object.
// The Online Print Wizard provides 6 predefined pages in Windows Vista,
// but provided 9 in Windows XP.
#if NTDDI_VERSION >= NTDDI_VISTA
#define NUMPAGES 6
#else
#define NUMPAGES 9
#endif
// Number of wizard pages supplied by the application in addition to
// the predefined pages supplied by the Online Print Wizard.
#define NUMNONEXTENSIONPAGES 3
// Array to hold the property sheets to display in the wizard,
// including both those returned by IPublishingWizard::AddPages()
// and those application-defined pages returned by IWizardSite methods.
HPROPSHEETPAGE hPropSheets[NUMPAGES + NUMNONEXTENSIONPAGES];
// Handles to the application-defined property sheets.
// This example assumes that they are initialized elsewhere in the application.
HPROPSHEETPAGE hPropSheetFinishPage = CreateFinishPage;
HPROPSHEETPAGE hPropSheetStartPage = CreateStartPage;
HPROPSHEETPAGE hPropSheetCanceledPage = CreateCanceledPage;
// Number of property sheets returned by IPublishingWizard::AddPages().
UINT uCount = 0;
INT_PTR retval = 0; // return value from PropertySheet
HRESULT hr;
// Property sheet header structure whose phpage member will receive
// the array of wizard pages retrieved from AddPages.
PROPSHEETHEADER psh;
psh.dwSize = sizeof(PROPSHEETHEADER);
// Set the PublishingWizard object's site to an IWizardSite implementation
// defined by your application.
hr = IUnknown_SetSite(pIPublish, (IUnknown *)pWizSite);
// Fill the hPropSheets array with the pages of the wizard.
if SUCCEEDED(hr)
{
hr = pIPublish->AddPages(&hPropSheets[0], NUMPAGES, &uCount);
}
if SUCCEEDED(hr)
{
// Define start, finish, and canceled pages elsewhere in your application.
// Here, these pages are added after the extension pages.
hPropSheets[uCount] = hPropSheetFinishPage;
hPropSheets[uCount + 1] = hPropSheetCanceledPage;
hPropSheets[uCount + 2] = hPropSheetStartPage;
// Assign the array of property sheets.
psh.phpage = hPropSheets;
// Number of extension pages from AddPages + # of your own pages.
psh.nPages = uCount + NUMNONEXTENSIONPAGES;
// The index into phpage where the first page to display is located.
psh.nStartPage = 0;
// PSH_NOMARGIN must be specified for the Online Print Wizard.
psh.dwFlags = PSH_AEROWIZARD | PSH_WIZARD | PSH_NOMARGIN;
psh.hwndParent = NULL;
psh.hInstance = NULL;
// Display the wizard.
PropertySheet(&psh);
}
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
発行ウィザードオブジェクトを、転送するファイル、使用する設定、および作成するウィザードの種類で初期化します。
| pdo | IDataObject* | inoptional | pszServiceProvider が InternetPhotoPrinting の場合、転送するファイルまたはフォルダーを表す IDataObject のインスタンスへのポインター。pszServiceProvider が AddNetPlace の場合、このパラメーターは NULL です。 |
| dwOptions | DWORD | in | 次のフラグの組み合わせ。 SHPWHF_NORECOMPRESS画像データの再圧縮を許可しません。オンライン印刷ウィザードで使用します。 SHPWHF_NONETPLACECREATEデータ転送の完了時にネットワークプレースのショートカットを作成しません。このフラグはネットワークプレースの追加ウィザードで使用します。 SHPWHF_NOFILESELECTORウィザード内でユーザーがファイルの選択を変更できないようにします。 SHPWHF_USEMRUサポートされていません。 SHPWHF_ANYLOCATIONWindows Vista 以降。 ネットワークプレースの追加ウィザードで使用します。このフラグが設定されており、pszServiceProvider が SHPWHF_VALIDATEVIAWEBFOLDERSネットワークプレースの追加ウィザードで使用します。Windows XP では、このフラグが設定されており、WebDAV を使用してネットワークの場所を開こうとして失敗した場合、ネットワークプレースの追加ウィザードは WEC のサポートを使用して、その場所の Web フォルダーを作成しようとします。Windows Vista および Windows Server 2003 では、このフラグは効果がなく、WebDAV のサポートがないネットワークの場所は Web フォルダーとして開けない場合があります。 |
| pszServiceScope | LPWSTR | in | 表示するウィザードの種類を示す Unicode 文字列。Windows Vista では、次の大文字と小文字を区別する値がサポートされています。 AddNetPlaceネットワークプレースの追加ウィザードを初期化します。 InternetPhotoPrintingオンライン印刷ウィザードを初期化します。Windows Vista ではサポートされていません。 |
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合は次を含むエラー値を返します。
| 戻り値 | 説明 |
|---|---|
Windows Vista では、pszServiceProvider に InternetPhotoPrinting を渡して、サポートされていないオンライン印刷ウィザードを初期化しようとしたことを示す場合があります。
Windows XP では、オンライン印刷ウィザードを初期化する際に、pdo パラメーターが NULL であるか、空の選択を指していることを示す場合があります。 |
|
| pszServiceProvider パラメーターがサポートされている値のいずれでもないか、dwOptions パラメーターにサポートされていないフラグの組み合わせが含まれています。 |
解説(Remarks)
発行ウィザードオブジェクトによって実装される IPublishingWizard::Initialize は、ウィザードオブジェクトを初期化するために呼び出されます。
Windows Vista ではオンライン印刷ウィザードを IPublishingWizard 経由でインスタンス化できないため、次のサンプルは Windows Vista では動作しません。
/* initializing the Online Print Wizard in Windows XP or Windows 2003 Server*/
hr = pPublish->Initialize(pDataObject, // A data object that represents files or
// folders to transfer.
SHPWHF_NOFILESELECTOR, // Flags
L"InternetPhotoPrinting"); // Display the Online Print Wizard.
IPublishingWizard::Initialize は、実際に初期化されたウィザードを表示するわけではありません。ウィザードの表示方法については、IPublishingWizard のトピックを参照してください。
オンライン印刷ウィザードやネットワークプレースの追加ウィザードなどの発行ウィザードによって実行されるファイル転送操作の転送マニフェストを取得します。
| phrFromTransfer | HRESULT* | outoptional | HRESULT 型の変数へのポインター。このメソッドが返るときに、転送操作が成功した場合は S_OK に、転送がまだ開始されていない場合は S_FALSE に、転送が失敗またはキャンセルされた場合は標準のエラー値に設定されます。この情報が不要な場合、この値は NULL にできます。 |
| pdocManifest | IXMLDOMDocument** | outoptional | IXMLDOMDocument インターフェイスポインターのアドレス。このメソッドが返るときに、マニフェストを表す IXMLDOMDocument インターフェイスオブジェクトを指します。この値は NULL にできます。 |
戻り値
解説(Remarks)
転送マニフェストは、ウィザードが実際に表示されるまで作成されません。発行ウィザードの表示に関する情報については、IPublishingWizard のトピックを参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPublishingWizard "{AA9198BB-CCEC-472D-BEED-19A4F6733F7A}" #usecom global IPublishingWizard IID_IPublishingWizard "{6B33163C-76A5-4B6C-BF21-45DE9CD503A1}" #comfunc global IPublishingWizard_Initialize 6 sptr,int,wstr #comfunc global IPublishingWizard_GetTransferManifest 7 var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IPublishingWizard "{AA9198BB-CCEC-472D-BEED-19A4F6733F7A}" #usecom global IPublishingWizard IID_IPublishingWizard "{6B33163C-76A5-4B6C-BF21-45DE9CD503A1}" #comfunc global IPublishingWizard_Initialize 6 sptr,int,wstr #comfunc global IPublishingWizard_GetTransferManifest 7 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。