Winapi Windows资源管理器上下文菜单项ID

Winapi Windows资源管理器上下文菜单项ID,winapi,contextmenu,windows-explorer,Winapi,Contextmenu,Windows Explorer,使用::GetMenuItemInfo()我看到在我的Win 8.1 x 64上,“删除”菜单项ID等于小数点18,“属性”ID等于20。它们在任何窗口上都是相同的吗?它们在SDK头中的何处定义 更新 我想使用TrackPopupMenu来显示应用程序中某些文件的系统菜单,但我想覆盖某些项,如“删除”。如何检查项目#I(其中I是从0到项目计数的索引)是否为“删除”项目,以将其id更改为我自己的,并在以后处理?如果ID是常量,这看起来很简单,但除此之外…不要使用菜单项ID来识别命令。即使在同一台电

使用
::GetMenuItemInfo()
我看到在我的Win 8.1 x 64上,“删除”菜单项ID等于小数点18,“属性”ID等于20。它们在任何窗口上都是相同的吗?它们在SDK头中的何处定义

更新


我想使用
TrackPopupMenu
来显示应用程序中某些文件的系统菜单,但我想覆盖某些项,如“删除”。如何检查项目#I(其中I是从0到项目计数的索引)是否为“删除”项目,以将其id更改为我自己的,并在以后处理?如果ID是常量,这看起来很简单,但除此之外…

不要使用菜单项ID来识别命令。即使在同一台电脑上,命令ID在不同时间也可能不同。如果要覆盖任何菜单项,必须分析命令的动词而不是ID。动词总是相同的


当您拥有对象枚举菜单项的IContextMenu并使用GCS_VERBA或GCS_VERBW参数调用IContextMenu.GetCommandString函数时。当GetCommandString返回“delete”字符串时,在此位置有delete命令。当GetCommandString返回“properties”字符串时-在这个位置有properties命令。

不要使用菜单项ID来标识命令。即使在同一台电脑上,命令ID在不同时间也可能不同。如果要覆盖任何菜单项,必须分析命令的动词而不是ID。动词总是相同的


当您拥有对象枚举菜单项的IContextMenu并使用GCS_VERBA或GCS_VERBW参数调用IContextMenu.GetCommandString函数时。当GetCommandString返回“delete”字符串时,在此位置有delete命令。当GetCommandString返回“properties”字符串时——在这个位置上有properties命令。

我看不出有任何理由可以在任何地方定义它们,或者期望它们是稳定的。你不需要知道这些值。我如何在我的应用程序中跟踪系统上下文菜单,只覆盖其中的两个?我看过一个这样的节目,那是什么意思?超越其中两个?不管怎么说,你没有要求跟踪任何东西,或者覆盖任何东西。您询问了菜单项ID。项目中的2项:'删除'和'属性'(如我在问题中所写))@DavidHeffernan抱歉,我写得很匆忙。我已经更新了这个问题,希望它现在更正确。谢谢你指出它的低质量。我不明白为什么它们会被定义在任何地方,或者被期望是稳定的。你不需要知道这些值。我如何在我的应用程序中跟踪系统上下文菜单,只覆盖其中的两个?我看过一个这样的节目,那是什么意思?超越其中两个?不管怎么说,你没有要求跟踪任何东西,或者覆盖任何东西。您询问了菜单项ID。项目中的2项:'删除'和'属性'(如我在问题中所写))@DavidHeffernan抱歉,我写得很匆忙。我已经更新了这个问题,希望它现在更正确。谢谢你给我指出它的低质量。看看经典的Shell源代码-它的作者也这么做了。看看经典的Shell源代码-它的作者也这么做了。