本發明涉及終端技術領域,特別是涉及一種日歷顯示方法及裝置。
背景技術:
隨著國家法定節假日的調整,人們對于假期、補班、節日等時間日期相關信息越來越關注。同時在日常生活中,繁忙的工作和人際交往,導致人們很難去記全所有事情,尤其是生日、聚會。此時終端設備中的日歷應用程序就可以發揮它的作用了。例如,用戶可以在日歷中設置時間提醒,在設定的時間到來時,日歷可以展示提示信息,以提醒用戶有待辦事項。
在安裝有Windows系統的終端設備中,Windows系統自帶了一個日歷應用程序,能夠在終端設備的右下角的日歷窗口顯示日歷界面,但是它所提供的功能有限。因此,可以在終端設備上安裝其它日歷應用程序,提供更加豐富的功能。
終端設備上安裝的日歷應用程序可以將自身的日歷界面顯示在終端設備上。但是,當在終端設備上安裝多個日歷應用程序時,在終端設備上顯示的日歷界面可能會在多個日歷界面之間進行切換,用戶體驗較差。
技術實現要素:
本發明實施例的目的在于提供一種日歷顯示方法及裝置,以在終端設備中顯示穩定的日歷界面,提升用戶體驗。具體技術方案如下:
第一方面,本發明實施例提供了一種日歷顯示方法,應用于終端設備上的日歷應用程序,所述方法包括:
當檢測到其它應用程序調用攔截函數的第一調用請求時,判斷調用所述攔截函數的第一調用請求中傳遞的窗口句柄是否為日歷窗口的句柄;
如果是,生成調用所述攔截函數的第二調用請求,其中生成的所述攔截函數的第二調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得所述終端設備的操作系統根據調用所述攔截函數的第二調用請求,采用所述日歷應用程序的 消息響應函數對接收的窗口消息進行處理,以在日歷窗口顯示所述日歷應用程序對應的日歷界面。
可選的,所述日歷應用程序通過掛鉤的方式檢測所述攔截函數的調用請求。
可選的,所述日歷應用程序安裝到所述終端設備上后,所述方法還包括:
生成調用所述攔截函數的第三調用請求,其中生成的所述攔截函數的第三調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得所述操作系統根據調用所述攔截函數的第三調用請求,采用所述日歷應用程序的消息響應函數對接收的窗口消息進行處理,以在日歷窗口顯示所述日歷應用程序對應的日歷界面。
可選的,所述日歷窗口的句柄為:TrayClockWClass。
可選的,所述攔截函數為:SetWindowLongPtr函數。
第二方面,本發明實施例還提供了一種日歷顯示裝置,應用于終端設備上的日歷應用程序,所述裝置包括:
判斷模塊,用于檢測到其它應用程序調用攔截函數的第一調用請求時,判斷調用所述攔截函數的第一調用請求中傳遞的窗口句柄是否為日歷窗口的句柄;
執行模塊,用于當所述判斷模塊判斷結果為是時,生成調用所述攔截函數的第二調用請求,其中生成的所述攔截函數的第二調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得所述終端設備的操作系統根據調用所述攔截函數的第二調用請求,采用所述日歷應用程序的消息響應函數對接收的窗口消息進行處理,以在日歷窗口顯示所述日歷應用程序對應的日歷界面。
可選的,所述日歷應用程序通過掛鉤的方式檢測所述攔截函數的調用請求。
可選的,所述裝置還包括:
處理模塊,用于所述日歷應用程序安裝到所述終端設備上后,生成調用所述攔截函數的第三調用請求,其中生成的所述攔截函數的第三調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得所述操作系統根據調用所述攔截函數的第三調用請求,采用所述日歷應用程序的消息響應函數對接收的窗口消息進行處理,以在日歷窗口顯示所述日歷應用程序對應的日歷界面。
可選的,所述日歷窗口的句柄為:TrayClockWClass。
可選的,所述攔截函數為:SetWindowLongPtr函數。
本發明實施例提供的日歷顯示方法及裝置,應用于終端設備上的日歷應用程序,所述方法包括:當檢測到其它應用程序調用攔截函數的第一調用請求時,判斷調用所述攔截函數的第一調用請求中傳遞的窗口句柄是否為日歷窗口的句柄;如果是,生成調用所述攔截函數的第二調用請求,其中生成的所述攔截函數的第二調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得所述終端設備的操作系統根據調用所述攔截函數的第二調用請求,采用所述日歷應用程序的消息響應函數對接收的窗口消息進行處理,以在日歷窗口顯示所述日歷應用程序對應的日歷界面。本實施例中,當第一日歷應用程序檢測到其它應用程序調用攔截函數的第一調用請求,并且該第一調用請求中傳遞的窗口句柄為日歷窗口的句柄時,表明其它日歷應用程序想要在日歷窗口顯示其日歷界面,第一日歷應用程序可以生成調用攔截函數的第二調用請求,以使終端設備的操作系統采用第一日歷應用程序的消息響應函數對接收的窗口消息進行處理,在日歷窗口顯示第一日歷應用程序對應的日歷界面,因此,保證了第一日歷應用程序的日歷界面一直顯示在日歷窗口,能夠在終端設備中顯示穩定的日歷界面,提升用戶體驗。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1示出了根據本發明提供的日歷顯示方法的一個實施例的示意性流程圖;
圖2示出了根據本發明提供的日歷顯示方法的另一個實施例的示意性流程圖;
圖3示出了根據本發明提供的日歷顯示裝置的一個實施例的結構示意圖。
具體實施方式
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清 楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
需要說明的是,在不沖突的情況下,本發明中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結合實施例來詳細說明本發明。
在安裝有Windows系統的終端設備中,Windows系統自帶了一個日歷應用程序,能夠在終端設備的右下角的日歷窗口顯示日歷界面,但是Windows系統自帶的日歷應用程序所提供的功能有限,例如,用戶僅可以查看公歷,而不能查看公農歷對應;用戶還可以在日歷中設置時間提醒,在設定的時間到來時,日歷可以顯示提示信息,以提醒用戶有待辦事項,而不能提示具體的待辦事項的內容。這些不能夠滿足用戶的需求,用戶希望日歷應用程序可以提供更豐富的功能,如,提供待辦事項的內容、公農歷對應、天氣預報、節假日氣候查詢、放假安排查詢等生活功能,更能提供買飛機票、秒搶火車票等功能。
因此,可以在終端設備上安裝其它日歷應用程序,為用戶提供更加豐富的功能。在終端設備上安裝日歷應用程序后,終端設備上安裝的日歷應用程序可以將自身的日歷界面顯示在終端設備上。
在Windows的窗口實現中,所有的窗口繪制都是通過接收WM_PAINT消息,并調用相應的消息響應函數來實現的。所以,安裝于終端設備上的日歷應用程序要想能夠繪制自身的日歷界面,將自身的日歷界面顯示在終端設備上,就必須要攔截WM_PAINT消息。Windows系統正好提供了這樣一個攔截函數SetWindowLongPtr。
因此,安裝于終端設備上的任一日歷應用程序可以生成調用這個攔截函數的調用請求,以使終端設備的操作系統將該日歷應用程序的消息響應函數放置在函數調用鏈的頂端,并且攔截到所有的窗口消息后,可以采用該日歷應用程序的消息響應函數單獨對WM_PAINT消息進行處理,用以繪制自身的日歷界面,在日歷窗口中顯示自身的日歷界面。
當終端設備中安裝有多個日歷應用程序時,針對每個日歷應用程序,都可以生成調用攔截函數的調用請求,將自身的消息響應函數放置在函數調用鏈的頂端,并將自身的日歷界面顯示在日歷窗口。因此,在函數調用鏈的頂端放置 的消息響應函數會不斷的變化,在日歷窗口顯示的日歷界面也可能會不穩定。
因此,本發明實施例提供了一種日歷顯示方法,當第一日歷應用程序檢測到其它應用程序調用攔截函數的第一調用請求,并且該第一調用請求中傳遞的窗口句柄為日歷窗口的句柄時,表明其它日歷應用程序想要在日歷窗口顯示其日歷界面,第一日歷應用程序可以生成調用攔截函數的第二調用請求,以使終端設備的操作系統采用第一日歷應用程序的消息響應函數對接收的窗口消息進行處理,在日歷窗口顯示第一日歷應用程序對應的日歷界面,因此,保證了第一日歷應用程序的日歷界面一直顯示在日歷窗口,能夠在終端設備中顯示穩定的日歷界面,提升用戶體驗。
請參考圖1,其示出了根據本發明提供的日歷顯示方法的一個實施例的示意性流程圖。
如圖1所示,本實施例提供的日歷顯示方法,應用于終端設備上的日歷應用程序,可以包括如下步驟:
步驟101,當檢測到其它應用程序調用攔截函數的第一調用請求時,判斷調用所述攔截函數的第一調用請求中傳遞的窗口句柄是否為日歷窗口的句柄。
在本實施例中,安裝在終端設備上的第一日歷應用程序可以將自身的日歷界面顯示在日歷窗口。并且,可以將自身的日歷界面一直顯示在日歷窗口,而其它日歷應用程序的日歷界面不會在終端設備的日歷窗口顯示。
若其它日歷應用程序想要將自身的日歷界面顯示在日歷窗口,則需要生成調用攔截函數的調用請求。因此,安裝于終端設備上的第一日歷應用程序可以檢測是否存在其它應用程序調用攔截函數的第一調用請求。其中,上述攔截函數可以為:SetWindowLongPtr函數。
例如,第一日歷應用程序可以通過掛鉤的方式檢測是否存在其它應用程序調用攔截函數的第一調用請求。具體地,可以借助于第三方類庫Detours,這個類庫的作用是對函數調用進行掛鉤,將原有的函數調用替換為改寫后的函數實現。利用它,可以將攔截函數實現進行改寫,當其它應用程序調用攔截函數時,第一日歷應用程序便會檢測到。
當第一日歷應用程序檢測到其它應用程序調用攔截函數的第一調用請求 時,可以進一步判斷調用攔截函數的第一調用請求中傳遞的窗口句柄是否為日歷窗口的句柄。
在終端設備中,不同的應用程序生成相應的調用攔截函數的調用請求,可以在終端設備中繪制不同的窗口,如,word窗口、輸入法窗口等。因此,第一日歷應用程序檢測到其它應用程序調用攔截函數的第一調用請求時,不能僅根據該第一調用請求確定將要在終端設備中繪制的窗口類型。
每一個應用程序在生成調用攔截函數的調用請求時,都可以在調用攔截函數的調用請求中傳遞對應的窗口句柄,以在終端設備中繪制對應的窗口。因此,為了確定檢測到的攔截函數的第一調用請求對應繪制的窗口類型,第一日歷應用程序可以進一步判斷攔截函數的第一調用請求中傳遞的窗口句柄是否為日歷窗口的句柄。
當攔截函數的第一調用請求中傳遞的窗口句柄不是日歷窗口的句柄時,該攔截函數的第一調用請求對應繪制的窗口類型不是日歷窗口,則第一應用程序可以不進行后續操作。其它應用程序可以繼續調用攔截函數,執行相應的操作。
可選地,在Windows系統中,日歷窗口的句柄為:TrayClockWClass。
步驟102,生成調用所述攔截函數的第二調用請求,其中生成的所述攔截函數的第二調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得所述終端設備的操作系統根據調用所述攔截函數的第二調用請求,采用所述日歷應用程序的消息響應函數對接收的窗口消息進行處理,以在日歷窗口顯示所述日歷應用程序對應的日歷界面。
當第一日歷應用程序確定攔截函數的第一調用請求中傳遞的窗口句柄為日歷窗口的句柄時,表明其它日歷應用程序想要在日歷窗口顯示其日歷界面。這種情況下,第一日歷應用程序可以生成調用攔截函數的第二調用請求,其中生成的攔截函數的第二調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得終端設備的操作系統可以根據調用攔截函數的第二調用請求,采用第一日歷應用程序的消息響應函數對接收的窗口消息進行處理,以在日歷窗口顯示第一日歷應用程序對應的日歷界面。
具體地,當第一日歷應用程序確定攔截函數的第一調用請求中傳遞的窗口句柄為日歷窗口的句柄時,操作系統會采用其它日歷應用程序的消息響應函數 對接收到的窗口消息進行處理,在日歷窗口顯示其它日歷應用程序對應的日歷界面。而第一日歷應用程序會生成調用攔截函數的第二調用請求,在調用攔截函數的調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得操作系統根據調用攔截函數的第二調用請求,采用第一日歷應用程序的消息響應函數對接收的窗口消息進行處理,在日歷窗口顯示第一日歷應用程序對應的日歷界面。因此,第一日歷應用程序通過生成調用攔截函數的第二調用請求,可以將自身對應的日歷界面顯示在日歷窗口。由于第一應用程序對應的日歷界面可以及時顯示,因此,在用戶看來一直顯示的是第一應用程序的日歷界面。
本實施例提供的日歷顯示方法,應用于終端設備上的日歷應用程序,所述方法包括:當檢測到其它應用程序調用攔截函數的第一調用請求時,判斷調用所述攔截函數的第一調用請求中傳遞的窗口句柄是否為日歷窗口的句柄;如果是,生成調用所述攔截函數的第二調用請求,其中生成的所述攔截函數的第二調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得所述終端設備的操作系統根據調用所述攔截函數的第二調用請求,采用所述日歷應用程序的消息響應函數對接收的窗口消息進行處理,以在日歷窗口顯示所述日歷應用程序對應的日歷界面。本實施例中,當第一日歷應用程序檢測到其它應用程序調用攔截函數的第一調用請求,并且該第一調用請求中傳遞的窗口句柄為日歷窗口的句柄時,表明其它日歷應用程序想要在日歷窗口顯示其日歷界面,第一日歷應用程序可以生成調用攔截函數的第二調用請求,以使終端設備的操作系統采用第一日歷應用程序的消息響應函數對接收的窗口消息進行處理,在日歷窗口顯示第一日歷應用程序對應的日歷界面,因此,保證了第一日歷應用程序的日歷界面一直顯示在日歷窗口,能夠在終端設備中顯示穩定的日歷界面,提升用戶體驗。
請參考圖2,其示出了根據本發明提供的日歷顯示方法的另一個實施例的示意性流程圖。
如圖2所示,本實施例提供的日歷顯示方法,應用于終端設備上的日歷應用程序,可以包括如下步驟:
步驟201,所述日歷應用程序安裝到所述終端設備上后,生成調用所述攔截函數的第三調用請求,其中生成的所述攔截函數的第三調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得所述操作系統根據調用所述攔截函數的第三調用請求,采用所述日歷應用程序的消息響應函數對接收的窗口消息進行處理, 以在日歷窗口顯示所述日歷應用程序對應的日歷界面。
在本實施例中,當第一日歷應用程序安裝到終端設備上后,可以生成調用攔截函數的第三調用請求,其中生成的攔截函數的第三調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得終端設備的操作系統根據調用攔截函數的第三調用請求,采用第一日歷應用程序的消息響應函數對接收的窗口消息進行處理,在日歷窗口顯示第一日歷應用程序對應的日歷界面。因此,能夠保證第一日歷應用程序安裝到終端設備上后,即可以在終端設備中顯示自身的日歷界面。
步驟202,當檢測到其它應用程序調用攔截函數的第一調用請求時,判斷調用所述攔截函數的第一調用請求中傳遞的窗口句柄是否為日歷窗口的句柄。
步驟203,生成調用所述攔截函數的第二調用請求,其中生成的所述攔截函數的第二調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得所述終端設備的操作系統根據調用所述攔截函數的第二調用請求,采用所述日歷應用程序的消息響應函數對接收的窗口消息進行處理,以在日歷窗口顯示所述日歷應用程序對應的日歷界面。
上述步驟202-203與圖1所示實施例中的步驟101-102基本相同,在此不再贅述。
本實施例提供的方法,能夠保證第一日歷應用程序安裝到終端設備上后,即可以在終端設備中顯示自身的日歷界面。并且,第一日歷應用程序的日歷界面可以一直顯示在日歷窗口,能夠在終端設備中顯示穩定的日歷界面,提升用戶體驗。
請參考圖3,其示出了根據本發明提供的日歷顯示裝置的一個實施例的結構示意圖。
如圖3所示,本實施例提供的日歷顯示裝置,應用于終端設備上的日歷應用程序,所述裝置可以包括:
判斷模塊310,用于檢測到其它應用程序調用攔截函數的第一調用請求時,判斷調用所述攔截函數的第一調用請求中傳遞的窗口句柄是否為日歷窗口的句柄;
執行模塊320,用于當所述判斷模塊310判斷結果為是時,生成調用所述攔 截函數的第二調用請求,其中生成的所述攔截函數的第二調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得所述終端設備的操作系統根據調用所述攔截函數的第二調用請求,采用所述日歷應用程序的消息響應函數對接收的窗口消息進行處理,以在日歷窗口顯示所述日歷應用程序對應的日歷界面。
進一步地,所述日歷應用程序通過掛鉤的方式檢測所述攔截函數的調用請求。
進一步地,所述日歷窗口的句柄為:TrayClockWClass。
進一步地,所述攔截函數為:SetWindowLongPtr函數。
在本實施例的一個可選實現方式中,所述裝置還可以包括:
處理模塊330,用于所述日歷應用程序安裝到所述終端設備上后,生成調用所述攔截函數的第三調用請求,其中生成的所述攔截函數的第三調用請求中傳遞的窗口句柄為日歷窗口的句柄,以使得所述操作系統根據調用所述攔截函數的第三調用請求,采用所述日歷應用程序的消息響應函數對接收的窗口消息進行處理,以在日歷窗口顯示所述日歷應用程序對應的日歷界面。
本實施例提供的日歷顯示裝置,當檢測到其它應用程序調用攔截函數的第一調用請求,并且該第一調用請求中傳遞的窗口句柄為日歷窗口的句柄時,表明其它日歷應用程序想要在日歷窗口顯示其日歷界面,第一日歷應用程序可以生成調用攔截函數的第二調用請求,以使終端設備的操作系統采用第一日歷應用程序的消息響應函數對接收的窗口消息進行處理,在日歷窗口顯示第一日歷應用程序對應的日歷界面,因此,保證了第一日歷應用程序的日歷界面一直顯示在日歷窗口,能夠在終端設備中顯示穩定的日歷界面,提升用戶體驗。
本實施例提供的裝置,能夠保證第一日歷應用程序安裝到終端設備上后,即可以在終端設備中顯示自身的日歷界面。并且,第一日歷應用程序的日歷界面可以一直顯示在日歷窗口,能夠在終端設備中顯示穩定的日歷界面,提升用戶體驗。
對于系統/裝置實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將 一個實體或者操作與另一個實體或操作區分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
本說明書中的各個實施例均采用相關的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于系統實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
以上所述僅為本發明的較佳實施例而已,并非用于限定本發明的保護范圍。凡在本發明的精神和原則之內所作的任何修改、等同替換、改進等,均包含在本發明的保護范圍內。