检测按钮单击外来形式

时间:2014-08-01 13:02:25

标签: c# winapi hook

我可以在异物窗口中检测到按钮点击吗? 我尝试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);
        }

1 个答案:

答案 0 :(得分:1)

您无法从另一个进程中的窗口接收消息。

要执行此操作,您需要将代码注入此过程。最简单的方法是使用WinAPI hooks。这个钩子需要一个单独的DLL。注册一个钩子时,这个DLL将被注入到所有正在运行的进程中。在该DLL中,您需要通过某种进程间通信(共享内存,管道,网络或其他内容)来监听窗口消息,过滤它们并将有趣的消息发送到您的应用程序。