我的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被调用!