You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过官方API获取Windows Shell文件复制/移动对话框的运行状态?

解决方案

1. 利用IFileOperationProgressSink接口(官方原生方案)

这是Windows Shell提供的标准API,用于追踪文件操作的生命周期,无需直接操作Explorer进程:

  • 实现IFileOperationProgressSink接口,其中的Pause()和Resume()回调会在操作暂停/恢复时触发,可在这些方法内记录当前状态。
  • 在通过IFileOperation发起复制/移动操作前,调用Advise()注册你的进度接收器,操作结束后调用Unadvise()注销。
  • 注意:此方案适用于你自己发起的文件操作,无法监控用户手动在Explorer中触发的操作。

2. 优化UI Automation的状态检测

针对用户手动触发的Explorer操作,重新检查UI Automation控件属性即可获取状态:

  • 暂停按钮的ToggleState属性是有效的,通过AutomationElement.GetCurrentPropertyValue(TogglePattern.ToggleStateProperty)获取:
    • ToggleState.On:按钮显示为“恢复”,说明操作已暂停;
    • ToggleState.Off:按钮显示为“暂停”,说明操作正在运行。
  • 辅助判断:可检查对话框内进度条的IsEnabled属性,暂停时进度条会变为禁用状态(false)。

3. Windows API Hook(进阶方案)

若上述方案不满足需求,可使用SetWindowsHookEx挂钩Shell相关消息,监控文件操作状态。但此方法属于底层操作,需注意系统兼容性,严格遵循Windows API规范。

内容的提问来源于stack exchange,提问作者Martin Walter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 02:04:59