Win32 API 日本語リファレンス
ホームUI.Shell › IPublishingWizard

IPublishingWizard

COM
IIDaa9198bb-ccec-472d-beed-19a4f6733f7a継承元IWizardExtension自前メソッド開始 vtbl6

公式ドキュメント

オンライン印刷ウィザード、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 を呼び出して発行ウィザードオブジェクトを初期化します。

Windows Vista では IPublishingWizard のメソッドがオンライン印刷ウィザードをサポートしなくなったため、以下の例は Windows Vista では動作しません。
// 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。

vtbl 6 HRESULT Initialize(IDataObject* pdo, DWORD dwOptions, LPWSTR pszServiceScope)

発行ウィザードオブジェクトを、転送するファイル、使用する設定、および作成するウィザードの種類で初期化します。

pdoIDataObject*inoptionalpszServiceProviderInternetPhotoPrinting の場合、転送するファイルまたはフォルダーを表す IDataObject のインスタンスへのポインター。pszServiceProviderAddNetPlace の場合、このパラメーターは NULL です。
dwOptionsDWORDin

次のフラグの組み合わせ。

SHPWHF_NORECOMPRESS

画像データの再圧縮を許可しません。オンライン印刷ウィザードで使用します。

SHPWHF_NONETPLACECREATE

データ転送の完了時にネットワークプレースのショートカットを作成しません。このフラグはネットワークプレースの追加ウィザードで使用します。

SHPWHF_NOFILESELECTOR

ウィザード内でユーザーがファイルの選択を変更できないようにします。

SHPWHF_USEMRU

サポートされていません。

SHPWHF_ANYLOCATION

Windows Vista 以降。 ネットワークプレースの追加ウィザードで使用します。このフラグが設定されており、pszServiceProviderAddNetPlace の場合、ネットワークプレースの追加ウィザードには、ウィザードに表示されるよう登録されている場所またはプロバイダー以外のネットワークの場所を選択するオプションが表示されます。

SHPWHF_VALIDATEVIAWEBFOLDERS

ネットワークプレースの追加ウィザードで使用します。Windows XP では、このフラグが設定されており、WebDAV を使用してネットワークの場所を開こうとして失敗した場合、ネットワークプレースの追加ウィザードは WEC のサポートを使用して、その場所の Web フォルダーを作成しようとします。Windows Vista および Windows Server 2003 では、このフラグは効果がなく、WebDAV のサポートがないネットワークの場所は Web フォルダーとして開けない場合があります。

pszServiceScopeLPWSTRin

表示するウィザードの種類を示す Unicode 文字列。Windows Vista では、次の大文字と小文字を区別する値がサポートされています。

AddNetPlace

ネットワークプレースの追加ウィザードを初期化します。

InternetPhotoPrinting

オンライン印刷ウィザードを初期化します。Windows Vista ではサポートされていません。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合は次を含むエラー値を返します。

戻り値 説明
E_INVALIDARG
Windows Vista では、pszServiceProviderInternetPhotoPrinting を渡して、サポートされていないオンライン印刷ウィザードを初期化しようとしたことを示す場合があります。

Windows XP では、オンライン印刷ウィザードを初期化する際に、pdo パラメーターが NULL であるか、空の選択を指していることを示す場合があります。

E_NOTIMPL
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 のトピックを参照してください。

vtbl 7 HRESULT GetTransferManifest(HRESULT* phrFromTransfer, IXMLDOMDocument** pdocManifest)

オンライン印刷ウィザードやネットワークプレースの追加ウィザードなどの発行ウィザードによって実行されるファイル転送操作の転送マニフェストを取得します。

phrFromTransferHRESULT*outoptionalHRESULT 型の変数へのポインター。このメソッドが返るときに、転送操作が成功した場合は S_OK に、転送がまだ開始されていない場合は S_FALSE に、転送が失敗またはキャンセルされた場合は標準のエラー値に設定されます。この情報が不要な場合、この値は NULL にできます。
pdocManifestIXMLDOMDocument**outoptionalIXMLDOMDocument インターフェイスポインターのアドレス。このメソッドが返るときに、マニフェストを表す IXMLDOMDocument インターフェイスオブジェクトを指します。この値は NULL にできます。

戻り値

型: HRESULT

マニフェストの取得に成功した場合は S_OK を、それ以外の場合は次を含む標準の COM エラー値を返します。

戻り値 説明
E_UNEXPECTED
転送マニフェストがまだ作成されていません。

解説(Remarks)

転送マニフェストは、ウィザードが実際に表示されるまで作成されません。発行ウィザードの表示に関する情報については、IPublishingWizard のトピックを参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。