0

我需要获取当前处于前台的屏幕菜单,然后获取其菜单项并运行其菜单项之一。我们可以通过编程方式做到这一点吗?我可以使用以下代码获取 ApplicationDescriptor 及其模块名称:

int moduleHandle = CodeModuleManager.getModuleHandle("module name");
ApplicationDescriptor[] apDesArr = CodeModuleManager.getApplicationDescriptors(moduleHandle); 

ApplicationDecriptor  apDes = apDesArr[0];

但是接下来我该怎么办。请帮忙。提前致谢。

更新:

我通过以下代码获取屏幕:

private static void runMenuItem(String menuItemText) {

  Screen screen = Ui.getUiEngine().getActiveScreen();

  Menu menu = screen.getMenu(0);

  for (int i = 0, cnt = menu.getSize(); i < cnt; i++)

    if(menu.getItem(i).toString().equalsIgnoreCase(menuItemText))

            menu.getItem(i).run();
}

但是这段代码的第一行弹出了一个异常:No Application Instance。我该如何解决这个问题?

4

1 回答 1

1

你目前的方法行不通。您无法访问应用程序上下文之外的其他屏幕。

您仍然可以尝试使用事件注入。一个经过良好调整的键注入黑客可以完成这项工作(您可以注入一个菜单键按下将其打开,注入向下滚动到所需位置,最后注入一个拨轮单击以选择选项)。问题是这种方法不够可靠。例如,许多应用程序使用事件注入以编程方式关闭相机应用程序,但在 OS 6.0 上,有些模型无法使用。如果目标应用程序的新版本发布并且菜单项位置发生更改,则将无法正常工作。而且你有时需要Thread.sleep在每个注入的事件之间调用以使其工作,但这非常依赖于设备。

简而言之,您可以在某些模型或操作系统版本上进行实验性破解,但这不是让生产代码进入的东西。

于 2012-12-03T12:21:40.777 回答