本發(fā)明涉及軟件領(lǐng)域,尤其涉及一種軟件管理方法及裝置、終端。
背景技術(shù):
隨著it(internettechnology,互聯(lián)網(wǎng)技術(shù))領(lǐng)域及終端行業(yè)的不斷發(fā)展,軟件應(yīng)用越來(lái)越多,軟件越來(lái)越多,用戶的選擇也就越來(lái)越多,于是要增強(qiáng)自身的競(jìng)爭(zhēng)力往往就需要將自身產(chǎn)品做得更好,于是為了提高用戶體驗(yàn),提供了越來(lái)越多的軟件自動(dòng)安裝或卸載的方法。
現(xiàn)有技術(shù)中,有一種全自動(dòng)安裝軟件技術(shù)是利用文件殼識(shí)別技術(shù),提取安裝程序的靜默參數(shù),通過(guò)靜默安裝模式,可以有效避免安裝過(guò)程中出現(xiàn)的未知窗口,其是把一個(gè)應(yīng)用軟件的全部安裝過(guò)程簡(jiǎn)化為一個(gè)命令,不需要多次點(diǎn)擊鼠標(biāo)選擇“下一步”等其他安裝操作,也不需要敲擊鍵盤輸入安裝路徑。但并不是所有軟件都可以使用靜默安裝模式完成安裝,事實(shí)上,只有很少一部分軟件支持靜默安裝模式。所以該自動(dòng)化安裝方法并不具有普適性。另外,現(xiàn)有技術(shù)中,還有一種自動(dòng)安裝技術(shù),利用腳本模擬鼠標(biāo)、鍵盤等操作完成軟件安裝,由于需要錄制鍵盤、鼠標(biāo)的過(guò)程,第一次安裝應(yīng)用程序時(shí),必須由人工操作。同時(shí)由于軟件安裝過(guò)程中彈出窗口并不是一成不變的,因此腳本錄制需要包含軟件安裝過(guò)程中所有彈出窗口,難度比較大,普適性也比較低。為了解決普適性的問(wèn)題,現(xiàn)有技術(shù)中也有另外一種較為通用的軟件安裝方法,通過(guò)對(duì)安裝軟件進(jìn)行分析智能地模擬人工點(diǎn)擊界面的方法實(shí)現(xiàn)應(yīng)用程序的安裝,然而實(shí)際應(yīng)用中,在軟件程序的安裝過(guò)程中可能出現(xiàn)不屬于安裝進(jìn)程的界面,例如系統(tǒng)彈窗,此時(shí)就造成軟件無(wú)法繼續(xù)進(jìn)行安裝。
綜上所述,現(xiàn)有技術(shù)中雖然存在軟件的自動(dòng)安裝方法,但是這些軟件安裝方法由于自身原因的限制要么普適性比較低,不具有通用性;要么安裝過(guò)程中容易受到其他彈窗的影響無(wú)法繼續(xù)完成安裝。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的主要技術(shù)問(wèn)題是,提供一種軟件管理方法及裝置、終端,解決現(xiàn)有技術(shù)中的軟件自動(dòng)化安裝或卸載過(guò)程中,不能兼顧通用性和不受其他窗口影響的問(wèn)題。
為解決上述技術(shù)問(wèn)題,本發(fā)明提供一種軟件管理方法,包括:
獲取軟件信息,并開(kāi)始執(zhí)行對(duì)所述軟件的管理操作;
在管理操作過(guò)程中對(duì)系統(tǒng)窗口進(jìn)行監(jiān)控;當(dāng)監(jiān)控到系統(tǒng)界面上有新窗口產(chǎn)生,識(shí)別所述新窗口的窗口類型,將所述窗口類型與預(yù)設(shè)窗口處理規(guī)則進(jìn)行匹配,所述預(yù)設(shè)窗口處理規(guī)則定義針對(duì)各窗口類型進(jìn)行對(duì)應(yīng)的處理方式;
根據(jù)匹配結(jié)果對(duì)所述新窗口進(jìn)行處理,完成對(duì)所述軟件的管理操作。
在本發(fā)明一種實(shí)施例中,所述窗口類型包括應(yīng)用窗口類型和異常窗口類型;預(yù)設(shè)窗口處理規(guī)則包括:
當(dāng)窗口類型屬于應(yīng)用窗口類型時(shí),獲取所述窗口的控件信息,并對(duì)所述控件內(nèi)容進(jìn)行操作控制;
當(dāng)窗口類型屬于異常窗口類型時(shí),關(guān)閉所述窗口。
在本發(fā)明一種實(shí)施例中,在獲取軟件信息之前還包括預(yù)先設(shè)置異常窗口集,所述異常窗口集包括所有屬于異常窗口類型窗口的窗口標(biāo)識(shí);
識(shí)別所述新窗口的窗口類型包括:獲取所述新窗口的窗口標(biāo)識(shí),并判斷所述新窗口是否屬于所述異常窗口集,若是,則所述新窗口的窗口類型為異常窗口類型。
在本發(fā)明一種實(shí)施例中,在執(zhí)行對(duì)所述軟件的管理操之后,識(shí)別所述新窗口的窗口類型之前還包括:獲取所述軟件的進(jìn)程標(biāo)識(shí)符;
識(shí)別所述新窗口的窗口類型包括獲取所述新窗口的進(jìn)程標(biāo)識(shí)符,判斷所述新窗口的進(jìn)程標(biāo)識(shí)符與所述軟件的進(jìn)程標(biāo)識(shí)符是否一致,若是,則所述新窗口的窗口類型為應(yīng)用窗口類型。
在本發(fā)明一種實(shí)施例中,執(zhí)行對(duì)所述軟件的管理操作包括執(zhí)行對(duì)所述軟件的安裝或卸載。
在本發(fā)明一種實(shí)施例中,當(dāng)執(zhí)行對(duì)所述軟件的管理操為執(zhí)行對(duì)所述軟件的 卸載時(shí),在完成對(duì)所述軟件的卸載之后還包括:查詢注冊(cè)表中是否還有所述軟件相關(guān)信息,若是,則重復(fù)對(duì)所述軟件進(jìn)行卸載的步驟或者刪除所述注冊(cè)表內(nèi)所述軟件的相關(guān)信息。
本發(fā)明還提供一種軟件管理裝置,包括:操作模塊:用于獲取軟件信息,并開(kāi)始執(zhí)行對(duì)所述軟件的管理操作;
窗口處理模塊:用于在管理操作過(guò)程中對(duì)系統(tǒng)窗口進(jìn)行監(jiān)控;當(dāng)監(jiān)控到系統(tǒng)界面上有新窗口產(chǎn)生,識(shí)別所述新窗口的窗口類型,將所述窗口類型與預(yù)設(shè)窗口處理規(guī)則進(jìn)行匹配,所述預(yù)設(shè)窗口處理規(guī)則定義針對(duì)各窗口類型進(jìn)行對(duì)應(yīng)的處理方式;
執(zhí)行模塊:用于根據(jù)匹配結(jié)果對(duì)所述新窗口進(jìn)行處理,完成對(duì)所述軟件的管理操作。
在本發(fā)明一種實(shí)施例中,所述窗口類型包括應(yīng)用窗口類型和異常窗口類型;預(yù)設(shè)窗口處理規(guī)則包括:
當(dāng)窗口類型屬于應(yīng)用窗口類型時(shí),獲取所述窗口的控件信息,并對(duì)所述控件內(nèi)容進(jìn)行操作控制;
當(dāng)窗口類型屬于異常窗口類型時(shí),關(guān)閉所述窗口。
在本發(fā)明一種實(shí)施例中,還包括設(shè)置模塊:用于在獲取軟件信息之前預(yù)先設(shè)置異常窗口集,所述異常窗口集包括所有屬于異常窗口類型窗口的窗口標(biāo)識(shí);
所述窗口處理模塊還包括第一識(shí)別子模塊,用于獲取所述新窗口的窗口標(biāo)識(shí),并判斷所述新窗口是否屬于所述異常窗口集,若是,則所述新窗口的窗口類型為異常窗口類型。
在本發(fā)明一種實(shí)施例中,還包括獲取模塊:用于在在執(zhí)行對(duì)所述軟件的管理操之后,識(shí)別所述新窗口的窗口類型之前,獲取所述軟件的進(jìn)程標(biāo)識(shí)符;
所述窗口處理模塊還包括第二識(shí)別子模塊,用于獲取所述新窗口的進(jìn)程標(biāo)識(shí)符,判斷所述新窗口的進(jìn)程標(biāo)識(shí)符與所述軟件的進(jìn)程標(biāo)識(shí)符是否一致,若是,則所述新窗口的窗口類型為應(yīng)用窗口類型。
在本發(fā)明一種實(shí)施例中,執(zhí)行對(duì)所述軟件的管理操作包括執(zhí)行對(duì)所述軟件的安裝或卸載。
在本發(fā)明一種實(shí)施例中,還包括重處理模塊,用于當(dāng)執(zhí)行對(duì)所述軟件的管理操為執(zhí)行對(duì)所述軟件的卸載時(shí),在完成對(duì)所述軟件的卸載之后,查詢注冊(cè)表中是否還有所述軟件相關(guān)信息,若是,則重復(fù)對(duì)所述軟件進(jìn)行卸載的步驟或者刪除所述注冊(cè)表內(nèi)所述軟件的相關(guān)信息。
本發(fā)明還提供一種終端,包括上述軟件管理裝置。
本發(fā)明的有益效果是:本發(fā)明提供一種軟件管理方法及裝置、終端,獲取軟件信息,并開(kāi)始執(zhí)行對(duì)軟件的管理操作;在管理操作過(guò)程中對(duì)系統(tǒng)窗口進(jìn)行監(jiān)控,當(dāng)監(jiān)控到有新窗口產(chǎn)生時(shí),對(duì)該新窗口的窗口類型進(jìn)行識(shí)別,將該新窗口的窗口類型與預(yù)設(shè)窗口處理規(guī)則進(jìn)行匹配,預(yù)設(shè)窗口處理規(guī)則定義了針對(duì)各種窗口類型對(duì)應(yīng)的處理方式,匹配出結(jié)果后,根據(jù)匹配結(jié)果對(duì)新窗口進(jìn)行處理,完成對(duì)軟件的管理操作。在對(duì)軟件管理操作的過(guò)程中,對(duì)系統(tǒng)窗口進(jìn)行監(jiān)控,根據(jù)監(jiān)控到的窗口采用不同的處理方式,因?yàn)榇蠖鄶?shù)的軟件安裝卸載都可以根據(jù)上述流程進(jìn)行執(zhí)行,所以其具有普適性;另外,本發(fā)明中的軟件管理方法針對(duì)不同類型的窗口采用不同的處理方式,可以有效避免系統(tǒng)彈窗導(dǎo)致阻斷安裝進(jìn)程的狀況。所以,可以有效解決現(xiàn)有技術(shù)中存在的軟件自動(dòng)化安裝或卸載過(guò)程中,不能兼顧通用性和不受其他窗口影響的問(wèn)題;達(dá)到增加軟件管理的通用性,同時(shí)不受其他窗口影響,從而提升用戶體驗(yàn)的效果。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例一中軟件管理方法的流程圖;
圖2為本發(fā)明實(shí)施例一中軟件安裝方法的流程圖;
圖3為本發(fā)明實(shí)施例一中軟件卸載方法的流程圖;
圖4為本發(fā)明實(shí)施例二中軟件管理裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面通過(guò)具體實(shí)施方式結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。
實(shí)施例一:
本實(shí)施例提供一種軟件管理方法,請(qǐng)參考圖1,該方法包括:
s101:獲取軟件信息,并開(kāi)始執(zhí)行對(duì)所述軟件的管理操作;
s102:在管理操作過(guò)程中對(duì)系統(tǒng)窗口進(jìn)行監(jiān)控;
s103:當(dāng)監(jiān)控到系統(tǒng)界面上有新窗口產(chǎn)生,識(shí)別所述新窗口的窗口類型;
s104:將所述窗口類型與預(yù)設(shè)窗口處理規(guī)則進(jìn)行匹配;
s105:根據(jù)匹配結(jié)果對(duì)所述新窗口進(jìn)行處理,完成對(duì)所述軟件的管理操作。
要對(duì)軟件進(jìn)行管理控制,首先要獲取該軟件的相關(guān)信息,執(zhí)行步驟s101,在本實(shí)施例中管理操作可以是對(duì)軟件進(jìn)行安裝或者卸載,也可以是對(duì)該軟件先進(jìn)行安裝,然后基于已安裝的軟件完成卸載。若該管理操作是軟件安裝的話,那么獲取的軟件信息就包括軟件安裝包信息。例如,可能軟件的安裝包是從網(wǎng)絡(luò)上下載的,是壓縮包的形式,此時(shí)要完成軟件的安裝必須首先完成安裝包的解壓,還要判斷解壓后的信息是不是想要執(zhí)行的安裝軟件。如果是就獲取該需要執(zhí)行的安裝軟件,此時(shí)軟件信息就為所述安裝軟件。對(duì)于軟件卸載也類似,需要先獲取需要進(jìn)行卸載的軟件的信息。例如,當(dāng)想要對(duì)某軟件a進(jìn)行卸載的時(shí)候,可以掃描注冊(cè)表信息,根據(jù)軟件a的名稱與注冊(cè)表中“displayname”項(xiàng)的內(nèi)容進(jìn)行匹配從而獲取需要完成卸載軟件的信息。在獲取到軟件的相關(guān)信息后,需要執(zhí)行相應(yīng)的操作,本實(shí)施例中主要包括軟件安裝或軟件卸載。其具體觸發(fā)方式,可以是簡(jiǎn)單的點(diǎn)擊開(kāi)始安裝或者軟件卸載等。上述示例僅為了說(shuō)明舉的具體示例,并不作為對(duì)本實(shí)施例的方案的限定。
開(kāi)始執(zhí)行對(duì)所述軟件的管理操作后,執(zhí)行步驟s102,在管理操作過(guò)程中對(duì)系統(tǒng)窗口進(jìn)行監(jiān)控,在執(zhí)行對(duì)軟件管理操作(也即是安裝或卸載)的過(guò)程中系統(tǒng)窗口會(huì)發(fā)生變化,可能會(huì)新增一些窗口,為了軟件自動(dòng)化的執(zhí)行接下來(lái)的安裝所以要對(duì)系統(tǒng)窗口進(jìn)行監(jiān)控。然后執(zhí)行步驟s103,當(dāng)監(jiān)控到系統(tǒng)界面上有新窗口產(chǎn)生的時(shí)候,對(duì)該新窗口進(jìn)行識(shí)別,主要是識(shí)別新窗口的窗口類型。容易理解,在安裝過(guò)程中通常安裝或卸載軟件是會(huì)有安裝或卸載窗口界面,以便于與用戶交互,將這些軟件用以與用戶進(jìn)行交互,方便正確安裝的窗口的那些窗口類型定義為應(yīng)用窗口類型。當(dāng)然,在安裝或卸載的過(guò)程中往往還會(huì)有其他窗口彈出來(lái),這些窗口可能是系統(tǒng)提醒,例如,系統(tǒng)彈窗,提示注冊(cè)表項(xiàng)被更改。對(duì)于這類窗口,將其定義為異常窗口類型。
在本實(shí)施例的一種具體實(shí)施方式中,在執(zhí)行步驟s101之前還會(huì)預(yù)先設(shè)置異常窗口集,異常窗口集包括所有屬于異常窗口類型窗口的窗口標(biāo)識(shí)。例如,異 常窗口集中包括:“程序兼容性助手”、“windows安全警報(bào)”、“桌面小工具-安全警告”等等。在預(yù)先設(shè)置了異常窗口集的情況下,要完成對(duì)新窗口的窗口類型的識(shí)別就只需要獲取新窗口的窗口標(biāo)識(shí),并判斷獲取到的新窗口的標(biāo)識(shí)屬不屬于異常窗口集中的標(biāo)識(shí)。例如,監(jiān)控到系統(tǒng)界面上有新窗口產(chǎn)生,獲取到該新窗口的窗口標(biāo)識(shí)為“windows安全警報(bào)”,然后查看異常窗口集,發(fā)現(xiàn)異常窗口集中包含“windows安全警報(bào)”,于是就可以知道,該新窗口屬于異常窗口。采用這種方式可以簡(jiǎn)單的識(shí)別出異常窗口類型的窗口。本過(guò)程可以利用windowsapi函數(shù)enumwindows、getwindowtext枚舉所有屏幕上的頂層窗口標(biāo)識(shí)。
在本實(shí)施例的另一種具體實(shí)施方式中,在執(zhí)行完步驟s101之后,還會(huì)獲取軟件的pid(processidentifier,進(jìn)程標(biāo)識(shí)符),pid是大多數(shù)操作系統(tǒng)的內(nèi)核用于唯一標(biāo)識(shí)進(jìn)程的一個(gè)數(shù)值。在這種情況下,對(duì)窗口進(jìn)行識(shí)別可以通過(guò)獲取該新窗口的pid,看新窗口的進(jìn)pid與軟件的pid是否一致,如果一致的話,很明顯該新窗口就是軟件本身運(yùn)行的窗口。采用這種方式可以很容易的就識(shí)別出應(yīng)用窗口類型的窗口。
在上述實(shí)施例中,分別采用兩種不同方式來(lái)對(duì)不同類型的窗口進(jìn)行識(shí)別,其實(shí)當(dāng)新窗不屬于異常窗口類型時(shí),可以大致將該新窗口判定為應(yīng)用窗口類型,但是,這是在用戶沒(méi)有操作任何其他軟件或者沒(méi)有其他非異常窗口類型的窗口出現(xiàn)的情況下。例如,往往用戶在進(jìn)行自動(dòng)安裝某個(gè)軟件的時(shí)候,也可以打開(kāi)其他軟件,進(jìn)行其他操作,所以使用這種方式進(jìn)行判定不準(zhǔn)確。而且采用pid進(jìn)行判斷既方便又準(zhǔn)確。所以,同時(shí)采用異常窗口集識(shí)別異常窗口類型的窗口和利用pid識(shí)別應(yīng)用窗口類型的窗口屬于比較優(yōu)選的方式。
識(shí)別出新窗口的窗口類型之后,執(zhí)行步驟s104,將新窗口的窗口類型與預(yù)設(shè)處理規(guī)則進(jìn)行匹配。在預(yù)設(shè)處理規(guī)則中,定義了針對(duì)各窗口類型進(jìn)行對(duì)應(yīng)的處理方式。例如,具體的,可以設(shè)置當(dāng)窗口類型屬于應(yīng)用窗口類型時(shí),獲取所述窗口的控件信息,并對(duì)所述控件內(nèi)容進(jìn)行操作控制;當(dāng)窗口類型屬于異常窗口類型時(shí),關(guān)閉所述窗口。當(dāng)窗口類型為異常窗口類型的時(shí)候證明該窗口并不是執(zhí)行軟件管理操作所需要的窗口,并且可能會(huì)妨礙對(duì)軟件的管理操作的正常進(jìn)行,所以比較直接的方式是將其關(guān)閉,關(guān)閉方式可以是關(guān)閉相應(yīng)的進(jìn)程。當(dāng)窗口類型為應(yīng)用窗口類型的時(shí)候,證明該窗口是屬于管理操作的對(duì)象,所以, 需要獲取該窗口的各控件信息,并對(duì)控件內(nèi)容進(jìn)行操作控制。由于在本發(fā)明中關(guān)心的窗口類型主要是異常窗口類型和應(yīng)用窗口類型,所以并沒(méi)有對(duì)其他窗口類型進(jìn)行任何說(shuō)明。另外,預(yù)設(shè)處理規(guī)則的具體內(nèi)容也不限于上述設(shè)置方式。
在預(yù)設(shè)處理規(guī)則中已經(jīng)定義好了針對(duì)不同類型的窗口的處理方式,只需要根據(jù)匹配結(jié)果進(jìn)行相應(yīng)處理即可,進(jìn)入步驟s105。如果新窗口類型是異常窗口類型就關(guān)閉該新窗口;如果是應(yīng)用窗口類型,就獲取所述窗口的控件信息,并對(duì)所述控件內(nèi)容進(jìn)行操作控制。由于本實(shí)施例中的管理操作主要包括安裝和卸載,所以此處在獲取到窗口的控件信息主要包括獲取那些鼠標(biāo)可操作的按鈕控件以及可輸入文字的編輯框。此過(guò)程主要是利用windowsapi函數(shù)enumchildwindows枚舉安裝界面上的控件類型以及控件文本,比如edit、cbutton、static等等,在找出按鈕類型的控件后,就可以分析這些控件的文本內(nèi)容,例如控件文本中包含“chooseinstalllocation”、“選擇安裝位置”、“selectdestinationlocation”等關(guān)鍵詞,則表示此窗口屬于修改軟件安裝路徑界面,通過(guò)apisendmessage發(fā)送路徑到指定的控件,完成修改路徑;如果控件文本中包含“我已閱讀并接受許可”、“下一步”、“結(jié)束”、“完成”等關(guān)鍵字,表示屬于正常安裝選擇界面,則通過(guò)apisendmessage發(fā)送鼠標(biāo)單擊消息,模擬人工單擊操作。當(dāng)然如果是異常窗口類型的窗口,將其關(guān)閉,例如,本過(guò)程可以利用windowsapi函數(shù)enumwindows、getwindowtext枚舉所有屏幕上的頂層窗口標(biāo)識(shí)當(dāng)窗口標(biāo)識(shí)與配置文件中異常窗口集中的窗口標(biāo)識(shí)一致時(shí),利用api函數(shù)findwindow獲取窗口句柄,最終利用getwindowthreadprocessid、terminateprocess結(jié)束窗口進(jìn)程。
在本實(shí)施例中,為了方便對(duì)軟件卸載時(shí)更方便的獲取軟件的相關(guān)信息,在本發(fā)明的一種具體實(shí)施例中,在執(zhí)行對(duì)軟件的安裝之前還會(huì)掃描所有磁盤大小及特定的注冊(cè)表項(xiàng),并記錄到臨時(shí)文件中。并且在執(zhí)行完對(duì)軟件的安裝之后還會(huì)第二次掃描所有磁盤大小及特定的注冊(cè)表項(xiàng),這樣就可以知道該軟件所有文件的具體安裝位置,相關(guān)注冊(cè)表項(xiàng),軟件所占空間大小等具體信息。如此,一方面可以確定軟件安裝是否成功,另一方面可以方便卸載。在卸載的時(shí)候根據(jù)該軟件所有文件的具體安裝位置,相關(guān)注冊(cè)表項(xiàng),軟件所占空間大小等具體信息可以知道需要卸載軟件的具體程序和參數(shù),方便完全卸載。另外也可以在軟件卸載流程走完以后進(jìn)行判斷,看軟件卸載是否成功,沒(méi)有卸載成功,可以重新執(zhí)行卸載的步驟。當(dāng)然該卸載不成功也可以包括相關(guān)信息沒(méi)有卸載干凈,例 如注冊(cè)表信息沒(méi)有刪除,此時(shí)只需要?jiǎng)h除注冊(cè)表信息即可。
請(qǐng)參考圖2,為本實(shí)施例中對(duì)軟件進(jìn)行安裝的一種具體實(shí)施方式,包括:
s201:應(yīng)用軟件包分析;
軟件包的分析是整個(gè)業(yè)務(wù)流程的基礎(chǔ),如果是壓縮包形式,則需要先解壓。解壓到臨時(shí)子目錄上。
s202:掃描應(yīng)用軟件目錄;
查找是否有windows安裝包程序,如果有windows安裝包程序,也就是當(dāng)前的系統(tǒng)中已經(jīng)存在該待安裝的軟件;則會(huì)提示警告性信息,維護(hù)人員可以中斷后續(xù)的處理流程。
s203:第一次磁盤掃描以及注冊(cè)表,記錄現(xiàn)有磁盤大小以及注冊(cè)表中已有的安裝軟件。
通過(guò)hkey_local_machine項(xiàng)以及hkey_users掃描所有子項(xiàng)的“software\microsoft\windows\currentversion\uninstall”注冊(cè)表項(xiàng)中“displayname”的值。并記錄到臨時(shí)文件中。
s204:?jiǎn)?dòng)系統(tǒng)窗口監(jiān)控線程;
在軟件安裝過(guò)程中,可能出現(xiàn)異常窗口類型的窗口,可通過(guò)配置文件配置窗口標(biāo)識(shí)進(jìn)行處理,例如窗口標(biāo)識(shí)為“程序兼容性助手”、“windows安全警報(bào)”、“桌面小工具-安全警告”以及ie瀏覽器彈窗等。本過(guò)程主要利用windowsapi函數(shù)enumwindows、getwindowtext枚舉所有屏幕上的頂層窗口標(biāo)題,如果窗口標(biāo)識(shí)與配置文件中需要處理的標(biāo)識(shí)文本一致時(shí),利用api函數(shù)findwindow獲取窗口句柄,最終利用getwindowthreadprocessid、terminateprocess結(jié)束窗口進(jìn)程。
s205:獲取安裝軟件相關(guān)的pid,并判斷是否有子進(jìn)程,若有,則證明軟件安裝正在執(zhí)行,則執(zhí)行s206;否則執(zhí)行s211;
s206:掃描所有可見(jiàn)窗口的窗口句柄,通過(guò)句柄得到其pid;
s207:選擇pid與軟件的pid一致的可見(jiàn)窗口,并獲取該窗口的控件信息;
控件信息中包含鼠標(biāo)可操作的按鈕控件以及可輸入文字的編輯框。安裝過(guò)程中可以替換默認(rèn)安裝路徑,主要是通過(guò)分析窗口中的文本信息或者按鈕信息。 此過(guò)程主要是利用windowsapi函數(shù)enumchildwindows枚舉安裝界面上的控件類型以及控件文本,比如edit、cbutton、static等等,在找出按鈕類型的控件后,就可以分析這些控件的文本內(nèi)容,例如控件文本中包含“chooseinstalllocation”、“選擇安裝位置”、“selectdestinationlocation”等關(guān)鍵詞,則表示此窗口屬于修改軟件安裝路徑界面,通過(guò)apisendmessage發(fā)送路徑到指定的控件,完成修改路徑;如果控件文本中包含“我已閱讀并接受許可”、“下一步”、“結(jié)束“、“完成”等關(guān)鍵字,表示屬于正常安裝選擇界面,則通過(guò)apisendmessage發(fā)送鼠標(biāo)單擊消息,模擬人工單擊操作。
s208:進(jìn)行第二次磁盤以及注冊(cè)表掃描。
計(jì)算出磁盤變化大小,對(duì)比第一次掃描和第二次掃描兩次掃描后注冊(cè)表中變化,得出軟件安裝列表。
s209:根據(jù)安裝列表判斷軟件安裝是否成功,若是,進(jìn)入s211;否則,執(zhí)行s210。
s210:選擇是否重新進(jìn)行安裝,若是,則重新執(zhí)行201;否則,進(jìn)入s211。
s211:結(jié)束安裝流程。
請(qǐng)參考圖3,為本實(shí)施例中對(duì)軟件進(jìn)行卸載的一種具體實(shí)施方式,包括:
s301:依據(jù)軟件安裝過(guò)程中掃描注冊(cè)表所得軟件安裝列表。
根據(jù)軟件名稱匹配注冊(cè)表項(xiàng)中“displayname”,從而得到“uninstallstring”的值,即軟件卸載。
s302:運(yùn)行“uninstallstring”對(duì)應(yīng)的軟件卸載命令,啟動(dòng)卸載程序。
s303:?jiǎn)?dòng)系統(tǒng)窗口監(jiān)控線程。
其監(jiān)控過(guò)程,以及異常窗口類型的窗口處理方式與s204中類似。
s304:獲取安裝軟件相關(guān)的pid,并判斷是否有子進(jìn)程,若有,則證明軟件卸載正在執(zhí)行,則執(zhí)行s304;否則執(zhí)行s309。
s305:掃描所有可見(jiàn)窗口的窗口句柄,通過(guò)句柄得到其pid。
s306:選擇pid與軟件的pid一致的可見(jiàn)窗口,并獲取該窗口的控件信息。
獲取該窗口的控件信息,便可模擬人工卸載應(yīng)用軟件,此過(guò)程利用enumwindows、findwindow、getwindowthreadprocessid等windowsapi函數(shù),分 析當(dāng)前可見(jiàn)窗口中屬于安裝進(jìn)程id的卸載窗口,如果存在可見(jiàn)窗口,利用enumchildwindows、getwindowrect、getwindowtext函數(shù)枚舉窗口所有控件的文本、位置等信息,如安裝界面上的控件的文本為“卸載“、”刪除“、”remove“、”uninstall“等等。則利用sendmessage發(fā)送鼠標(biāo)單擊消息,完成界面操作。
s307:判斷軟件卸載是否成功,若是,進(jìn)入s309;否則,執(zhí)行s308。
s308:選擇是否重新進(jìn)行卸載,若是,則重新執(zhí)行301;否則,進(jìn)入s309.
s309:結(jié)束卸載流程。
上述示例僅作為對(duì)本發(fā)明方案的說(shuō)明,并不對(duì)本發(fā)明的方案做任何限制。采用本發(fā)明中的管理方法,可以完成對(duì)軟件的自動(dòng)化安裝和卸載,同時(shí)可以很好的避免異常窗口造成的安裝或卸載中斷的問(wèn)題,提高了用戶體驗(yàn)。
實(shí)施例二:
本實(shí)施例中還提供一種軟件管理裝置,請(qǐng)參考圖4,軟件管理裝置4包括:操作模塊41、窗口處理模塊42、執(zhí)行模塊43;操作模塊41用于獲取軟件信息,并開(kāi)始執(zhí)行對(duì)所述軟件的管理操作;窗口處理模塊42用于在管理操作過(guò)程中對(duì)系統(tǒng)窗口進(jìn)行監(jiān)控;當(dāng)監(jiān)控到系統(tǒng)界面上有新窗口產(chǎn)生,識(shí)別新窗口的窗口類型,將窗口類型與預(yù)設(shè)窗口處理規(guī)則進(jìn)行匹配,預(yù)設(shè)窗口處理規(guī)則定義針對(duì)各窗口類型進(jìn)行對(duì)應(yīng)的處理方式;執(zhí)行模塊43用于根據(jù)匹配結(jié)果對(duì)所述新窗口進(jìn)行處理,完成對(duì)所述軟件的管理操作。
窗口類型包括應(yīng)用窗口類型和異常窗口類型;預(yù)設(shè)窗口處理規(guī)則包括:當(dāng)窗口類型屬于應(yīng)用窗口類型時(shí),執(zhí)行模塊43獲取窗口的控件信息,并對(duì)控件內(nèi)容進(jìn)行操作控制;當(dāng)窗口類型屬于異常窗口類型時(shí),關(guān)閉窗口。軟件管理裝置4還包括設(shè)置模塊44用于在獲取軟件信息之前預(yù)先設(shè)置異常窗口集,異常窗口集包括所有屬于異常窗口類型窗口的窗口標(biāo)識(shí)。窗口處理模塊42還包括第一識(shí)別子模塊421用于獲取新窗口的窗口標(biāo)識(shí),并判斷新窗口是否屬于異常窗口集,若是,則新窗口的窗口類型為異常窗口類型。
軟件管理裝置4還包括獲取模塊45:用于在在執(zhí)行對(duì)軟件的管理操之后,識(shí)別新窗口的窗口類型之前,獲取軟件的進(jìn)程標(biāo)識(shí)符;窗口處理模塊42還包括第二識(shí)別子模塊422,用于獲取新窗口的進(jìn)程標(biāo)識(shí)符,判斷新窗口的進(jìn)程標(biāo)識(shí)符與軟件的進(jìn)程標(biāo)識(shí)符是否一致,若是,則所述新窗口的窗口類型為應(yīng)用窗口類 型。執(zhí)行對(duì)所述軟件的管理操作包括執(zhí)行對(duì)所述軟件的安裝或卸載。
還包括重處理模塊46,用于當(dāng)執(zhí)行對(duì)軟件的管理操為執(zhí)行對(duì)所述軟件的卸載時(shí),在完成對(duì)軟件的卸載之后,查詢注冊(cè)表中是否還有所述軟件相關(guān)信息,若是,則重復(fù)對(duì)所述軟件進(jìn)行卸載的步驟或者刪除注冊(cè)表內(nèi)所述軟件的相關(guān)信息。該實(shí)施例中的軟件管理裝置可用于執(zhí)行實(shí)施例一中的軟件管理方法。
本實(shí)施例中還提供一種終端,該終端可以包括但不限于筆記本電腦,臺(tái)式機(jī),移動(dòng)終端等等。該終端包括本實(shí)施例中的軟件管理裝置,可用于對(duì)軟件進(jìn)行管理,執(zhí)行上述實(shí)施例一中的軟件管理方法。
上述示例僅作為對(duì)本發(fā)明方案的說(shuō)明,并不對(duì)本發(fā)明的方案做任何限制。采用本實(shí)施例中的軟件管理裝置,可以很好的避免異常窗口造成的安裝或卸載中斷的問(wèn)題,卸載或安裝過(guò)程由軟件管理裝置自動(dòng)執(zhí)行,提高了用戶體驗(yàn)。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述本發(fā)明的各模塊或各步驟可以用通用的計(jì)算裝置來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)介質(zhì)(rom/ram、磁碟、光盤)中由計(jì)算裝置來(lái)執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來(lái)實(shí)現(xiàn)。所以,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
以上內(nèi)容是結(jié)合具體的實(shí)施方式對(duì)本發(fā)明所作的進(jìn)一步詳細(xì)說(shuō)明,不能認(rèn)定本發(fā)明的具體實(shí)施只局限于這些說(shuō)明。對(duì)于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡(jiǎn)單推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。