C# 从其他windows应用程序捕获事件

C# 从其他windows应用程序捕获事件,c#,windows,C#,Windows,我有一个不是我自己创建的第三方应用程序。我需要创建一个应用程序,它能够监听按钮点击并从该应用程序中的表中读取数据。我相信第三方的申请是用C#写的,但我不确定。是否有办法知道何时按下UI按钮并从应用程序中获取数据?我不介意解决方案必须使用哪种编程语言编写,只要它能够完成上述任务。您可以使用一些dll(如user32.dll)从其他应用程序获取数据。 查找窗口的父句柄: [DllImport("user32.dll", SetLastError = true)] static extern IntP

我有一个不是我自己创建的第三方应用程序。我需要创建一个应用程序,它能够监听按钮点击并从该应用程序中的表中读取数据。我相信第三方的申请是用C#写的,但我不确定。是否有办法知道何时按下UI按钮并从应用程序中获取数据?我不介意解决方案必须使用哪种编程语言编写,只要它能够完成上述任务。

您可以使用一些dll(如user32.dll)从其他应用程序获取数据。 查找窗口的父句柄:

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

public static IntPtr FindWindow(string windowName)
{
    var hWnd = FindWindow(windowName, null); 
    return hWnd;
}
然后,找到子窗口的句柄

[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className,  string windowTitle);

private IntPtr FindSomeElement(IntPtr parent)
{
    IntPtr childHandle;

childHandle = FindWindowEx(
    parent,    
    IntPtr.Zero,    
    "WindowsForms10.EDIT.app21", 
    IntPtr.Zero);   
return childHandle;}
并从中获取文本:

private static string GetText(IntPtr childHandle)
{
    const uint WM_GETTEXTLENGTH = 0x000E;
    const uint WM_GETTEXT = 0x000D;

    var length = (int)SendMessage(handle, WM_GETTEXTLENGTH, IntPtr.Zero, null);
    var sb = new StringBuilder(length + 1);
    SendMessage(handle, WM_GETTEXT, (IntPtr)sb.Capacity, sb);
    return sb.ToString();
}
//我没有测试这段代码,只是给出了一个想法。
有关更多信息,请访问www.pinvoke.net/default.aspx/。你可以找到很多关于user32.dll的信息,你可以访问其他应用程序源代码吗?不,它是从internet下载的,我正在尝试创建一种界面,以更清晰地显示该应用程序中的数据,在第三方软件中按下按钮时执行操作。SPY++还可以帮助您获取元素类名或主窗口类名。这是用什么语言编写的?@JPadley,是c#您能提供任何教程的链接吗?@JPadley以及谷歌上的更多内容。