0

我正在使用 C#(.NET 4.0) 和 C++ 编写有关全局挂钩的应用程序。

在 64 位上无法接收 32 位应用程序的挂钩。所以我将 32 位应用程序(Hooker.exe)作为另一个进程启动并与主应用程序通信。

在应用程序关闭时,它必须释放一个已创建的钩子。但是,Hooker.exe 的进程并没有被这个程序完成。即使这样,如果使用 Process.Kill() ,它也不会执行释放处理。

主文件

static void Main()
{
    Process p = Process.Start(Path.GetDirectoryName(Application.ExecutablePath) + "\\" + "Hooker.exe");
    Application.Run(new MainForm());
    p.Close();
}

胡克.cs

static void Main()
{
    // call hook function from C++ DLL
    Debug.WriteLine("start hook");

    Application.Run();

    // call unhook function from C++ DLL
    Debug.WriteLine("release hook");
}

有什么好的方法可以解决这些问题吗?

4

1 回答 1

0

直接的方式。我建议在线程中监视您的进程:获取循环中的进程列表并检查您的进程是否正在运行。如果没有,则释放钩子。

或者,使用跨处理通信,如此处所述

于 2013-10-04T08:49:54.147 回答