CredUIPromptForCredentials强制手动选择用户名

Gre*_*som 4 .net c# windows credentials

我使用CredUIPromptForCredentials来提示用户输入凭据然后传递给Web服务.

提示符显示"记住我的密码"选项,以便可以使用以前使用的值填充用户名和密码.

当出现提示并且预先填写凭据时,在我从下拉列表中实际选择用户名之前,我无法继续.

这是我看到的屏幕:

在此输入图像描述

单击"确定"只会显示示例提示,但如果我从下拉列表中手动选择"Greg",则可以继续.

这是我正在使用的代码:

StringBuilder userPassword = new StringBuilder(), userID = new StringBuilder();
CREDUI_INFO credUI = new CREDUI_INFO();
credUI.cbSize = Marshal.SizeOf(credUI);
bool save = true;
CREDUI_FLAGS flags = CREDUI_FLAGS.ALWAYS_SHOW_UI | CREDUI_FLAGS.GENERIC_CREDENTIALS 
                    | CREDUI_FLAGS.SHOW_SAVE_CHECK_BOX ;

//Display password prompt:
CredUIReturnCodes returnCode = CredUIPromptForCredentials
    (ref credUI, this.serverName, IntPtr.Zero, 0, userID, 100, userPassword, 100, ref save, flags);
Run Code Online (Sandbox Code Playgroud)

操作系统是Windows 7和Server 2008 r2.

我创建了一个完整但简单的示例应用程序,可以从https://docs.google.com/open?id=0BxSAZ9JlU2w9VHZWWFBjVEhTNG02N1Q4WkFrUkhDUQ下载进行测试.

Phi*_*hil 5

我打算尝试回答你的问题,但你自己解决得太快了.

但是,在阅读CredUIPromptForCredentials上的文档时,我注意到建议您在Windows 7和Server 2008上使用CredUIPromptForWindowsCredentials.

在Google搜索中,我找到了这个优秀的免费类库,其中包含几个本机API的包装器,包括使用CredUIPromptForWindowsCredentials API显示凭据对话框的完整示例.