一種消息處理方法及裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及信息技術領域,尤其涉及一種消息處理方法及裝置。
【背景技術】
[0002]Windows的消息發(fā)送方式可以分為兩種:一種為同步方式,即通過調用SendMessage函數(shù)將消息發(fā)送給目標窗口后,待目標窗口處理完該消息后,將響應消息返回給模擬程序對應的進程,以便模擬程序對應的進程執(zhí)行下一個模擬操作;一種為異步方式,即通過調用PostMessage將消息發(fā)送給目標窗口后,模擬程序對應的進程直接執(zhí)行下一個模擬操作。例如,目標窗口中已顯示有一個第一菜單欄,預期的效果為:當用戶在目標窗口中且該第一菜單欄以外的空白區(qū)域點擊右鍵時,在目標窗口在該第一菜單欄以外的空白區(qū)域建立第二菜單欄。然而,現(xiàn)有技術在采用異步方式時,模擬程序不等待目標窗口處理上述右鍵點擊發(fā)出的點擊消息,就去操作第二菜單欄。此時找到的彈出菜單可能是第一菜單欄,也可能剛好遇到第一菜單消失而第二菜單未出現(xiàn),導致找不到第一菜單或第二菜單。這兩種情況都不是模擬程序預期的效果。
[0003]因此,采用同步方式處理Windows的消息時,當目標窗口出現(xiàn)“卡死”現(xiàn)象時,會導致模擬程序對應的進程也會因等待目標窗口處理消息而出現(xiàn)“卡死”現(xiàn)象;采用異步方式處理Windows的消息時,模擬程序不等待目標窗口處理完消息即執(zhí)行下一個模擬操作,從而影響下一個模擬操作執(zhí)行后的效果。
【發(fā)明內容】
[0004]本發(fā)明的實施例提供一種消息處理方法及裝置,能夠解決因目標窗口出現(xiàn)“卡死”現(xiàn)象導致的模擬程序對應的進程而出現(xiàn)的“卡死”問題,以及解決當模擬程序不等目標窗口處理完消息便執(zhí)行下一個模擬操作,導致因執(zhí)行過快影響下一個模擬操作執(zhí)行后的效果的問題。
[0005]第一方面,本發(fā)明的實施例提供一種消息處理方法,包括:
[0006]以寄送方式發(fā)送模擬操作對應的消息到目標窗口,以便所述目標窗口接收并處理所述消息;
[0007]以寄送方式發(fā)送計時消息到所述目標窗口創(chuàng)建的輔助窗口,所述輔助窗口與所述目標窗口在同一個進程中,并且所述輔助窗口與所述目標窗口對應的消息隊列相同;
[0008]設置預設時間,當在所述預設時間內獲知所述輔助窗口接收到所述計時消息時,繼續(xù)執(zhí)行下一個模擬操作。
[0009]第二方面,本發(fā)明的實施例提供一種消息處理裝置,包括:
[0010]發(fā)送單元,用于以寄送方式發(fā)送模擬操作對應的消息到目標窗口,以便所述目標窗口接收并處理所述消息;
[0011]設置單兀,用于設置預設時間;
[0012]所述發(fā)送單元,還用于以寄送方式發(fā)送計時消息到所述目標窗口創(chuàng)建的輔助窗口,所述輔助窗口與所述目標窗口在同一個進程中,并且所述輔助窗口與所述目標窗口對應的消息隊列相同;
[0013]第一處理單元,用于當在所述設置單元設置的所述預設時間內獲知所述輔助窗口接收到所述計時消息時,繼續(xù)執(zhí)行下一個模擬操作。
[0014]本發(fā)明提供的消息處理方法及裝置,能夠通過以寄送方式發(fā)送模擬操作對應的消息到目標窗口 ;以寄送方式發(fā)送計時消息到所述目標窗口創(chuàng)建的輔助窗口,所述輔助窗口與所述目標窗口在同一個進程中,并且所述輔助窗口與所述目標窗口對應的消息隊列相同;設置預設時間,當在所述預設時間內獲知所述輔助窗口接收到所述計時消息時,繼續(xù)執(zhí)行下一個模擬操作。由于系統(tǒng)設置中即時消息的優(yōu)先級低于模擬操作對應的消息,因此通過獲知輔助窗口接收到處理優(yōu)先級較低的計時消息,從而執(zhí)行下一個模擬操作,使得可以解決因目標窗口出現(xiàn)“卡死”現(xiàn)象導致的模擬程序對應的進程而出現(xiàn)的“卡死”現(xiàn)象,以及解決當模擬程序不等目標窗口處理完消息便執(zhí)行下一個模擬操作,導致因執(zhí)行過快影響下一個模擬操作執(zhí)行后的效果的問題
【附圖說明】
[0015]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0016]圖1為本發(fā)明實施例提供的一種消息處理方法的流程圖;
[0017]圖2為本發(fā)明實施例提供的另一種消息處理方法的流程圖;
[0018]圖3為本發(fā)明實施例提供的另一種消息處理方法的流程圖;
[0019]圖4為本發(fā)明實施例提供的一種消息處理裝置的框圖;
[0020]圖5為本發(fā)明實施例提供的另一種消息處理裝置的框圖。
【具體實施方式】
[0021]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0022]本發(fā)明實施例提供一種消息處理方法,該方法的執(zhí)行主體可以為模擬程序對應的進程,如圖1所示,該方法包括:
[0023]步驟101,以寄送方式發(fā)送模擬操作對應的消息到目標窗口,以便所述目標窗口接收并處理所述消息。
[0024]可選的,在本步驟之前,模擬程序對應的進程可以通過現(xiàn)有技術的技術方案使目標窗口創(chuàng)建一個輔助窗口,此輔助窗口用于接收以及處理來自模擬程序對應的進程發(fā)送的消息。當然還可以采用其他的技術實現(xiàn),本實施例不限制采用的技術,可以使得目標窗口創(chuàng)建輔助窗口的技術。
[0025]可選的,以寄送方式發(fā)送模擬操作對應的消息到目標窗口,即通過調用PostMessage函數(shù)將模擬操作對應的消息發(fā)送給目標窗口。
[0026]可選的,例如,模擬操作為模擬點擊操作,則模擬操作對應的消息可以為點擊消肩、O
[0027]步驟102,以寄送方式發(fā)送計時消息到所述目標窗口創(chuàng)建的輔助窗口,所述輔助窗口與所述目標窗口在同一個進程中,并且所述輔助窗口與所述目標窗口對應的消息隊列相同。
[0028]可選的,以寄送方式發(fā)送計時消息到所述目標窗口創(chuàng)建的輔助窗口,即通過調用PostMessage函數(shù)將計時消息發(fā)送給輔助窗口。
[0029]可選的,模擬操作對應的消息的處理優(yōu)先級比計時消息的處理優(yōu)先級高,因此當所述輔助窗口與所述目標窗口對應的消息隊列中存在模擬操作對應的消息以及計時消息時,優(yōu)先處理模擬操作對應的消息。
[0030]進一步可選的,所述輔助窗口與所述目標窗口對應的進程會通過一段循環(huán)代碼讀取消息隊列中的各個消息,并將消息發(fā)送給對應的窗口,例如,將模擬操作對應的消息發(fā)送給目標窗口,將計時消息發(fā)送給輔助窗口。
[0031]步驟103,設置預設時間,當在所述預設時間內獲知所述輔助窗口接收到所述計時消息時,繼續(xù)執(zhí)行下一個模擬操作。
[0032]可選的,由于模擬操作對應的消息的處理優(yōu)先級比計時消息的處理優(yōu)先級高,因此模擬程序對應的進程獲知所述輔助窗口接收到所述計時消息時,說明目標窗口已經(jīng)接收到模擬操作對應的消息,或者,說明目標窗口已經(jīng)接收并且處理完成所述模擬操作對應的消息,或者,說明目標窗口在處理所述模擬操作對應的消息過程中產生的其他消息也已經(jīng)被其他相關窗口接收并處理,因此,模擬程序對應的進程可以繼續(xù)執(zhí)行下一個模擬操作。
[0033]當在設置的預設時間內,模擬程序對應的進程未獲知所述輔助窗口接收到所述計時消息時,也繼續(xù)執(zhí)行下一個模擬操作,即模擬程序對應的進程不再等待所述輔助窗口接收所述計時消息。
[0034]本發(fā)明提供的消息處理方法,能夠通過以寄送方式發(fā)送模擬操作對應的消息到目標窗口 ;以寄送方式發(fā)送計時消息到所述目標窗口創(chuàng)建的輔助窗口,所述輔助窗口與所述目標窗口在同一個進程中,并且所述輔助窗口與所述目標窗口對應的消息隊列相同;設置預設時間,當在所述預設時間內獲知所述輔助窗口接收到所述計時消息時,繼續(xù)執(zhí)行下一個模擬操作。由于系統(tǒng)設置中即時消息的優(yōu)先級低于模擬操作對應的消息,因此通過獲知輔助窗口接收到處理優(yōu)先級較低的計時消息,從而執(zhí)行下一個模擬操作,使得可以解決因目標窗口出現(xiàn)“卡死”現(xiàn)象導致的模擬程序對應的進程而出現(xiàn)的“卡死”現(xiàn)象,以及解決當模擬程序不等目標窗口處理完消息便執(zhí)行下一個模擬操作,導致因執(zhí)行過快影響下一個模擬操作執(zhí)行后的效果的問題。
[0035]本發(fā)明實施例提供另一種消息處理方法,如圖2所示,該方法包括:
[0036]步驟201,模擬程序對應的進程通過現(xiàn)有技術方案使所述目標窗口所在的進程創(chuàng)建所述輔助窗口。
[0037]步驟202,模擬程序對應的進程以寄送方式發(fā)送模擬操作對應的消息到目標窗口,以便所述目標窗口接收并處理所述消息。
[0038]可選的,模擬程序對應的進程以調用PostMessage