网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
VC实现系统热键激活后台服务程序
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
p;= GetSafeHwnd(); 
  // 寻找HotKey对应的原子是否存在于原子列表 
  if(GlobalFindAtom("Hotkey") == 0) 
  { 
  // 如果没有存在于原子列表,则创建一个原子 
  id = GlobalAddAtom("Hotkey"); 
  //注册全局热键Ctrl + Alt + R 
  RegisterHotKey(handle, id, CONTROL + ALT, R); 
  } 
  else // 如果HotKey已经存在于原子列表,则终止程序运行 
  PostQuitMessage(0); 

  服务程序的隐藏与激活

  服务程序除了被激活后同用户的交互,绝大部分时间都是在后台隐藏运行的,不仅界面是不可视的,而且在任务列表中也不应当出现。关于界面的隐藏比较简单,可以通过向ShowWindow()函数设置SW_HIDE参数来实现,而在任务列表中的隐身则一般的做法是通过调用系统内核Kernel32.DLL的RegisterServiceProcess()函数将其设置成为一个服务进程,这样,在任务列表中也实现了隐身。但是RegisterServiceProcess()函数并非一个标准的API函数,使用起来有点烦琐。首先要通过 GetModuleHandle()函数得到Kernel32.DLL模块的句柄,并由此通过GetProcAddress()函数进一步得出 RegisterServiceProcess()函数在Kernel32.DLL中的入口地址,最后才能使用 RegisterServiceProcess()函数。该函数原型声明如下:

以下是引用片段:
DWORD RegisterServiceProcess(DWORD dwProcessId,DWORD dwType); 
  其第一个参数指定了将要注册为服务进程的进程标识,参数dwType指定是去注册一个服务进程(为1时)还是去卸载一个服务进程(为0时)。其具体服务注册过程如下: 
  typedef DWORD (WINAPI *RSP)(DWORD dwProcessId,DWORD dwType); 
  // 获取Kernel32.DLL模块句柄 
  HMODULE m_hKernel = ::GetModuleHandle("Kernel32.DLL"); 
  // 得到RegisterServiceProcess()函数入口地址 
  RSP m_rsp = (RSP)::GetProcAddress(m_hKernel, "RegisterServiceProcess"); 
  // 注册当前进程为服务进程 
  m_rsp(::GetCurrentProcessId(),1); 

  在服务程序后台运行期间,一旦有系统热键Alt+Ctrl+R按下,将发出系统热键消息WM_HOTKEY,该消息的消息响应函数不能通过 ClassWizard来添加,而只能手工完成消息映射。在消息响应函数中,通过对消息参数 wParam的判断可以确定出是否是本服务程序所设定的系统热键,如果是,通过ShowWindow(SW_SHOW)将程序界面显示出来,以进行同用户的交互操作:

以下是引用片段:
void CServiceDlg::OnHotKey(WPARAM wParam, LPARAM lParam) 
  { 
  // 判断是否是本服务程序设置的系统热键 
  if (wParam == id) 
  { 
  …… 
  // 在此发送WM_PAINT消息,在OnPain()中通过 
  // ShowWindow(SW_SHOW)将界面设置为可视 
  PostMessage(WM_PAINT, 0, 0); 
  } 
  } 


  系统热键的卸载

  由于前面将系统热键、全局原子等都注册到系统,因此必须在服务程序退出之前将其卸载,否则将导致下次注册时的失败。函数UnregisterHotKey()负责完成对系统热键的释放,GlobalDeleteAtom()将全局原子从全局原子列表删除。

  小结

  通过本文所述方法为后台运行的系统服务程序添加此热键呼出功能可以真正实现程序的后台隐蔽运行、热

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号