【问题标题】:Can windows 7 and 8 common dialogs be hookedwindows 7 和 8 的常用对话框可以挂机吗
【发布时间】:2013-07-30 15:44:16
【问题描述】:

我正在尝试用我自己的自定义对话框替换所有 Windows 通用(打开/保存)文件对话框调用。从我目前阅读的内容来看,我可以通过编写自己的方法或使用诸如 detours 或 easyhook 之类的库来对调用进行挂钩。但是最近有人告诉我,这种方法只能在Vista之前使用,因为会话架构发生了变化,在Win 7/8中不可能进行这种切换。现在,我不是一个喜欢“不可能”这个词的人:) 所以如果你对这件事有任何建议,任何建议,请告诉我,我会感谢你的好意。

对于我要做什么,我的应用程序将由用户运行,它将驻留在托盘中,当用户从任何应用程序调用打开/保存对话框时,它应该将默认的公共对话框替换为自定义对话。

【问题讨论】:

  • 请将此设为可选。至少有一些用户会更喜欢 Windows 提供的版本。
  • 你以前做过hook吗?
  • 不支持。不是说不可能,只是不支持。你也进入了应用程序兼容的危险世界,因为应用程序对常见的对话框做了各种疯狂的事情。例如,所有的 CDM 消息、CDN 通知、自定义模板……
  • 哦,天哪……与挂钩常见对话框相比,替换资源管理器可能是微不足道的。
  • @BenVoigt:感谢您的意见。不,我没有上钩的经验。

标签: c++ winapi windows-7 hook filedialog


【解决方案1】:

较新的样式 Common Item dialogs 被实现为标准 COM 对象,因此您只需实现自己的 DLL 即可公开相同的 COM 接口(@98​​7654322@、IFileSaveDialog 等),然后覆盖注册表中的默认注册用你自己的。这样,每个使用对话框的应用程序都将加载您的 DLL,而不是 Microsoft 的。

【讨论】:

  • 请问这种方法是否有任何延迟并发症。比如用户安装更新程序或操作系统有更新时?
  • 应用程序不会对其产生任何影响,但操作系统更新/修复可能会恢复默认注册。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多