在Windows资源管理器中,如何确定当前是否正在重命名文件?

3
我正在尝试检查 Windows Explorer 视图,以查看文件名是否在输入时被重命名/编辑。我已经安装了一个系统钩子,用于监视特定按键并触发某些事件。操作如下:
- 如果键盘钩子检测到按键,则发送消息到另一个线程并继续处理其他系统钩子。 - 其他线程接收消息,并检查是否有活动的资源管理器窗口,并获取 IFolderView2 接口。 - 调用 IFolderView2::GetFocusedItem() 获取文件夹视图中的焦点项目。 - 使用 IFolderView2::GetSelectionState() 检查焦点项目是否正在被重命名或处于编辑模式(SVSI_EDIT)- 这是失败的部分。 - 如果未处于重命名模式,则执行对该文件的操作。
我已经在 Windows 7 上尝试过所有方法,但 SVSI_EDIT 标志(具体为0x00000002)从不返回。无论文件是否正在被重命名,它始终为 SVSI_FOCUSED | SVSI_SELECT。使用 IFolderView::SelectItem 可以设置 SVSI_EDIT 标志并将其置于重命名模式,但我想确定它是否已处于此模式。
目前仅在 Windows 7 x64 上进行了测试。是否有人知道一种方法来确定资源管理器/IFolderView 等当前是否处于重命名文件状态?如果不能通过这些接口实现,请提供任何可行的方法。

+1 你的研究做得非常非常好。向你致敬。 - Blue Ice
我本来不想的。我猜没人知道这个问题..? - mysticcoder
不好意思,我不会。不过,如果你遇到困难,可以尝试在其他论坛上寻求帮助。 - Blue Ice
有没有哪些论坛可以提供一些线索呢?我更多的是阅读它们,而不是发布帖子,正如你所看到的,这是我在SO上的第一篇帖子,因为这个问题似乎无法解决... 为了后人的参考,跟进可能会很有用(感谢所有的意见!) - mysticcoder
抱歉,我不知道。我真的不常使用论坛来解决这类问题,所以我建议你尝试找一个活跃的论坛。然而,为了后人的利益,跟进并记录下来也是个不错的主意,这样将来其他人也能从你的解决方案中受益。 - Blue Ice
1个回答

2
如果一个文件正在重命名模式下,Windows 将在该项的位置创建一个“EDIT”控件。因此,事情变得清晰明了:
  1. 查找当前焦点控件。
  2. 获取控件的 CLASS。
  3. 检查其 CLASS 是否为 EDIT。
CodeProject 上有一个很好的示例,介绍如何查找焦点控件。要获取该控件的 CLASS 名称,请使用 GetClassName API。

您,先生,是一位冠军。它完美地工作,尽管GetClassName()在Win10上返回“Edit”,但谁知道它在其他操作系统上是什么,因此需要进行不区分大小写的比较。我不知道您可以以这种方式捕获另一个进程的焦点窗口。 - mysticcoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接