我可以在异物窗口中检测到按钮点击吗?
我尝试GetMessage但我的程序冻结了,我什么也没得到。
我已经知道窗口和按钮手柄了
它陷入了循环
private static void Main(string[] args)
{
IntPtr handle = ReturnHandle("Form1");
IntPtr buttonHandle = ReturnHandleEx(handle, "Login");
Console.Out.WriteLine("handle = {0}", handle.ToString("x2"));
Console.Out.WriteLine("buttonHandle = {0}", buttonHandle.ToString("x2"));
MSG msg;
sbyte ret;
while ((ret = GetMessage(out msg, buttonHandle, 0, 0)) != -1)
{
if (ret == -1)
{
//-1 indicates an error
}
else
{
TranslateMessage(ref msg);
DispatchMessage(ref msg);
}
Console.Out.WriteLine("msg = {0}", msg);
}
}
private static IntPtr ReturnHandle(string lpWindowName)
{
return FindWindow(null, lpWindowName);
}
private static IntPtr ReturnHandleEx(IntPtr parentHandle, string windowTitle)
{
return FindWindowEx(parentHandle, new IntPtr(), null, windowTitle);
}
答案 0 :(得分:1)
您无法从另一个进程中的窗口接收消息。
要执行此操作,您需要将代码注入此过程。最简单的方法是使用WinAPI hooks。这个钩子需要一个单独的DLL。注册一个钩子时,这个DLL将被注入到所有正在运行的进程中。在该DLL中,您需要通过某种进程间通信(共享内存,管道,网络或其他内容)来监听窗口消息,过滤它们并将有趣的消息发送到您的应用程序。