gpt4 book ai didi

windows - 确定当前是否在 Windows 资源管理器中重命名文件

转载 作者:可可西里 更新时间:2023-11-01 09:28:58 27 4
gpt4 key购买 nike

我正在尝试检查 Windows 资源管理器 View 以查看当前是否在键入时重命名/编辑文件名。

我安装了一个系统 Hook ,用于监视键盘的特定击键并触发特定事件。这是以这种方式完成的:

  • 如果键盘 Hook 发现按下的键,它会向另一个线程发送消息并继续处理其他系统 Hook 。
  • 其他线程接收消息并检查资源管理器窗口是否处于事件状态并获取 IFolderView2 的接口(interface)。
  • 调用 IFolderView2::GetFocusedItem() 以获取文件夹 View 中的焦点项目。
  • 使用 IFolderView2::GetSelectionState() 检查焦点项目是否正在重命名/是否处于编辑模式 (SVSI_EDIT) - 这是失败的部分
  • 如果未处于重命名模式,则对该文件执行操作。

我在 Windows 7 上尝试了所有方法,但从未返回 SVSI_EDIT 标志(特别是 0x00000002)。它总是 (SVSI_FOCUSED | SVSI_SELECT) 无论文件是否被重命名。设置 SVSI_EDIT 标志与 IFolderView::SelectItem 一起使用标志将其置于重命名模式,但我想确定它是否已经处于这种模式。

到目前为止,这仅在 Windows 7 x64 上进行了测试。

有谁知道确定资源管理器/IFolderView 等当前是否处于重命名文件状态的方法?如果无法通过这些接口(interface),任何偷偷摸摸的方法都可以。

最佳答案

如果一个文件处于重命名模式,Windows 将在该项目的位置创建一个 EDIT 控件。所以事情变得简单了:

  1. 找到当前获得焦点的控件。
  2. 获取控件的 CLASS。
  3. 检查它的 CLASS 是否是一个 EDIT。

关于 CodeProject有一个关于如何找到焦点控件的很好的例子。要获取该控件的类名称,请使用 GetClassName API。

关于windows - 确定当前是否在 Windows 资源管理器中重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24237096/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com