在Windows 7 x64的shell扩展dll中不调用一个InvokeCommand

我的shell扩展代码在Windows 7下工作良好。但是,在Windows服务器2008×64或Windows 7×64中,当所选文件的数量超过16个时,不会调用调用的命令函数。

当所选文件的数量低于17时,一切正常; 调用序列: QueryContextMenu -> Initialize -> GetCommandString -> InvokeCommand

但是,当所选文件的数量超过16个时,InvokeCommand不会被调用; 调用序列:

  Initialize(the returned value of DragQueryFile is 16) -> QueryContextMenu -> GetCommandString(the returned value of DragQueryFile is 16) -> Initialize(the returned value of DragQueryFile is the selected file count) -> QueryContextMenu -> Initialize(the returned value of DragQueryFile is only one) -> not call InvokeCommand 

怎么了? 请帮帮我!!

我有同样的问题! 当您在QueryContextMenu中返回错误的结果时,InvokeCommand从不会被调用。 这意味着你必须返回最后的项目ID加1(这将是下一个命令ID)

这意味着,如果你有方法

 public int QueryContextMenu( IntPtr hMenu, uint iMenu, uint idCmdFirst, uint idCmdLast, uint uFlags) 

你得到idCmdFirst = 38080作为输入参数。 然后你添加1个菜单项。 idCmdFirst增加到38081.如果你添加5个项目,你必须为每个项目增加它。

在这个方法的最后你会返回下面的内容:

  return WinError.MAKE_HRESULT(WinError.SEVERITY_SUCCESS, 0, (idCmdActual - idCmdFirst) + 1); 

这将是(38081 – 38080)+1。 然后InvokeCommand被调用!