【问题标题】:Can PHP be used to control a GUI application?可以使用 PHP 来控制 GUI 应用程序吗?
【发布时间】:2010-12-10 17:22:00
【问题描述】:

假设我有一个在 Windows 上运行的纯 GUI 应用程序,我想使用 PHP 为它创建一个 Web 界面。甚至可能吗?我知道我可以使用 system() 或 exec() 之类的函数来启动程序,但是我可以对正在运行的 GUI 应用程序进行更多控制吗?首先,我希望能够向它发送击键,这样我就可以使用它来处理文件、保存输出并退出。

请指点我正确的方向。

【问题讨论】:

  • 这是什么程序?这可能会很棘手。它是用什么写的?
  • 在这个阶段,我只想看看我所描述的是否可行。我还没有使用特定的程序。
  • 您的 GUI 应用程序有哪些您无法在浏览器中完成的功能?要以任何形式优雅地做到这一点,您需要编写 GUI 应用程序(或与之交互的单独应用程序)和 Web 服务,以在两个应用程序之间提供任何形式的体面接口。我会尝试简化您的解决方案,这似乎是一场噩梦。
  • 假设 GUI 应用程序已经存在,它的工作做得很好,用 PHP 重写它要么是不可能的,要么是不切实际的。

标签: php windows user-interface


【解决方案1】:

必须是 PHP 吗?您可以使用 VNC 的 Java 小程序(免费)、Windows 终端服务、Citrix 等(非免费)在 Web 上分发您的 GUI 应用程序。我想不出一种方法可以在 PHP 中实现这一点,而不是通过它准确地“点击”GUI。

【讨论】:

  • 通过使用这些工具,我是否会放弃对计算机的控制?如果两个人想同时使用我的应用会怎样?
  • 有很多应用程序和解决方案,但限制越来越少。这真的取决于您的需求和预算,什么是适合您的。
【解决方案2】:

您可能想查看php-gtk

【讨论】:

  • 如果我想用 PHP 编写一个 GUI 应用程序,我会这样做。 php-gtk 真的可以帮我做我描述的事情吗?
  • 不,不会。 PHP-GTK 用于使用 PHP 构建 GTK 应用程序。
【解决方案3】:

不能说我自己尝试过,但您应该看看 PHP 的仅限 Windows 的扩展,特别是 COM 扩展 (http://www.php.net/manual/en/refs.utilspec.windows.php)。

来自文档中的介绍:

COM 是粘合的主要方式之一 应用程序和组件在一起 在 Windows 平台上;使用 COM 你 可以启动Microsoft Word,填写一个 文档模板并保存结果 作为 Word 文档并将其发送到 您网站的访问者。

您只能在自己的机器上运行脚本,但这听起来像是您需要的。 COM/OLE 的东西可能是一个相当深的兔子洞,祝你好运!

【讨论】:

    【解决方案4】:

    你绝对可以做到,但这需要一些技巧。一种方法是编写一个 Windows 命令行应用程序,它将按钮点击等发送到 Windows GUI 应用程序。然后,您可以使用 PHP 以及 execsystem 调用来调用此命令行应用程序。

    例如,如果你传递它说,Firefox,你将有一个 firefox-wrapper 应用程序,可以这样调用:

    firefox-wrapper open-url http://stackoverflow.com
    firefox-wrapper press-back
    ...
    

    【讨论】:

      【解决方案5】:

      我认为实际上不可能通过 PHP Web 应用程序将鼠标点击或击键发送到桌面应用程序(如果可能的话,我怀疑它是否容易 - 或漂亮)。可行的方法是获取 PHP 应用程序所需的功能并将其移动到一个单独的库或服务中,PHP 应用程序可以使用您向其公开的一组方法调用该库或服务。

      【讨论】:

      • 如果我从命令行使用 PHP,我可以这样做吗?我认为以后从 Web 应用程序调用命令行 PHP 应该没有那么难。
      • 在这种情况下,您的后端服务/库(与托管 Web 应用程序的计算机上的桌面应用程序交互/传递消息)将用 PHP 编写,并且将被称为通过一个也恰好用 PHP 编写的 Web 应用程序。我不认为用 PHP 编写中间部分有什么问题,除了这不是我个人的选择,但是嘿,不同的人有不同的笔触! ;)
      【解决方案6】:

      您需要记住的最重要的事情是编程语言类似于工具的古老编程格言。你不会试图用锤子去除爆胎,也不会用轮胎熨斗钉钉子。要点:为工作使用正确的工具。使用 php 来做你打算做的事情就像试图用螺丝刀钉钉子一样。找一把质量好的锤子。

      【讨论】:

      • 你能推荐一个替代的锤子吗?
      • Java 和 Python 有很多 GUI 选项。
      【解决方案7】:

      听起来很有可能... 让 GUI 应用程序启动本地服务器,例如 127.0.0.1:[anyportnumber] 然后,每当您通过 Web 执行某项操作时,让 PHP 应用程序向您的应用程序发送命令,方法是向位于那里的 GUI 应用程序发送数据,该应用程序监听它需要响应的任何命令。

      【讨论】:

        【解决方案8】:

        如果您需要查看在您的 Web 应用程序中运行的 GUI,VNC 查看器小程序是您的最佳选择。

        如果您希望提供 Web 表单并在幕后操作您的 GUI,请查看您最喜欢的搜索引擎上的 Windows 自动化工具。他们拥有强大的脚本语言,可以让您创建复杂的(如果需要)例程。您可以从命令行调用其中的许多并传递要执行的脚本。如果您使用 PHP 执行此操作,您甚至可以将脚本生成为临时文件并将其传递给宏处理器。

        您或许可以从 Windows Script Host (WSH) 获得所需的内容,这类似于批处理文件脚本,但具有更多功能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-20
          • 1970-01-01
          • 1970-01-01
          • 2015-11-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多