我用 VC++ 编写了一个服务。我按照教程here。现在,我正在尝试了解如何接收 DBT_DEVICEARRIVAL、DBT_DEVICEREMOVECOMPLETE、WM_COPYDATA 等消息,就像具有顶级窗口的常规应用程序一样。在搜索它时,我遇到了这篇 MSDN 文章
在“广播消息”部分的最后几段中:
应用程序通过其顶层窗口的窗口过程接收消息。消息不会发送到子窗口。服务可以通过窗口过程或其服务控制处理程序接收消息。
但是几乎不可能找到任何如何做到这一点的例子。
如何将 WndProc 与我的服务相关联,以便它接收消息?
或者,我怎样才能让我的服务控制处理函数接收 Windows 消息?我的服务控制处理程序只有一个 DWORD 参数,而不是 WndProc 的 UINT、WPARAM、LPARAM 等。
我已经阅读了 1) 使用隐藏窗口和 2) 仅消息窗口等,但我认为我不能在服务中使用它们;不想。如果我能以 MSDN 提到的这两种方式中的任何一种方式完成它,我会很高兴。
服务说明:
该服务将检测 USB 设备插入并将一些文件复制到它。它还必须跟踪对某些目录和文件的更改,以便知道要复制哪些。
将来,此基本功能可能会扩展到包括其他内容。因此,我可能必须能够接收许多我现在不知道的其他 Windows 消息。
上面提到的示例消息只是取自我在开发常规 Windows 应用程序时所习惯的。在编写服务时,我了解它们是否不合适或不安全。