使用C# Windows Forms应用程序(.NET Framework)进行Windows Hello验证?

4

当按钮被点击时,我能否编写一个代码块来打开Windows Hello窗口,并根据密码的正确性采取行动?如果可以编写,我该如何做呢?

我正在使用:Windows Forms .NET Framework(C#)

1个回答

9
对于.NET Framework WinForms应用程序,您需要按照以下步骤操作:
  1. Tools → NuGet Package Manager → Package Manager Settings → Make sure PackageReference is selected for Default package management format.
  2. Solution Explorer → Right click on your project → choose Manage NuGet Packages.
  3. In the Browse tab of the package manager, search for Microsoft.Windows.SDK.Contracts package. In the right pane of the NuGet Package Manager window select the desired version of the package based on the version of Windows 10 you want to target and click install.
  4. Then search for Microsoft.NETCore.UniversalWindowsPlatform package and install it.
  5. Add the following code in the application, for example in a button click handler:
    // Required using statements:
    // using Windows.Security.Credentials;
    private async void button1_Click(object sender, EventArgs e)
    {
        bool supported = await KeyCredentialManager.IsSupportedAsync();
        if (supported)
        {
            KeyCredentialRetrievalResult result =
                await KeyCredentialManager.RequestCreateAsync("login", 
                KeyCredentialCreationOption.ReplaceExisting);
            if (result.Status == KeyCredentialStatus.Success)
            {
                MessageBox.Show("Logged in.");
            }
            else
            {
                MessageBox.Show("Login failed.");
            }
        }
    }
    

以下是结果:

输入图像描述

要了解更多信息,请参阅以下文档:


我下载了您指定的程序包,但出现了错误。我的代码中无法将它们作为库调用。 定义在代码中未定义。1)当前上下文中不存在名称“KeyCredentialManager”2)找不到类型“KeyCredentialRetrievalResult”或命名空间(缺少使用指令或程序集引用?)3)当前上下文中不存在名称“KeyCredentialManager”4)当前上下文中不存在名称“KeyCredentialCreationOption”5)当前上下文中不存在名称“KeyCredentialStatus” - Omer Huseyin GUL
我已在Windows 10系统中测试了该解决方案。 - Reza Aghaei
@laweis 我提到的库是NuGet包。请仔细按照步骤操作。每个步骤中提到的细节都很重要。例如,如果您没有完成第一步,则会出现一些构建错误。 - Reza Aghaei
1
感谢@FiachReid,对于.NET来说是正确的,但对于.NET Framework(本问题的目标),您需要适当版本的Microsoft.Windows.SDK.Contracts包。更多详细信息请参见此处。我的另一个答案显示表情符号面板使用MediaCapture api也采用了相同的方法。 - Reza Aghaei
@Daniel,对于.NET 7来说,代码是相同的,但步骤不同。无需使用NuGet软件包,只需要像此帖子中所示更改TargetFramework即可。这也在我之前评论中的链接中提到过。 - Reza Aghaei
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接