【问题标题】:How to use FindWindow() from a service application?如何从服务应用程序中使用 FindWindow()?
【发布时间】:2011-02-03 21:04:22
【问题描述】:

我需要将服务应用程序与 vcl 应用程序通信。 我的旧应用程序是一个控制台,控制台与 vcl 应用程序通信没有问题。 现在我将控制台应用程序迁移到 srv 应用程序。 旧的通信使用 FindWindow 和 SendMessage。

我知道我可以使用套接字或命名管道与他们进行通信,但是,我现在不想更改结构,因为它会延迟迁移。

有人知道我该如何“修复”它吗?

tks

【问题讨论】:

    标签: delphi winapi


    【解决方案1】:

    FindWindow 在 Vista 或 Win7 中无法通过服务运行,因为服务在与用户应用程序不同的桌面上运行; SendMessage 也不会,因为您无法获取窗口句柄。这意味着如果您要支持这些版本的操作系统,您必须在它们之间使用不同的通信方式。

    【讨论】:

    • +1 事实上,你可以得到窗口句柄,你可以在不同的会话中用它做任何事情!!但这只是迂腐!
    • 同意。那只是迂腐。
    • 好吧,我在网上看到了这篇文章,但我同意你的看法,我需要改变这种行为。
    【解决方案2】:

    ControlService 可以代替 SendMessage 工作吗?我认为您应该能够将现有结构传递给它。

    http://www.delphigroups.info/3/10/156645.html

    【讨论】:

    • ControlService() 不允许您向服务发送参数,因此如果您需要传递数据,它不是合适的替代品。
    【解决方案3】:

    你无法修复它。服务现在在不同的会话中运行,并且无法访问用户的桌面。解决方案是命名管道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 2017-06-21
      相关资源
      最近更新 更多