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

时间:2014-01-03 10:26:20

标签: windows shell

我的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

怎么了? 请帮帮我!!

1 个答案:

答案 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!