Windows 编程之服务-2

本文介绍了如何在Windows服务中定义并处理自定义控制码,以实现对服务的扩展功能,如播放音乐。通过定义PLAY_MUSIC_START和PLAY_MUSIC_STOP控制码,结合ServiceHandler函数和ControlService API,可以在服务运行时控制音乐的播放和停止。
摘要由CSDN通过智能技术生成

四、自定义服务控制码

除了系统定义的五种控制码外(还有一种是:SERVICE_CONTROL_SHUTDOWN),
用户还可自定义控制码,其取值范围是128-255。用户可以通过控制面板中的服务
项向特定服务程序的控制处理函数发送控制码,程序员可以调用系统函数 
ControlService 直接向服务程序的控制处理函数发送控制码。其函数原型如下:

BOOL ControlService(
  SC_HANDLE hService,
  DWORD dwControl,
  LPSERVICE_STATUS lpServiceStatus
);
hService :函数 OpenService or CreateService 返回的服务程序句柄。
dwControl :控制码,不能是SERVICE_CONTROL_SHUTDOWN。
lpServiceStatus:返回最后收到的服务状态信息。

1. 定义控制码,其取值范围是128-255

Eg:

#define PLAY_MUSIC_START 0x00000086

#define PLAY_MUSIC_STOP 0x00000087

2. 在服务控制处理函数中添加处理分支

VOID WINAPI ServiceHandler(DWORD opcode)

{

switch (opcode)

{

case SERVICE_CONTROL_STOP:

ServiceStatus.dwCurrentState = SERVICE_STOPPED;

if(!SetServiceStatus(ServiceStatusHandle,&ServiceStatus))

{

WriteToLog(" SetServiceStatus failure");

}

WriteToLog("stop success !");

return ;

case SERVICE_CONTROL_SHUTDOWN:

ServiceStatus.dwCurrentState = SERVICE_CONTROL_SHUTDOWN;

if(!SetServiceStatus(ServiceStatusHandle,&ServiceStatus))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值