摘要: 本文给出了一种通过设置系统热键来呼出在系统后台隐藏运行的服务程序的一种方法,通过这种方法,可以实现后台服务程序在必要的时候同用户的交互设置。www.goodsgy.com
引言www.goodsgy.com
通常情况下,用于后台监控的服务程序(Service)是没有界面的,甚至也没有提供任务栏图标,因此绝大多数情况下服务程序是无法同用户进行交互的。但是在实际应用中,这些服务程序虽然绝大多数时间是在后台运行,但是在某些必要的情况下还是需要用户的干预并同用户进行一些必要的交互操作。但是由于服务程序没有提供任何可供交互操作之用的界面,因此如何将其从后台激活(即呼出)成为解决此问题的一个关键。本文下面就给出一种通过设置系统热键的方法来激活运行于后台的服务程序。www.goodsgy.com
设计思路www.goodsgy.com
尽管从理论上可以有许多方法来激活后台运行的服务程序,比如可以通过寻找服务程序的窗口标题名而得到其窗口指针,然后再向此窗口发送消息使其出现到前台;也可以通过系统快照对当前系统进程进行枚举,然后再将其激活到前台。但是以上这些方法都需要另外编写应用程序,对后台服务程序的激活实际是再这些应用程序中进行的,这样的处理方式显然十分不便,最好的方法是对程序的激活和隐藏处理均在服务程序内部完成。因此可以考虑接收系统发出的消息,如果通过设置全局钩子对设置事件进行拦截捕获,显然是相当烦琐的。在此考虑使用系统热键来激活后台服务程序,其实现过程非常简单,只需先向操作系统添加一个全局原子(Atom),然后再向操作系统登记一个热键,当程序在后台运行期间一旦有此热键按下,操作系统将会抛出系统消息WM_HOTKEY,所以服务程序只需在 WM_HOTKEY消息响应函数中添加相应代码即可实现服务程序的后台激活。www.goodsgy.com
系统热键的注册www.goodsgy.com
根据前面的介绍,不难写出为后台服务程序添加对系统热键响应的功能代码。首先通过函数GlobalFindAtom()查询本服务程序所对应的全局原子是否已存在于全局原子表中,如果发现,则说明系统中已经存在有此服务,程序退出。如果没有发现,则通过GlobalAddAtom()函数向全局原子表添加一个字串,并获取得到一个唯一标识此字串的原子。以上两函数原型分别为:www.goodsgy.com
以下是引用片段: ATOM GlobalFindAtom(LPCTSTR lpString); ATOM GlobalAddAtom(LPCTSTR lpString); |
www.goodsgy.com
[1] [2] [3] [4] 下一页