gpt4 book ai didi

C# SetWinEventHook 失败(返回 0)

转载 作者:太空狗 更新时间:2023-10-30 00:20:26 24 4
gpt4 key购买 nike

对于我正在制作的应用程序,我想拦截来自外部进程的窗口消息(很像 spy++ 的做法)。我发现我可以使用 SetWinEventHook 来做到这一点。这是我的代码。

    class Program
{
internal delegate void WinEventProc(IntPtr hWinEventHook, int iEvent, IntPtr hWnd, int idObject, int idChild, int dwEventThread, int dwmsEventTime);
[DllImport("user32.dll", SetLastError = true)]
internal static extern IntPtr SetWinEventHook(int eventMin, int eventMax, IntPtr hmodWinEventProc, WinEventProc lpfnWinEventProc, int idProcess, int idThread, SetWinEventHookFlags dwflags);
//[DllImport("user32.dll", SetLastError = true)]
internal static extern int UnhookWinEvent(IntPtr hWinEventHook);
internal enum SetWinEventHookFlags
{
WINEVENT_INCONTEXT = 4,
WINEVENT_OUTOFCONTEXT = 0,
WINEVENT_SKIPOWNPROCESS = 2,
WINEVENT_SKIPOWNTHREAD = 1
}
static void Main(string[] args)
{
int threadId = 0x000306D4;
int processId = 0x000306BC;
WinEventProc listener = new WinEventProc(EventCallback);
//setting the window hook and writing the result to the console
Console.WriteLine(SetWinEventHook(1, 0x7fffffff, IntPtr.Zero, listener, processId, threadId, SetWinEventHookFlags.WINEVENT_INCONTEXT).ToString());
Console.WriteLine("done");
Console.ReadKey();
}
private static void EventCallback(IntPtr hWinEventHook, int iEvent, IntPtr hWnd, int idObject, int idChild, int dwEventThread, int dwmsEventTime)
{
//callback function, called when message is intercepted
Console.WriteLine(hWnd.ToString());
}
}
}

据我所知,我使用的是正确的 P/Invoke 声明,但是当我运行这段代码时,输​​出是:

0done

如果成功,它应该返回一个 HWINEVENTHOOK 值来标识这个事件 Hook 实例。如果不成功,它返回 0。(至少根据微软的网站)线程和进程似乎都是有效的并且正在运行。

任何人都可以帮助我更接近我的问题所在吗?我认为这一定是一些小问题,或者我只是使用完全错误的方法来做我想做的事情。提前致谢。

最佳答案

根据 msdn

For out-of-context events, the event is delivered on the same thread that called SetWinEventHook.

我在控制台应用程序中尝试了您的示例,正​​如您提到的,没有收到任何事件。但是在 winform 上,该示例有效并且收到了事件。所以,我认为,这是因为控制台应用程序中的单线程执行。

将 SetWinEventHook 调用放入按钮单击事件中,您应该开始在回调中接收事件。

关于C# SetWinEventHook 失败(返回 0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11811106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com