首页 > 解决方案 > 如何在 Windows 10 中打开“输入网络凭据”

问题描述

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

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

....

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

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

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

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

标签: c#.netshellwinapiwindows-shell

解决方案


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

IShellFolder::EnumObjects 方法就是这种情况

HRESULT EnumObjects(HWND hwnd, SHCONTF grfFlags, IEnumIDList **ppenumIDList);

hwnd 参数官方文档:

如果需要用户输入来执行枚举,枚举对象应该使用这个窗口句柄作为父窗口来接受用户输入。例如,要求输入密码或提示用户插入 CD 或软盘的对话框。如果 hwndOwner 设置为 NULL,则枚举器不应该发布任何消息,如果需要用户输入,它应该静默失败。


推荐阅读