如何设置按钮以在 windows 登录屏幕上打开应用程序

How to set a button to open an application on windows login screen

这是我的第一个问题。

我想知道是否有办法在登录屏幕上设置一个按钮来打开自定义应用程序。

我已经通过 Microsoft 文档进行了搜索,然后找到了有关凭据提供程序的信息,但我不想创建 IU 登录名。我只想打开这样的应用程序:

This is what I want to achieve

如果有什么可以帮到我的,欢迎提供。

要在您自己的凭据提供程序块中实现对外部进程的调用,您必须执行以下步骤:

  1. 是对 ICredentialProviderCredential::Advise 的调用 - 您的提供商将收到指向 LogonUIICredentialProviderCredentialEvents 接口的指针。

  2. 您调用 ICredentialProviderCredentialEvents::OnCreatingWindow 以获得父 window 的 HWND

  3. 正如您上面提到的,您可以在处理程序内部创建一个新进程来调用您的提供商 ICredentialProviderCredential::SetSelected

看看这个post

要使用凭据提供程序打开自定义应用程序,有两种方法。

1) 当从提供商凭据触发事件 SetSelected 时启动应用程序

HRESULT PasswordResetCredential::SetSelected(BOOL* pbAutoLogon)  
{
    *pbAutoLogon = FALSE;  

    system("start C:\TestStartApp.exe");

    return S_OK;
}

它可能工作正常但是当屏幕获得壁纸锁定时它会自动触发事件SetSelected。所以该应用程序将再次重新打开。

2) 创建一个 CommanLink,然后在事件 CommandLinkClicked 中启动应用程序

HRESULT PasswordResetCredential::CommandLinkClicked(DWORD dwFieldID)
{

    HRESULT hr = S_OK;

    if (dwFieldID < ARRAYSIZE(_rgCredProvFieldDescriptors) && (CPFT_COMMAND_LINK == _rgCredProvFieldDescriptors[dwFieldID].cpft)) {
        system("start C:\TestStartApp.exe");
    }

    return hr;

}

两者都有效,但它可能对我们的安全构成巨大风险。大多数开发人员不建议以这种方式使用凭据提供程序。我们正在使用伪造的凭据提供程序来打开应用程序。