基于MFC编写Windows服务程序

来源:互联网 发布:随机抽取软件 编辑:程序博客网 时间:2024/06/06 14:23

近期由于项目需要,编写了一个基于MFC对话框的Windows服务程序,现把方法和大家分享一下,希望高手指正。程序实现的基本功能如下:

1、 注册为Windows服务程序,随系统启动

2、 作为服务端,提供客户端的连接(TCP)

3、 有可视化界面,监视客户端的连接情况

4、 具有系统托盘图标

最终运行界面为:


Windows服务程序的基本概念不再介绍,不懂的可以去百度上搜一下,这里直接介绍程序的开发步骤。

一、创建基于MFC对话框的项目(这里使用的是VC6.0,项目名称为SocketTest)


二、注册为Windows服务程序

(1)在SocketTest.cpp文件中定义全局变量(添加文件包含:#include"WINSVC.h")


(2)修改BOOL CSocketTestApp::InitInstance()函数,注释掉如图代码,添加如图代码。


(3)几个全局函数的代码如下。






(4)在主对话框中自定义消息:#define WM_USER_CLOSE_WND(WM_USER+111),用于程序退出。在ServerSocket.h文件中,添加CSocketTestDlg类的消息函数:afx_msg void OnUserClose(WPARAM wParam,LPARAM lParam),并在ServerSocket.cpp文件中添加消息映射ON_MESSAGE(WM_USER_CLOSE_WND,OnUserClose),OnUserClose函数的实现代码为:


三、实现系统托盘图标

(1)在ServerSocket.h文件中定义:#define UM_TRAYNOTIFY (WM_USER+110) ,在CSocketTestDlg类中添加成员变量:NOTIFYICONDATA m_nid,添加消息定义函数:afx_msg LRESULT OnTrayNotify(WPARAM wParam,LPARAMlParam);;在SocketTestDlg.cpp文件中添加消息映射:ON_MESSAGE(UM_TRAYNOTIFY,OnTrayNotify),OnTrayNotify函数代码如下:


(2)在CSocketTestDlg的构造函数和析构函数中添加如下代码


(3)在BOOL CSocketTestDlg::OnInitDialog()函数中添加如图代码


(4)添加窗口的WM_SIZE和WM_CLOSE消息函数


(5)在资源管理器中添加一个菜单(IDR_MENU_TRAY),添加两个菜单项:“恢复窗口”(IDR_TRAY_RESTORE)和“退出”(IDR_TRAY_EXIT)

四、实现网络服务

(1)添加类CServerSocket,派生于CSocket,对该类进行类向导添加三个函数OnAccept()、OnClose()、OnReceive(),函数中调用的函数都在主对话框中实现。



(2)修改主对话框的类定义。


(3)在BOOL CSocketTestDlg::OnInitDialog()函数中打开网络服务,并实现添加上线用户、删除下线用户、接收数据的函数。




五、将编译好的exe文件注册为服务并运行

打开cmd,依次输入命令:SocketTest.exe /install和sc start AutoWorkSrv,这时程序已运行,并可以在控制面板的计算机管理中看到如下界面:


六、结束语

以上内容整理匆忙,难免有不当之处,请批评指正。需要源码的可以和我联系。

我的邮箱:459238972@qq.com




0 0