首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.net winapi .net消息

.net winapi .net消息
EN

Stack Overflow用户
提问于 2010-11-25 18:58:16
回答 2查看 526关注 0票数 0

我知道这是一个很流行的问题。不管怎么说。我想在其他进程的窗体上点击按钮,我不能通过spy++获得按钮的句柄,所以我将模拟鼠标点击。我得到的是:

这是点的全局坐标,我想单击:

代码语言:javascript
运行
复制
doubleclickcoords = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));

在那之后,我得到了表单的坐标,让它是"mspaint",并找到点的本地坐标,并通过postmessage尝试发送"click",但什么也没有发生。我错过了什么??:

代码语言:javascript
运行
复制
public static void SendDoubleMouseClick()
        {
            IntPtr iHandle = GetWnd("mspaint");
            Rectangle myRect = new Rectangle();
            RECT rct;
            if (!GetWindowRect(iHandle, out rct))
            {
                MessageBox.Show("ERROR");
            }
            else
            {
                myRect.X = rct.Left;
                myRect.Y = rct.Top;
                myRect.Width = rct.Right - rct.Left;
                myRect.Height = rct.Bottom - rct.Top;
            }
            PostMessage(iHandle, 0x0201, 0, new IntPtr((doubleclickcoords.pt.y - myRect.Y) * 0x10000 + (doubleclickcoords.pt.x - myRect.X)));
            PostMessage(iHandle, 0x0202, 0, new IntPtr((doubleclickcoords.pt.y - myRect.Y) * 0x10000 + (doubleclickcoords.pt.x - myRect.X)));

        }

编辑:语言为c#,通过p/invoke调用winapi

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-25 19:13:28

如果你想自动化另一个应用程序,我建议你看一下自动化API,它是为这个特定目的而设计的,而不是试图用post消息来攻击Windows。大多数情况下,出于安全原因,通过不同进程的PostMessage将不起作用。这在Windows Vista、7和UAC (用户帐户设置)中更是如此。

这是一篇很好的文章,http://msdn.microsoft.com/en-us/magazine/cc163465.aspx

票数 1
EN

Stack Overflow用户

发布于 2010-11-25 20:18:19

如果它只是一个小实用程序,而不是大型应用程序的一部分,您可以考虑使用AutoIt -一种专门设计用于控制其他进程的脚本语言。它还能够生成独立的可执行文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4276251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档