我正在使用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,则枚举器不应发布任何消息,如果需要用户输入,它应该会无声地失败。