我试图重写user32.dll中外部函数的行为,因为我不希望某个窗口出现。
我要做的是:

    [DllImport("user32.dll")]
    public extern override IntPtr GetSystemMenu(IntPtr hMenu, bool bRevert)
    {
        return new IntPtr();
    }

但这不起作用,因为我犯了以下错误:
…找不到可重写的合适方法

…不能是extern并声明body
有什么方法可以模拟我正在做的事情吗?

最佳答案

如果调用GetSystemMenu的源代码在您的控制范围内,那么您可以提供另一个GetSystemMenu选项,该选项在大多数情况下委托给真正的源代码,但在您的特殊情况下会做一些不同的事情。
如果调用GetSystemMenu的源代码超出您的控制范围,则需要使用钩子。在这种情况下,您需要修改user32.GetSystemMenu的行为方式,这完全超出了您的代码库。

09-28 00:41