wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了winapi – 在服务中接收Windows消息大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我在VC写了一个服务.我关注了 tutorial here.现在,我正在尝试了解如何接收DBT_DEVICEARRIVAL,DBT_DEVICEREMOVECOMPLETE,WM_COPYDATA等消息,就像具有顶级窗口的常规应用程序一样.在搜索时,我遇到了 this MSDN article 在“广播信息”部分的最后几段中: Applications receive messages throu
我在VC写了一个服务.我关注了 tutorial here.现在,我正在尝试了解如何接收DBT_DEVICEARRIVAL,DBT_DEVICEREMOVECOMPLETE,WM_COPYDATA等消息,就像具有顶级窗口的常规应用程序一样.在搜索时,我遇到了 this MSDN article

在“广播信息”部分的最后几段中:

但几乎不可能找到任何如何做的例子.

>如何将WndProc与我的服务相关联以便它接收消息?
>或者,如何使我的服务控制处理函数接收Windows消息?我的服务控制处理程序只有一个DWORD参数,而不是WndProc的UINT,WPARAM,LPARAM等.

我读过1)使用隐藏窗口和2)仅消息窗口等,但我认为我不能在服务中使用它们;不想.如果我能用MSDN提到的两种方式中的任何一种方式完成它,我会很高兴.

服务描述:

该服务将检测USB设备插入并将一些文件复制到其中.它还必须跟踪某些目录和文件的更改,以便它知道要复制哪些目录和文件.

该基本功能可以扩展到包括将来的其他内容.所以,我可能必须能够收到许多其他我现在都不知道的Windows消息.

在开发常规Windows应用程序时,上面提到的示例消息简单地取自我习惯的内容.在编写服务时,我了解它们是否适合或不安全.

解决方法

嗯,你只需创建一个普通的消息循环就像你编写一个Win32窗口应用程序的纯C实现一样 – 没有涉及任何框架.

例:

while(Getmessage(...)) ...

您可以使用Peekmessage或GetMessage(请参阅链接的文档).但后者更常规,并将其从消息队列中删除.

即你甚至不需要窗户.每个线程都可以有一个消息循环.所以它会阻塞,但只有当前的线程.你必须弄清楚如何将信息传递给需要它的其他线程.

但是很大

但是,不要努力妥协MS为你提供的东西不要射击你自己的下半身,你应该read about Shatter Attacks over on Wikipedia并使用适当的IPC技术进行服务(有很多可用的,从MMF到管道到信号量组合,互斥量和事件).

如果您打算在用户桌面上接收窗口消息但具有特权上下文(无论如何都应该阻止会话分离),此部分是相关的.

@H_696_66@

大佬总结

以上是大佬教程为你收集整理的winapi – 在服务中接收Windows消息全部内容,希望文章能够帮你解决winapi – 在服务中接收Windows消息所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。