PostMessage是基于会话或基于机器的工作窗口



Win32函数是基于PostMessage用户会话还是基于机器?我想使用它将信息发送到单个实例应用程序,该应用程序也在具有多个用户的终端服务器上运行。所以,如果这只是基于机器的工作,就会造成问题。

实施:

[DllImport("user32")]
public static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);

非常感谢!

Win32函数PostMessage是基于用户会话还是基于计算机?

两者都没有。消息在特定桌面内的进程之间传递。请参阅桌面上的MSDN部分。

但是,由于每个桌面都在特定的远程桌面(也称为终端服务)会话中,因此永远不可能向处于不同会话中的进程发送消息。

您不能有一个实例程序同时在多个终端服务会话上显示窗口,也不能使用窗口消息与其他会话进行通信。

如果你的问题是,如何确保你的程序只与同一会话中的应用程序通信,答案是你什么都不需要做。

每个Windows程序都被限制在单个会话中使用Windows USER32函数,因此PostMessage只会向同一会话中的窗口发送消息。

请注意,单个会话可以承载属于不同用户的进程——这就是"运行方式"功能的作用。不过,这些进程之间的通信存在一些限制。

如果你的问题是,如何允许用户在不同的会话中同时使用程序的单个实例,答案是你必须将流程一分为二。

服务,以及在每个用户自己的会话中为其运行的客户端应用程序。我建议客户端激活并使用DCOM与服务通信。这可以是一个双向通道,因此一旦建立了通信,服务也可以向客户端应用程序发送命令。

相关内容

最新更新