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

确定当前是否在Windows资源管理器中重命名文件,windows,shell,rename,explorer,Windows,Shell,Rename,Explorer,我正在尝试检查Windows资源管理器视图,以查看键入时是否正在重命名/编辑文件名 我安装了一个系统钩子,可以监视键盘上的特定击键并触发某些事件。这是通过以下方式完成的: 如果键盘挂钩看到按键被按下,它会向另一个线程发送消息,并继续处理其他系统挂钩 另一个线程接收消息并检查资源管理器窗口是否处于活动状态,并获取IFolderView2的接口 调用IFolderView2::GetFocusedItem()以获取文件夹视图中的焦点项目 使用IFoldServiceW2::GetSelection

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

我安装了一个系统钩子,可以监视键盘上的特定击键并触发某些事件。这是通过以下方式完成的:

  • 如果键盘挂钩看到按键被按下,它会向另一个线程发送消息,并继续处理其他系统挂钩
  • 另一个线程接收消息并检查资源管理器窗口是否处于活动状态,并获取IFolderView2的接口
  • 调用IFolderView2::GetFocusedItem()以获取文件夹视图中的焦点项目
  • 使用IFoldServiceW2::GetSelectionState()-检查聚焦项是否正在重命名/是否处于编辑模式(SVSI_edit)这是失败的部分
  • 如果未处于重命名模式,则对该文件执行操作
我已经在Windows 7上尝试了所有操作,但是SVSI_编辑标志(具体为0x00000002)从未返回。无论文件是否被重命名,它总是(SVSI_聚焦| SVSI_选择)。设置SVSI_EDIT标志与IFolderView::SelectItem一起使用会将其置于重命名模式,但我想确定它是否已经处于此模式

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


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

如果一个文件处于重命名模式,Windows将在该项目的位置创建一个编辑控件。事情就这么简单了:

  • 查找当前聚焦的控件
  • 获取控件的类
  • 检查它的类是否为编辑类

  • 上有一个关于如何找到焦点控件的好例子。要获得该控件的类名,请使用API。

    +1您的研究非常非常好。谢谢你。我宁愿不去。我想没有人对这件事有线索…?我没有,对不起。但是,如果你有困难,你可以尝试向其他论坛寻求帮助。当然,有关于哪些论坛的提示吗?我更多的是一个读者,而不是一张海报,你可以看到这是我的第一次,所以这似乎是牢不可破的原因。。。这可能对后人有用(感谢所有的意见!)对不起,我不知道。我真的不使用论坛来做这类事情,所以我会尽量找一个繁忙的论坛。然而,为子孙后代坚持到底并不是一个坏主意,因为这样将来其他人就可以从你的解决方案中受益。先生,你是一个冠军。虽然GetClassName()在Win10上返回“Edit”,但谁知道它在其他操作系统上是什么,所以需要进行不区分大小写的比较。我不知道您可以用这种方式从另一个进程捕获焦点窗口。