【发布时间】:2011-02-03 21:04:22
【问题描述】:
我需要将服务应用程序与 vcl 应用程序通信。 我的旧应用程序是一个控制台,控制台与 vcl 应用程序通信没有问题。 现在我将控制台应用程序迁移到 srv 应用程序。 旧的通信使用 FindWindow 和 SendMessage。
我知道我可以使用套接字或命名管道与他们进行通信,但是,我现在不想更改结构,因为它会延迟迁移。
有人知道我该如何“修复”它吗?
tks
【问题讨论】:
我需要将服务应用程序与 vcl 应用程序通信。 我的旧应用程序是一个控制台,控制台与 vcl 应用程序通信没有问题。 现在我将控制台应用程序迁移到 srv 应用程序。 旧的通信使用 FindWindow 和 SendMessage。
我知道我可以使用套接字或命名管道与他们进行通信,但是,我现在不想更改结构,因为它会延迟迁移。
有人知道我该如何“修复”它吗?
tks
【问题讨论】:
FindWindow 在 Vista 或 Win7 中无法通过服务运行,因为服务在与用户应用程序不同的桌面上运行; SendMessage 也不会,因为您无法获取窗口句柄。这意味着如果您要支持这些版本的操作系统,您必须在它们之间使用不同的通信方式。
【讨论】:
ControlService 可以代替 SendMessage 工作吗?我认为您应该能够将现有结构传递给它。
【讨论】:
ControlService() 不允许您向服务发送参数,因此如果您需要传递数据,它不是合适的替代品。
你无法修复它。服务现在在不同的会话中运行,并且无法访问用户的桌面。解决方案是命名管道。
【讨论】: