亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

VC實現系統熱鍵激活后臺服務程序

2019-11-17 05:01:24
字體:
來源:轉載
供稿:網友
  摘要: 本文給出了一種通過設置系統熱鍵來呼出在系統后臺隱藏運行的服務程序的一種方法,通過這種方法,可以實現后臺服務程序在必要的時候同用戶的交互設置?! ?STRONG>引言  通常情況下,用于后臺監控的服務程序(Service)是沒有界面的,甚至也沒有提供任務欄圖標,因此絕大多數情況下服務程序是無法同用戶進行交互的。但是在實際應用中,這些服務程序雖然絕大多數時間是在后臺運行,但是在某些必要的情況下還是需要用戶的干預并同用戶進行一些必要的交互操作。但是由于服務程序沒有提供任何可供交互操作之用的界面,因此如何將其從后臺激活(即呼出)成為解決此問題的一個要害。本文下面就給出一種通過設置系統熱鍵的方法來激活運行于后臺的服務程序?! ?STRONG>設計思路  盡管從理論上可以有許多方法來激活后臺運行的服務程序,比如可以通過尋找服務程序的窗口標題名而得到其窗口指針,然后再向此窗口發送消息使其出現到前臺;也可以通過系統快照對當前系統進程進行枚舉,然后再將其激活到前臺。但是以上這些方法都需要另外編寫應用程序,對后臺服務程序的激活實際是再這些應用程序中進行的,這樣的處理方式顯然十分不便,最好的方法是對程序的激活和隱藏處理均在服務程序內部完成。因此可以考慮接收系統發出的消息,假如通過設置全局鉤子對設置事件進行攔截捕捉,顯然是相當煩瑣的。在此考慮使用系統熱鍵來激活后臺服務程序,其實現過程非常簡單,只需先向操作系統添加一個全局原子(Atom),然后再向操作系統登記一個熱鍵,當程序在后臺運行期間一旦有此熱鍵按下,操作系統將會拋出系統消息WM_HOTKEY,所以服務程序只需在 WM_HOTKEY消息響應函數中添加相應代碼即可實現服務程序的后臺激活?! ?STRONG>系統熱鍵的注冊  根據前面的介紹,不難寫出為后臺服務程序添加對系統熱鍵響應的功能代碼。首先通過函數GlobalFindAtom()查詢本服務程序所對應的全局原子是否已存在于全局原子表中,假如發現,則說明系統中已經存在有此服務,程序退出。假如沒有發現,則通過GlobalAddAtom()函數向全局原子表添加一個字串,并獲取得到一個唯一標識此字串的原子。以上兩函數原型分別為:
以下是引用片段:
ATOM GlobalFindAtom(LPCTSTR lpString);
  ATOM GlobalAddAtom(LPCTSTR lpString);
  其中,輸入參數為一個描述原子的字符串,假如GlobalFindAtom()從全局原子表中找到了指定的字串,那么將返回此字串對應的原子,否則返回0。GlobalAddAtom()假如創建成功,將返回一個新創建的原子。
  接下來,為了能在程序運行期間捕捉到系統熱鍵,需要通過RegisterHotKey()定義一個系統范圍的熱鍵。該函數原形如下:
以下是引用片段:
 BOOL RegisterHotKey(HWND hWnd, // 接收熱鍵響應的窗口句柄
  int id, // 熱鍵的標識
  UINT fsModifiers, // 控制鍵標志
  UINT vk // 虛擬鍵值
  );
  其中,熱鍵標識id必須是一個范圍在0xC000到0xFFFF之間的全局唯一的值,為了避免可能引起的熱鍵沖突,通常把GlobalAddAtom ()返回的原子作為參數傳入,而且GlobalAddAtom()返回值的范圍同id參數的答應范圍是完全一致的。參數fsModifiers定義了同虛擬鍵值vk同時按下而產生出系統熱鍵消息WM_HOTKEY的控制鍵組合,如MOD_ALT、MOD_CONTROL、MOD_SHIFT和 MOD_WIN等。在本例中將要設定的系統熱鍵為Alt+Ctrl+R,因此,參數fsModifiers和vk分別設置為MOD_ALT MOD_CONTROL和VK_R。有關系統熱鍵的注冊實現方法可以整理如下:
以下是引用片段:
// 獲取當前窗口句柄
  HWND handle = 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()將全局原子從全局原子列表刪除。  小結  通過本文所述方法為后臺運行的系統服務程序添加此熱鍵呼出功能可以真正實現程序的后臺隱蔽運行、熱鍵激活,非常有利于治理員和用戶的治理與使用。本文所述程序在windows 2000 Professional下,由Microsoft Visual C++ 6.0編譯通過。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区三区www| 欧美性xxxx极品hd欧美风情| 九九九久久国产免费| 欧美精品videosex极品1| 欧美性感美女h网站在线观看免费| 久久亚洲一区二区三区四区五区高| 国产精品久久久久久久一区探花| 日韩国产精品亚洲а∨天堂免| 亚洲人成毛片在线播放| 亚洲国产精品成人一区二区| 国产精品一区二区三| 成人黄色影片在线| 57pao国产成人免费| 亚洲精品电影网在线观看| 亚洲在线www| 91欧美精品午夜性色福利在线| 久久久噜噜噜久久中文字免| 美女福利视频一区| 亚洲成人教育av| 久操成人在线视频| 国产精品一区久久| 国产精品伦子伦免费视频| 97久久超碰福利国产精品…| 国产ts人妖一区二区三区| 亚洲国产精久久久久久| 97国产一区二区精品久久呦| 91精品久久久久久久久久久| 日韩av成人在线| 亚洲激情视频在线| 久久久久久久爱| 欧美一区二区三区艳史| 久久琪琪电影院| 久久久国产精品x99av| 精品国模在线视频| 色狠狠av一区二区三区香蕉蜜桃| www.欧美三级电影.com| 亚洲欧洲偷拍精品| 亚洲中国色老太| 久久久久国产视频| 亚洲图片在线综合| 91啪国产在线| 在线观看日韩专区| 91经典在线视频| 色哟哟网站入口亚洲精品| 国产成人综合亚洲| 中文字幕av一区中文字幕天堂| 欧美另类老肥妇| 亚洲自拍另类欧美丝袜| 欧美性开放视频| 久久黄色av网站| 91国内免费在线视频| 久久久精品久久| 亚洲成人激情在线| www日韩中文字幕在线看| 欧美三级免费观看| 亚洲新中文字幕| 国产日韩视频在线观看| 国产精品久久一| 亚洲精品美女久久| 国产欧美日韩最新| 久久久久久久久亚洲| 国产精品欧美日韩一区二区| 午夜免费日韩视频| 亚洲图片欧洲图片av| 欧美大片免费观看| 国产精品丝袜一区二区三区| www.亚洲人.com| 日韩av在线免播放器| 日韩欧美中文第一页| 欧美老女人性视频| 欧美在线视频在线播放完整版免费观看| 久久精品免费播放| 亚洲精品日韩在线| 在线播放日韩欧美| 日韩色av导航| 国产精品久久久久久av福利软件| 色噜噜狠狠色综合网图区| 欧美国产日韩中文字幕在线| 国产成人精品国内自产拍免费看| 国产精品美女www| 日韩亚洲综合在线| 国产日产亚洲精品| 久久欧美在线电影| 日韩av免费网站| 日韩精品在线视频观看| 国产91精品久久久久久| 国产视频精品一区二区三区| 国外色69视频在线观看| 超薄丝袜一区二区| 亚洲欧美一区二区激情| 国产日韩精品一区二区| 国产日本欧美视频| 91精品在线观| 欧美黄色片免费观看| 精品五月天久久| 欧美在线亚洲在线| 不用播放器成人网| 黄色精品在线看| 成人性教育视频在线观看| 136fldh精品导航福利| 九九久久综合网站| 国产xxx69麻豆国语对白| 日韩激情片免费| 久久综合伊人77777尤物| 色播久久人人爽人人爽人人片视av| 九色91av视频| 中文字幕av一区二区| 亚洲欧美精品一区| 国产剧情久久久久久| 久久在线精品视频| y97精品国产97久久久久久| 欧美日韩美女在线观看| 欧美亚洲国产日韩2020| 欧美大片欧美激情性色a∨久久| 中文字幕亚洲欧美日韩高清| 欧美片一区二区三区| 欧美大尺度在线观看| 国产精品久久久久久久av电影| 国产视频久久网| 日本午夜在线亚洲.国产| 精品国内自产拍在线观看| 日韩av最新在线观看| 在线观看精品自拍私拍| 国产做受69高潮| 26uuu日韩精品一区二区| 国产精品久久久亚洲| 欧美劲爆第一页| 在线成人激情黄色| 日av在线播放中文不卡| xxx一区二区| 日韩在线免费高清视频| 中文亚洲视频在线| 精品国产电影一区| 狠狠久久五月精品中文字幕| 亚洲网站在线播放| 亚洲欧美在线一区| 欧美一级免费视频| 一区二区欧美久久| 久久五月天色综合| 日韩在线免费高清视频| 国内精品久久久| 免费99精品国产自在在线| 成人国产精品免费视频| 欧美午夜精品久久久久久人妖| 国产欧美一区二区三区久久| 最近2019年中文视频免费在线观看| 国产日本欧美在线观看| 精品国内产的精品视频在线观看| 最近2019年日本中文免费字幕| 欧美日韩视频免费播放| 国产成人jvid在线播放| 亚洲偷熟乱区亚洲香蕉av| 亚洲国产精品va在线看黑人| 亚洲成成品网站| 国产精品福利观看| 超碰精品一区二区三区乱码| 亚洲人成在线观看网站高清| 亚洲欧美综合图区| 国产成人免费av电影| 国产精品∨欧美精品v日韩精品| 亚洲一区二区久久久久久久| 欧美色另类天堂2015| 国产欧美一区二区三区四区| 91精品在线播放|