【问题标题】:Capture events from other windows applications从其他 Windows 应用程序捕获事件
【发布时间】:2017-09-04 04:08:55
【问题描述】:

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

【问题讨论】:

  • 你能访问其他应用程序的源代码吗?
  • 不,它是从互联网上下载的,我正在尝试创建一种界面,可以更清晰地显示该应用程序中的数据,并在第三方应用程序中按下按钮时执行操作。

标签: c# windows


【解决方案1】:

您可以使用一些像 user32.dll 这样的 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

【讨论】:

  • SPY++ 也可以帮助你获取元素类名或主窗口类名。
  • 这是用什么语言写的?
  • @JPadley,它是 c#
  • 你能提供任何教程的链接吗?
  • @JPadley codeproject.com/Tips/825946/… 以及更多您可以在 google 中找到的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多