2012-02-28 26 views
3

我使用CredUIPromptForCredentials来提示用户输入凭证,然后将凭证传递给Web服务。CredUIPromptForCredentials强制手动选择用户名

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

当出现提示并且预填充凭据时,我无法继续,直到我实际从下拉列表中选择用户名。

这是我看到的画面:

enter image description here

单击确定,什么也不做,但弹出例子小费,但如果我手动从下拉列表中选择“格雷格”,我能继续。

下面是我使用的代码:

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); 

操作系统是Windows 7和Server 2008 R2。

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

+0

,我认为它不是通过改变密码每次运行IM能够登录 – Raghuveer 2012-03-01 10:02:54

+0

:示例应用程序假定密码是正确的 - 它应该让你继续无论你输入密码的。 – Raghuveer 2012-03-01 10:10:25

+1

@RaghuveerGuthikonda保存密码 – 2012-03-01 11:01:39

回答

4

设置save = false解决了这个问题。

默认情况下,该复选框不会被选中,但如果选中该复选框,则会保存密码,以便用户在后续尝试中无需更改输入值即可继续。

-1

我相信你只是想设置的用户名:userID = new StringBuilder("Greg")

有一个包装在这里C#实现:http://www.developerfusion.com/code/4693/using-the-credential-management-api/

你可能会想从Environment.UserName的用户名。

+0

我已经尝试过,并且如果设置了UserName,它不会“记住密码”。如果您希望看到它的实际操作,我已将示例应用程序上传到https://docs.google.com/open?id=0BxSAZ9JlU2w9VHZWWFBjVEhTNG02N1Q4WkFrUkhDUQ。 – 2012-03-01 08:45:41

4

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

然而,在阅读CredUIPromptForCredentials文档我注意到你建议使用CredUIPromptForWindowsCredentials在Windows 7和Server 2008的

在周围的Googling我找到了这个优秀的free class library其中包含几个本地API,包括一个完整的包装使用CredUIPromptForWindowsCredentials API显示凭证对话框的示例。

相关问题