管理登录名

[与此页面关联的功能(Windows 媒体播放器 SDK)是旧版功能。 它已被 MediaPlayer 取代。 MediaPlayer 已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用 MediaPlayer 而不是 Windows 媒体播放器 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

Windows 媒体播放器支持多种方法让用户登录到类型 1 的在线商店。 Player 提供标准登录对话框,但在线商店可以提供作为标准对话框的替代项的网页。

用户可以通过与Windows 媒体播放器用户界面交互或与在线商店提供的发现页面交互来启动登录尝试。 如果用户通过与发现页交互启动登录尝试,则发现页上的脚本会调用 External.attemptLogin 方法。

用户的登录状态由在线商店维护。 当用户的登录状态更改或登录尝试失败时,在线商店的插件将通过调用 IWMPContentPartnerCallback::Notify,在类型参数中传递 wmpcnLoginStateChange 来通知Windows 媒体播放器。 播放器通过引发 External.OnLoginChange 事件将通知传递到发现页面。

调用 OnLoginChange 并不一定意味着用户的登录状态发生了更改;这可能意味着尝试登录失败。 若要确定用户的登录状态, OnLoginChange 事件处理程序可以检查 External.userLoggedIn 属性。

以下部分介绍标准登录过程、备用登录过程和注销过程。

标准登录

标准登录过程涉及以下步骤:

  1. 用户通过与Windows 媒体播放器用户界面交互或通过与发现页面交互来启动登录尝试。
  2. Windows 媒体播放器显示一个对话框,提示用户输入用户名和密码。
  3. 当用户单击对话框中的“登录”按钮时,Windows 媒体播放器调用 IWMPContentPartner::Login,这是由在线商店的插件实现的。
  4. 该插件与在线商店通信,并成功或无法登录用户。
  5. 如果登录尝试成功,插件将通过调用 IWMPContentPartnerCallback::Notify 来通知Windows 媒体播放器,并在 pContext 参数的 boolVal 成员中传递VARIANT_TRUE。 如果登录尝试失败,插件将通过调用 IWMPContentPartnerCallback::Notify 来通知Windows 媒体播放器,并在 pContext 参数的 ulVal 成员中传递一个 32 位值。 然后,播放器将该 32 位值传递给 IWMPContentPartner::GetItemInfo ,以获取可以处理失败的网页的 URL。

备用登录名

如果在在线商店插件的“功能”注册表项中设置了SUBSCRIPTION_CAP_ALTLOGIN标志,Windows 媒体播放器不使用标准登录对话框。 相反,Windows 媒体播放器调用 IWMPContentPartner::GetItemInfo 来检索执行登录过程的网页的 URL。 有关 “功能” 注册表项的详细信息,请参阅 Type 1 Online Store 的注册表项和项

Player 调用 GetItemInfo 两次:一次传递g_szItemInfo_ALTLoginURL以检索登录网页的 URL,一次传递g_szItemInfo_ALTLoginCaption以检索承载网页的窗口的描述文字。 当 GetItemInfo 返回登录网页的 URL 时,它可以通过将以下参数字符串追加到 URL 来指定登录窗口的大小:

?DlgX=width&DlgY=height

在参数字符串中, widthheight 是窗口的宽度和高度(以像素为单位)。 例如 ,GetItemInfo 可以返回以下字符串,以指定AltLogin.htm应显示在宽度为 800 像素、高度为 400 像素的窗口中

https://proseware.com/AltLogin.htm?DlgX=800&DlgY=400

备用登录过程涉及以下步骤:

  1. 用户通过与Windows 媒体播放器用户界面交互或通过与发现页面交互来启动登录尝试。
  2. Windows 媒体播放器将打开一个模式窗口,其中显示在线商店提供的登录网页。
  3. 网页与在线商店通信,登录用户成功或失败。
  4. 如果登录尝试成功,网页将通过调用 External.sendMessage 通知在线商店的插件,这会导致调用 IWMPContentPartner::SendMessage。 在线商店的插件通过检查传递给 IWMPContentPartner::SendMessage 的参数来确定登录尝试是否成功。 这些参数不由Windows 媒体播放器解释;它们仅对在线商店有意义。 该插件调用 IWMPContentPartnerCallback::Notify,在 pContext 参数的 boolVal 成员中传递VARIANT_TRUE。 如果登录失败,在线商店必须确定如何帮助用户。 一种可能性是在托管备用登录网页的模式窗口中显示新网页。

注销

注销过程涉及以下步骤。

  1. 用户通过与Windows 媒体播放器用户界面交互或与发现页面交互来启动注销尝试。
  2. Windows 媒体播放器调用 IWMPContentPartner::Logout,它由在线商店的插件实现。
  3. 该插件与在线商店通信,成功或无法注销用户。
  4. 如果注销尝试成功,插件将通过调用 IWMPContentPartnerCallback::Notify 来通知Windows 媒体播放器,并在 pContext 参数的 boolVal 成员中传递VARIANT_FALSE。

尝试登录或注销成功后,在线商店的插件将调用 IWMPContentPartnerCallback::Notify,并在 type 参数中传递 wmpcnLoginStateChange。 插件使用 pContext 参数指定用户的当前登录状态。 如果插件将 pContext-boolVal> 设置为 VARIANT_TRUE,则表示用户已登录。 如果插件将 pContext-boolVal> 设置为 VARIANT_FALSE,则用户将注销。请注意,pContext 并不指示尝试成功或失败;而是指示用户的当前登录状态。

External.attemptLogin

External.OnLoginChange 事件

External.userLoggedIn

IWMPContentPartner::Login

IWMPContentPartner::Logout

第 1 类在线商店编程指南