我正在尝试将键盘事件模拟到在Firefox上运行的Java应用程序,使用Spy ++检查我可以看到键盘事件已发送到处理程序ID X,我也使用Spy ++检查它并且它返回它是一个名为“SunAwtFrame”的“窗口”,但我根本无法得到这个窗口处理程序,我尝试了很多东西,比如FindWindow(),检查过程模块等。
有人知道是否可以得到它?
我尝试的最后一个编码是:
[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处理程序。
答案 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;
}