c# - 如何在 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 程序中显示相同的提示并根据用户的凭据继续?
解决方案
在大多数 Shell API 中,可以传递一个 HWND 句柄,但它是可选的,也是一种表示“禁用 UI”的方式。
IShellFolder::EnumObjects 方法就是这种情况
HRESULT EnumObjects(HWND hwnd, SHCONTF grfFlags, IEnumIDList **ppenumIDList);
hwnd 参数官方文档:
如果需要用户输入来执行枚举,枚举对象应该使用这个窗口句柄作为父窗口来接受用户输入。例如,要求输入密码或提示用户插入 CD 或软盘的对话框。如果 hwndOwner 设置为 NULL,则枚举器不应该发布任何消息,如果需要用户输入,它应该静默失败。
推荐阅读
- javascript - Service Worker 的中止控制器
- extjs - 面板宽度不适合整个空间
- java - ExoPlayer 从自定义数据源访问值
- sql - 当一列具有唯一值时如何删除重复记录
- npm - 如何修复 npm 错误和警告?'npm audit fix' 有效吗?
- java - 简单 XML 框架:回退到未知枚举值的默认值
- discord.js - Discord.js 建议通道代码不起作用
- rest - 如何通过服务名访问rest api(部署在k8集群中)
- list - rbind 具有不同列名的多个 csv 文件 R
- python - 如何在 Python 中生成连接数据图?