如何获得SunAwtFrame窗口处理程序

时间:2015-07-29 21:59:25

标签: java c# findwindow

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

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

这是firefox窗口,其中运行Java: enter image description here

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

[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处理程序。

2 个答案:

答案 0 :(得分:0)

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

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

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

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

解决方案(可能):您可以使用Java Framework访问和管理FireFox中该窗口的属性。 谷歌吧。

答案 1 :(得分:0)

FindWindow方法对我不起作用,但是对我有用。

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

 if (pList.Count()>0)
 {
    handle = pList[0].MainWindowHandle;
 }