我的shell扩展代码在Windows 7下运行良好。 但是,在Windows Server 2008x64或Windows 7x64中,当选定文件的数量超过16时,不会调用调用的命令函数。
当所选文件的数量低于17时,一切正常;
呼叫序列:QueryContextMenu -> Initialize -> GetCommandString -> InvokeCommand
但是,当Selected Files的数量超过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
怎么了? 请帮帮我!!
答案 0 :(得分:1)
我遇到了同样的问题!在QueryContextMenu中返回错误的结果时,从不调用InvokeCommand。这意味着你必须返回最后一个项目ID加一个(这将是下一个命令ID)
这意味着,例如,如果你有方法
public int QueryContextMenu(
IntPtr hMenu,
uint iMenu,
uint idCmdFirst,
uint idCmdLast,
uint uFlags)
你得到idCmdFirst = 38080作为输入参数。然后你添加1 menuitem。 idCmdFirst增加到38081.如果你添加5个项目,你必须为每个项目增加它。
在此方法结束时,您将返回以下内容:
return WinError.MAKE_HRESULT(WinError.SEVERITY_SUCCESS, 0, (idCmdActual - idCmdFirst) + 1);
这将是(38081 - 38080)+1。 然后调用InvokeCommand!