c++ - 未使用附加字段调用凭据提供程序“SetComboBoxSelectedValue”
问题描述
我正在从 VistaCredentialProviderSamples 运行 SampleWrapExistingCredentialProvider,并且在 CSampleCredential.cpp 文件中有一个名为“SetComboBoxSelectedValue”的函数。当用户更改组合框中的选定项并存储选定项索引时调用此函数但是,当我在运行时使用 AppendFieldComboBoxItem 函数在组合框中附加一个项目时,如果选择了附加项,则不调用此函数. 因此,我无法获取附加字段的选定项目索引。
我试图显示一个消息框以查看何时调用此函数。仅当用户选择了默认组合框项之一时才调用此函数,而在选择附加项时不调用此函数。
// Called when the user changes the selected item in the combobox. We'll check to see if
// it's for us or the wrapped credential, and then handle or route it as appropriate.
HRESULT CSampleCredential::SetComboBoxSelectedValue(
DWORD dwFieldID,
DWORD dwSelectedItem
)
{
HRESULT hr = E_UNEXPECTED;
// Make sure we have a wrapped credential.
if (_pWrappedCredential != NULL)
{
// If this field belongs to the wrapped credential, hand it off.
if (_IsFieldInWrappedCredential(dwFieldID))
{
hr = _pWrappedCredential->SetComboBoxSelectedValue(dwFieldID, dwSelectedItem);
}
// Otherwise determine if we need to handle it.
else
{
FIELD_STATE_PAIR *pfsp = _LookupLocalFieldStatePair(dwFieldID);
if ((pfsp != NULL) && (dwSelectedItem < ARRAYSIZE(s_rgDatabases)))
{
_dwComboIndex = dwSelectedItem;
HWND hwndOwner = nullptr;
if (_pCredProvCredentialEvents)
{
_pCredProvCredentialEvents->OnCreatingWindow(&hwndOwner);
}
TCHAR msg[100];
StringCbPrintf(msg, 100, TEXT("%d"), _dwComboIndex);
MessageBox(hwndOwner, msg, TEXT("Combobox selected ID"), MB_OK | MB_ICONERROR);
hr = S_OK;
}
else
{
hr = E_INVALIDARG;
}
}
}
return hr;
}
我还需要检测附加字段的组合框选定项索引。关于如何检测附加组合框项目的索引的任何帮助将不胜感激?
解决方案
新的组合框项目将始终附加到列表的末尾。
跟踪出现顺序是您的责任,并且您可以维护列表的内部“副本”以跟踪更改。
因为您正在使用SampleWrapExistingCredentialProvider
,所以您可以创建一个代理类来跟踪从包装的提供程序内部到登录 UI 的调用。
更新
我刚刚检查了我的提供商的日志。
我在方法内部填充组合框列表GetSerialization
。
在用几次调用填充列表后,AppendFieldComboBoxItem
我手动调用SetFieldComboBoxSelectedItem
第三个参数集0
以确保选择第一个项目。
然后我设置pcpgsr
为CPGSR_NO_CREDENTIAL_NOT_FINISHED
值。
当控件超出GetSerialization
方法 Logon UI 立即用SetComboBoxSelectedValue
和 value给我回电0
。
推荐阅读
- sql - 如何根据唯一父表键恢复非唯一键上的数据?
- android - 有没有办法修复 EditText 中的字母宽度?
- android - 将 NXP PN7150 驱动程序和设备信息集成到 Android x86 内核中,设备信息应该放在哪里?
- c++ - 使用QProcess,是否需要在waitForFinished之后调用waitForReadyRead?
- swift - T 不同的通用对象的异构数组
- apache - 从浏览器而不是嵌入式设备调用的 Apache cgi 脚本
- javafx - 带有 VSCode 的 JavaFX-11
- vivado-hls - 如何使用 xf:Mat 进行逐像素计算?
- python - 是有多个脚本文件还是每个函数只有一个大脚本文件更好?
- reactjs - 影响先前访问过的组件的道具更改