如何从用户应用程序发送自定义消息到系统应用程序
How to send a custom message from user application to SYSTEM app?
我已经创建了一个windows服务来运行我的自定义应用程序createProcessAsUser。结果是一个应用程序在会话Id为0的SYSTEM用户中运行,正如我所期望的那样。我的问题是,我需要在这个应用程序和当前用户创建的其他应用程序之间进行一些通信。
如果一些桌面事件发生(SC_SCREENSAVE, monitor off),当前用户应用程序捕获的事件,我需要告诉我的系统应用程序。我用过:SendMessage(HWND_BROADCAST, CURRENT_USER_HAS_DONE_SOMETHING, 0,0);
即使SYSTEM应用程序捕获了许多系统事件(suspend, logoff…),并且在相同的会话Id中运行,我的自定义消息也不会被捕获。Sendmessage似乎对SYSTEM用户不起作用。
如何从用户当前会话发送消息到SYSTEM应用程序?
另一个选择是使用旧的ControlService函数以及用户定义的控件代码。它不适用于复杂的通信(您不能向服务传递任何参数),但它适用于您概述的简单的"发生了什么事"通知。
显然广播消息不是正确的解决方案。更好的解可能是CreateEventEx
。这将创建一个命名事件。您的常规应用程序可以调用SetEvent
, SYSTEM
应用程序可以等待此事件
最新版本的Windows不允许在会话0和桌面会话之间交换消息。这称为会话0隔离。
你可以在这里和这里找到更多信息。
通常的替代方案是TCP/IP,管道,远程等,在这个SO回答中有描述。
相关文章:
- 自动消失的自定义消息框
- 在静态库中声明函数,在使用该相同库的应用程序中定义它
- Qt应用程序在每个消息框上崩溃
- 如何模拟原始输入/以正确的方式向应用程序发送WM_INPUT消息
- 我可以在 MFC 应用程序中定义全局变量的位置
- 在到应用程序之间的消息中重复WaitForSingleObject
- 在我的C++应用程序中定义IHaveVirtualDestructor基类是一种好的做法吗
- 如何构建使用 OpenCV 的 XCode 6 iOS 应用程序 - 未定义错误__cplusplus
- 使用Windows中另一个进程的事件循环向Qt应用程序发送退出消息
- 对话框消息是否发送到自定义消息循环
- 如何在 Win32 API 的对话框中显示自定义消息
- BOOST _CHECK_EQUAL(和dervatives)添加自定义消息
- 带有自定义消息的基于模板的编译时断言只能在某些编译器中编译
- 如何向fastcgi应用程序呼叫/发送消息
- 如何度量在多核系统上运行的多个应用程序之间的消息延迟
- 如何从用户应用程序发送自定义消息到系统应用程序
- Google Mock:如何配置自定义消息来解释匹配失败
- 无法将自定义消息从一个控件发送到另一个控件
- 若要自定义消息框,我应该挂钩消息框还是使用 CreateWindowEx 创建模仿
- 发送消息无法将自定义消息发送到主窗口