1

我想用我的 java 应用程序调用粘贴操作。不使用机器人这可能吗?

例如,应用程序会经常调用粘贴操作,所以当我在记事本中书写时,我会看到剪贴板的内容。

JAVA APP                       Notepad
clipboard.paste()  -------->   clipboardContents
4

1 回答 1

2

听起来好像您正在尝试使用 Java 交互或部分驱动另一个应用程序(例如 Windows NotePad)并粘贴到该应用程序,如果是这样,有几种可能的解决方案,一个是使用 Robot,另一个是使用 Java 进行操作系统调用,尽管这不能直接使用核心 Java 完成,并且需要使用 JNI、JNA 或其他特定于平台的非核心实用程序,例如 AutoIt(如果这是用于 Windows)。

为什么你死心塌地不使用机器人?你能更详细地解释你的需求吗?

编辑
关于您的评论:

我想探索机器人的替代品,因为我的客户不合理地拒绝机器人。

由于这似乎适用于 Windows 平台,因此您可能会考虑探索 Windows API 和您尝试驱动的任何非 Java 程序的 API(如果存在),然后使用 JNA 与之交互。Windows User32.dll 将允许您获取您尝试驱动的应用程序的窗口句柄 (hWnd),这可能是此工作所必需的。

但是,如果没有您提供有关您的问题的更具体信息,很难给出更具体的建议。

编辑 2
关于您的评论:

我希望该应用程序独立于平台。

那么,机器人就会浮现在脑海中。您可能想与您的客户坐下来,了解他们非常不喜欢 Robot 的哪些方面,然后温和地解释说它可能是实现独立于平台的解决方案的最佳途径。

是否有 JNA 和/或 JNI 的示例?我也不熟悉。

是的,在这个网站和其他网站上有很多例子,谷歌会帮助你找到更多。JNA 使用起来更容易一些,因为它不需要您创建 C 桥接程序,但它可能比 JNI 慢一点,并且不能直接使用 C++ 代码(据我所知)。

编辑 3 关于您的评论:

我有一个串行端口侦听器(java 应用程序)。我需要将其内容提供到网络浏览器上。剪贴板似乎是一种方法。

这就是为什么提供问题的上下文而不是您认为的代码解决方案应该是什么对您来说如此重要的原因。

在应用程序之间进行通信并不是一件容易的事,而且 Java 通常不是最好的工具,因为它被设计为尽可能与平台无关,它不提供允许与低级 OS 功能轻松集成的工具. 我不知道解决您的问题的最佳方法,但我的直觉告诉我,使用剪贴板可能不是要走的路。很大程度上可能取决于您正在谈论的网络浏览器,它是否具有某种允许与其他程序交互的 API,我对此知之甚少。还有你的程序在哪里?在用户的计算机上?您是否考虑过使用某种类型的 Java Web 浏览器库,创建自己的专用 Web 浏览器程序,并直接从您的串行端口侦听器获取数据(同样,我自己没有这样做,

我不明白桥接到 C 程序对我有什么帮助。

我不是在建议这个。仅当您使用 JNI 时才需要这样做,我避免这样做,因为 JNA 更容易(至少对我而言)。

于 2012-06-19T13:45:00.330 回答