3

我正在尝试将键盘事件模拟到在 Firefox 上运行的 Java 应用程序,使用 Spy++ 检查我可以看到键盘事件已发送到处理程序 ID X,我也使用 Spy++ 检查它并返回它是一个“窗口” 称为“SunAwtFrame”,但我根本无法获得这个窗口处理程序,我尝试了很多东西,比如 FindWindow()、检查进程模块等。

有人知道是否有可能得到它?

这是 Firefox 窗口,其中运行着 Java: 在此处输入图像描述

我尝试的最后一个编码是:

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

IntPtr hWnd = (IntPtr)FindWindow("SunAwtFrame", "TibiaME - Web Client - XHTML - Mozilla Firefox");

它返回 0,如果我删除第一个参数,它会获取 Firefox 处理程序。

4

2 回答 2

1

不幸的是,你不能用 Windows API 做到这一点!

在这种情况下,您可以使用 Windows 操作系统 API 仅获取顶级窗口的句柄(在这种情况下为 Firefox 窗口 - 使用 Spy++)。

当每个控件需要与 Windows 操作系统通信时,所有企业库(如 Java、Qt 和许多其他框架)都会公开控件句柄和其他属性。这种行为只能从框架内向外暴露;否则,您将无法访问该控件。

(ie) 当我们在 Java 中创建一个带有四个控件的窗口并在 Windows 操作系统中运行该应用程序时;我们只能访问由 Java 管理的顶级窗口和其他控件,并且不会将它们的属性暴露给 Windows 操作系统。

解决方案(可能):您可以使用 Java 框架在 FireFox 中访问和管理该窗口的属性。去谷歌上查询。

于 2015-11-04T23:29:49.047 回答
0

FindWindow 方法对我不起作用,但确实如此。

 Process[] pList = Process.GetProcessesByName("appName");

 if (pList.Count()>0)
 {
    handle = pList[0].MainWindowHandle;
 }
于 2020-02-11T22:43:18.503 回答