陳海軍
摘要:Windows平臺上面缺乏一款能夠統(tǒng)一整合各類應用程序窗口的通用軟件,因此文中根據(jù)Windows操作系統(tǒng)下應用程序運行的消息機制,通過注入掛載鉤子函數(shù),截獲并處理相關消息,提出了分屏框架窗口軟件的開發(fā)設計思路,并給予了相應的實現(xiàn)算法。
關鍵詞:消息;鉤子;共享數(shù)據(jù)段;分屏;Splash Window
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2015)14-0064-02
Abstract:On Windows system platform, there is a lack of application that can integrate all kinds of software running windows, this paper analysis application running message theory and hook mechanism, provide design ideas of ‘snap views software, and give the corresponding key algorithms.
Key words:message; hook; share data seg; sap view; splash window
目前,在Windows平臺上面,各個領域、各種功能的應用軟件數(shù)不勝數(shù),有很多軟件需要搭配使用,因此,大量工作需要在不同的應用窗口中切來切去,影響工作效率,為解決這個問題,微軟從Win8開始,為寬屏設備用戶提供的“分屏視圖(Snap Views)”功能,可以將兩個需要常在視線內的應用同時并排放在Win8屏幕上便于查看。不過Win8系統(tǒng)中的“分屏視圖(Snap Views)”功能有諸多限制,比如屏幕分辨率必須在1366×768像素以及以上才能使用,而且只能有兩個應用同時顯示等等。本文探討了如何實現(xiàn)一個通用的軟件可以將不同的應用程序整合到同一個框架窗口。
1 系統(tǒng)分析
如果要整合各種Windows窗口,必須要深入了解Windows應用程序的運行機制。
1.1 Windows應用程序運行的機制
Windows應用程序是基于消息驅動的。在Windows中發(fā)生的事件都可以用消息來表示。針對每一個正在執(zhí)行的Windows應用程序,Windows系統(tǒng)為其建立一個應用程序消息隊列,Windows系統(tǒng)將屬于該程序的各種消息推送到這個隊列中,應用程序中的“Message Loop”的消息循環(huán)處理代碼,用來從消息隊列中依次取出消息并根據(jù)其中信息將其分發(fā)到相應的“Windows Process”窗口處理函數(shù)中去。如圖1所示。
1.2 Windows應用程序窗口對象關系
應用程序窗口對象之間存在四種關系,即擁有者(owner)、父親(parent)、孩子(child)、兄弟(sibling)。如果一個窗口的parent非空,則parent和它之間就建立了父子關系。父子關系決定了:
1)窗口在屏幕上面的顯示位置。父窗口提供了用來定位子窗口的坐標系統(tǒng),一個子窗口只能顯示在它的父窗口的客戶區(qū)中,之外的部分將被裁減。這個裁減法則決定了如果父窗口不可見,則子窗口肯定不可見。如果父窗口移動到了屏幕之外,子窗口也一樣。
2)通常情況下、窗口之間消息的傳遞是和窗口關系相關的,通知消息會首先發(fā)送給父窗口,然后再轉發(fā)到各個子窗口。
3)當父窗口被隱藏時,它的所有子窗口也被隱藏。
4)父窗口被銷毀的時候,它所擁有的子窗口都會被銷毀。
從以上的分析可知,要整合控制Windows下面各種應用程序,必須實現(xiàn)對應用程序消息的截獲、分析和處理。要做到這一點,這里主要通過兩種手段,一是指定應用程序的父窗口為本程序框架窗口。二是利用Windows鉤子機制截獲應用程序的消息進行處理。
2 系統(tǒng)設計與實現(xiàn)
軟件主要分為兩個部分程序,一個是窗口主界面程序,主要負責展示和接收用戶輸入的消息。另外一個是動態(tài)鏈接庫,負責鉤子函數(shù)的注入和消息的截獲處理。
2.1 主窗口程序主要運行流程(如圖2所示)
其中需要注意的幾個地方是:
1)在枚舉查找應用程序窗口的時候,一定要找到應用程序的頂級窗口,不要錯誤捕獲應用程序中的子窗口。
2)有些應用程序啟動較慢,所以在啟動的時候,有啟動窗口(Splash Window),系統(tǒng)應該能夠自動識別,跳過啟動窗口。
具體相關代碼如下:
3 結束語
本文通過對Windows下應用程序運行機制和消息機理的分析,探討了實現(xiàn)通用的分屏軟件的方法,該軟件目前運行良好,基本能夠滿足日常工作需求,為通過一個框架窗口整合不同的應用程序提供了較好的解決方案。
參考文獻:
[1] Charles Petzold. Windows程序設計[M]. 北京: 清華大學出版社, 2010.
[2] Jeffrey Richter. Windows核心編程[M]. 北京: 機械工業(yè)出版社, 2008.
[3] Mark Russinovich. 深入解析Windows操作系統(tǒng)[M]. 北京: 人民郵電出版社, 2012.
[4] 張銀奎. 軟件調試[M]. 北京: 電子工業(yè)出版社, 2008.
[5] 毛德操. Windows內核情景分析[M]. 北京: 電子工業(yè)出版社, 2009.
[6] 潘愛民. Windows內核原理與實現(xiàn)[M]. 北京: 電子工業(yè)出版社, 2010.
[7] 侯俊杰. 深入淺出MFC[M]. 武漢: 華中科技大學出版社, 2001.
[8] Jeff Prosise. MFC Windows程序設計[M]. 北京: 清華大學出版社, 2007.