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