如何在 Windows 10 中打开 "Enter Network Credentials"

How to open "Enter Network Credentials" in Windows 10

我正在使用 Windows Shell API 访问网络机器及其文件夹。

shellFolder.EnumObjects(hwnd, grfFlags, out enumIdList);

....

int result = shellEnum.Next(celt, out itemPidl, out numFetched);

我正在使用 IShellFolder.EnumObjects() 方法,效果很好,我可以获得网络中的机器列表。

但是,当我尝试从这些网络获取文件夹时,只有在不需要对机器进行身份验证时它才有效。如果需要认证,方法returns 0x80004005 (E_FAIL).

Windows 文件资源管理器会提示这些计算机“输入网络凭据”。如何从我的 WPF 程序中显示相同的提示并根据用户的凭据继续?

在大多数ShellAPI中,可以传递一个HWND句柄,但它是可选的,也是一种表示“禁用UI”的方式。

IShellFolder::EnumObjects method

就是这种情况
HRESULT EnumObjects(HWND hwnd, SHCONTF grfFlags, IEnumIDList **ppenumIDList);

hwnd参数官方文档:

If user input is required to perform the enumeration, this window handle should be used by the enumeration object as the parent window to take user input. An example would be a dialog box to ask for a password or prompt the user to insert a CD or floppy disk. If hwndOwner is set to NULL, the enumerator should not post any messages, and if user input is required, it should silently fail.