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

我正在尝试检查Windows资源pipe理器视图,以查看当键入时当前正在重命名/编辑文件名称。

我有一个系统挂钩安装,监视键盘的特定击键和触发某些事件。 这是以这种方式完成的:

  • 如果键盘钩子看到按键被按下,则会向另一个线程发出消息并继续处理其他系统钩子。
  • 其他线程接收消息并检查是否有一个资源pipe理器窗口处于活动状态,并获取到IFolderView2的接口。
  • 调用IFolderView2 :: GetFocusedItem()获取文件夹视图中的焦点项目。
  • 使用IFolderView2 :: GetSelectionState()检查焦点项是否正在重命名/处于编辑模式(SVSI_EDIT) – 这是失败的部分
  • 如果不处于重命名模式,则对该文件执行操作。

我已经尝试了Windows 7上的所有内容,但SVSI_EDIT标志(0x00000002具体)永远不会返回。 无论文件是否被重命名,它总是(SVSI_FOCUSED | SVSI_SELECT)。 设置与IFolderView :: SelectItem标志的SVSI_EDIT标志把它放到重命名模式,但我想确定它是否已经在这种模式。

这只在Windows 7 x64上testing过。

有没有人知道一种方式来确定资源pipe理器/ IFolderView等目前在重命名文件状态? 如果通过这些接口不可能,任何偷偷摸摸的方法都行。

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

  1. 找到当前的重点控制。
  2. 获取控件的CLASS。
  3. 检查它是否是一个编辑。

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