两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種操作注冊表的方法及裝置制造方法

文檔序號:6518516閱讀:228來源:國知局
一種操作注冊表的方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種操作注冊表的方法及其裝置。該方法包括:啟動注冊表編輯器;獲取所述注冊表編輯器的窗口句柄;根據(jù)所述窗口句柄通過調(diào)用界面函數(shù)對所述注冊表編輯器進行操作。本發(fā)明通過調(diào)用界面函數(shù)啟動注冊表編輯器,并調(diào)用界面函數(shù)對注冊表進行操作,能夠?qū)崿F(xiàn)操作注冊表功能的合法性,能夠保證對注冊表的進行安全操作,同時也確保了系統(tǒng)的安全性。
【專利說明】一種操作注冊表的方法及裝置
【技術(shù)領域】
[0001]本發(fā)明涉及計算機領域,尤其涉及一種操作注冊表的方法及裝置。
【背景技術(shù)】
[0002]注冊表在Windows系統(tǒng)的配置和控制方面扮演了一個非常關(guān)鍵的角色,其是系統(tǒng)全局設置和用戶設置形象的存儲倉庫,也是Windows執(zhí)行體和內(nèi)核所維護的各種內(nèi)存中數(shù)據(jù)結(jié)構(gòu)的一個窗口,所有的軟件信息和硬件信息都是通過注冊表來管理的。如果注冊表由于某種原因受到破壞,輕者使Windows的啟動過程出現(xiàn)異常,重者可能會導致整個Windows系統(tǒng)的完全癱瘓。為了保護注冊表,Windows提供兩種常規(guī)的操作方法:一種是注冊表編輯器Regedit.exe,即通過用戶界面來操作;另一種是提供大量的API供用戶訪問和修改注冊表中的數(shù)據(jù)。用戶通過注冊表編輯器看到的注冊表結(jié)構(gòu)是經(jīng)過注冊表編輯器讀取之后呈現(xiàn)給用戶的,其磁盤形式并不是一個簡單的大文件,而是一組HIVE文件形式。
[0003]從Inte 180386開始,出于安全性和穩(wěn)定性的考慮,該系列的CPU可以運行于ringO?ring3從高到低四個不同的權(quán)限級,對數(shù)據(jù)也提供相應的四個保護級別。其中ringO優(yōu)先級最高,用于操作內(nèi)核;ringl和ring2都用于操作系統(tǒng)服務;ring3優(yōu)先級最低,用于應用程序。運行于較低級別的代碼不能隨意調(diào)用高級別的代碼和訪問較高級別的數(shù)據(jù),而且也只有運行在ringO層的代碼可以直接對物理硬件進行訪問。
[0004]圖1示出了 Windows操作系統(tǒng)利用CPU運行級別的圖形化示意圖。如圖1所示,Windows只利用了 CPU的兩個運行級別。一個被稱為內(nèi)核模式,即對應80 X 86的ringO層,是操作系統(tǒng)的核心部分,設備驅(qū)動程序就是運行在該模式下;另一個被稱為用戶模式,即對應80X86的ring3層,操作系統(tǒng)的用戶接口部分(Win API)以及所有的用戶應用程序都運打在該級別。
[0005]Windows對運行在內(nèi)核模式組件的空間并不提供讀/寫保護,但是在裝有殺毒軟件等安全軟件的機器上,如果調(diào)用內(nèi)核模式下的注冊表API對注冊表進行危險操作,殺毒軟件等防護軟件就會對相應的注冊表API調(diào)用進行攔截,更有可能直接攔截調(diào)用此類API的應用程序,以防止其破壞系統(tǒng)的安全。
[0006]注冊表是系統(tǒng)的關(guān)鍵部位,病毒和惡意軟件常常會在注冊表的啟動項里面寫入自己的啟動鍵值來達到自啟動的目的,有些病毒還會修改注冊表內(nèi)容來映像劫持殺毒軟件。通常殺毒軟件會對注冊表進行監(jiān)控,或者對注冊表保護項進行保護,防止惡意程序或者病毒篡改注冊表,從而破壞系統(tǒng)。調(diào)用系統(tǒng)API的程序,在運行的過程中對注冊表的操作也處于殺毒軟件監(jiān)控之下。第三方軟件的運行方式是通過主動調(diào)用系統(tǒng)API函數(shù)進行注冊表操作,但這種方式在大多數(shù)情況下都會觸碰到安全軟件的防護策略,導致第三方軟件被直接攔截執(zhí)行,這樣就無法實現(xiàn)自動化程序去模擬一些真實的測試環(huán)境,進行有效測試工作。
[0007]現(xiàn)有技術(shù)中,第三方軟件操作注冊表通常是采用Windows API中提供的函數(shù)來實現(xiàn),比如 RegCreateKey, RegCreateKeyEx, RegSetValueEx, RegDeleteValue 等,通過這些函數(shù)可以對注冊表進行讀取,寫入,刪除,以及打開操作。[0008]這種通過Windows API訪問和修改注冊表中的數(shù)據(jù),需要層層調(diào)用轉(zhuǎn)移,由內(nèi)核的注冊表API再調(diào)用文件系統(tǒng)的驅(qū)動等,去訪問磁盤上的HIVE文件,并最終返回請求的數(shù)據(jù)結(jié)果。如果程序運行在有保護機制的環(huán)境(比如安裝殺毒軟件)中,很可能會被攔截,不能正確執(zhí)行。并且這些API并不是所有平臺都適用,如NT和Windows98都是32位操作系統(tǒng),但是有些API函數(shù)中并不支持Windows98。
[0009]現(xiàn)有技術(shù)中第三方軟件操作注冊表使用的常規(guī)方法存在以下的主要缺點:
[0010]I)可移植性低。
[0011]2)執(zhí)行有效性低。
[0012]3)運行環(huán)境受限。
[0013]4)在存在防護軟件的環(huán)境下有各種被誤報的風險。
[0014]而現(xiàn)有技術(shù)中也有通過技術(shù)手段hook API或者對殺毒軟件進行攻防操作的行為,但是其過程較為繁瑣同時不具備通用性以及合法性。
[0015]因此提供一種合理并且通用的方式,在與各種殺毒軟件或者防護軟件并存的情況下,能夠通過調(diào)用內(nèi)核模式下的注冊表API對注冊表進行操作,同時能防止殺毒軟件等防護軟件的攔截,是非常必要的。

【發(fā)明內(nèi)容】

[0016]為解決現(xiàn)有技術(shù)中存在的上述問題,本發(fā)明提供了一種操作注冊表的方法及其裝置。
[0017]根據(jù)本發(fā)明的一個方面,其提供了一種操作注冊表的方法,包括:
[0018]啟動注冊表編輯器;
[0019]獲取所述注冊表編輯器的窗口句柄;
[0020]根據(jù)所述窗口句柄通過調(diào)用界面函數(shù)對所述注冊表編輯器進行操作。
[0021]可選地,所述通過調(diào)用界面函數(shù)對注冊表進行操作包括:獲取注冊表編輯器的菜單項,模擬鼠標和/或鍵盤對所述菜單項進行操作。
[0022]可選地,獲取注冊表編輯器的菜單項包括:
[0023]獲取系統(tǒng)所有頂級窗口句柄,形成第一窗口句柄列表;
[0024]在預定位置模擬鼠標點擊操作;
[0025]在預定時間間隔內(nèi),再次獲取系統(tǒng)所有頂級窗口句柄,形成第二窗口句柄列表;
[0026]獲取第一窗口句柄列表和第二窗口句柄列表的差集;
[0027]從所述差集中獲取菜單的窗口句柄;
[0028]根據(jù)所述菜單的窗口句柄獲取菜單項。
[0029]可選地,所述通過調(diào)用界面函數(shù)對注冊表進行操作包括:獲取展開鍵坐標和/或鍵值項坐標,并模擬鼠標進行操作。
[0030]可選地,獲取展開鍵坐標包括:
[0031]獲取注冊表編輯器中根鍵的界面句柄;
[0032]根據(jù)根鍵的界面句柄,調(diào)用界面函數(shù)從樹根逐層查找,獲取展開鍵的坐標。
[0033]可選地,獲取鍵值項坐標包括:
[0034]模擬鼠標操作,在獲取到的展開鍵的坐標位置執(zhí)行點擊操作;[0035]查找鍵值項所在界面的界面句柄;
[0036]根據(jù)所述鍵值項所在的界面句柄,從該界面列表中遍歷查找,并獲取所述鍵值項的坐標。
[0037]可選地,所述預定位置包括鍵值項的坐標和/或注冊表編輯器的菜單欄。
[0038]根據(jù)本發(fā)明提供的另一方面,其提供了一種操作注冊表的裝置,包括:
[0039]啟動模塊,其用于啟動注冊表編輯器;
[0040]獲取模塊,其用于獲取所述注冊表編輯器的窗口句柄;
[0041]操作模塊,其用于根據(jù)所述窗口句柄通過調(diào)用界面函數(shù)對所述注冊表編輯器進行操作。
[0042]可選地,所述操作模塊包括:
[0043]菜單項操作模塊,其用于獲取注冊表編輯器的菜單項,模擬鼠標和/或鍵盤對所述菜單項進行操作。
[0044]可選地,所述菜單項操作模塊如下獲取注冊表上的菜單項:
[0045]獲取系統(tǒng)所有頂級窗口句柄列表;
[0046]在預定位置模擬鼠標點擊操作;
[0047]在預定時間間隔內(nèi),獲得系統(tǒng)所有頂級窗口句柄列表;
[0048]比較第一次和第二次分別獲得的所有頂級窗口句柄列表的差集;
[0049]從所述差集找到彈出菜單的窗口句柄;
[0050]根據(jù)所述菜單的窗口句柄獲得相應的菜單項。
[0051 ] 可選地,所述操作模塊包括:
[0052]坐標獲取模塊,其用于獲取展開鍵坐標和/或展開鍵值項坐標,并模擬鼠標進行操作。
[0053]可選地,所述坐標獲取模塊如下獲取展開鍵坐標:
[0054]獲取注冊表編輯器中根鍵的界面句柄;
[0055]根據(jù)根鍵的界面句柄,調(diào)用界面函數(shù)從樹根逐層查找,獲取展開鍵的坐標。
[0056]可選地,坐標獲取模塊如下獲取展開鍵值項坐標:
[0057]模擬鼠標操作,在獲取到的展開鍵的坐標位置執(zhí)行點擊操作;
[0058]查找鍵值項所在界面的界面句柄;
[0059]根據(jù)所述鍵值項所在的界面句柄,從該界面列表中遍歷查找,并獲取所述鍵值項的坐標。
[0060]可選地,所述預定位置包括展開鍵值項的坐標和/或注冊表編輯器的菜單欄。
[0061]本發(fā)明提出的上述方案適用于任何平臺,其通過模仿用戶的鼠標及鍵盤動作,在系統(tǒng)自帶的注冊表編輯器界面上對注冊表進行操作。該方案在與各種殺毒軟件或者防護軟件并存的情況下,能夠?qū)崿F(xiàn)模擬真實用戶進行注冊表操作的行為,同時可以忽略平臺的差異性,適用于各種圖形化操作系統(tǒng)中對注冊表進行操作的場景。本發(fā)明能夠?qū)崿F(xiàn)操作注冊表功能的合法性,能夠保證對注冊表的進行安全操作,同時也確保了系統(tǒng)安全性。
[0062]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的【具體實施方式】加以說明?!緦@綀D】

【附圖說明】
[0063]圖1是Windows操作系統(tǒng)利用CPU運行級別的圖形化示意圖;
[0064]圖2是本發(fā)明中操作注冊表的方法流程圖;
[0065]圖3是在Windows系統(tǒng)下模擬用戶手動操作打開注冊表編輯器的其中一種方法流程圖;
[0066]圖4是本發(fā)明中獲取注冊表編輯器菜單項的方法流程圖;
[0067]圖5是本發(fā)明中新建展開鍵的方法流程圖;
[0068]圖6是本發(fā)明中獲取展開鍵坐標的方法流程圖;
[0069]圖7是本發(fā)明中獲取鍵值項坐標的方法流程圖;
[0070]圖8是利用本發(fā)明在Windows系統(tǒng)下在注冊表編輯器中修改鍵值項的實施方式流程圖;
[0071]圖9是利用本發(fā)明在Windows系統(tǒng)下獲取注冊表編輯器中展開鍵坐標的實施方式流程圖;
[0072]圖10是利用本發(fā)明在Windows系統(tǒng)下獲取注冊表編輯器中鍵值項坐標的實施方式流程圖;
[0073]圖11示出了利用本發(fā)明在Windows系統(tǒng)下注冊表編輯器中修改鍵值項的另一種實施方式流程圖;
[0074]圖12是本發(fā)明中操作注冊表的裝置的模塊化結(jié)構(gòu)圖。
【具體實施方式】
[0075]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下結(jié)合具體實施例,并參照附圖,對本發(fā)明進一步詳細說明。
[0076]圖2示出了本發(fā)明提供的一種操作注冊表的方法流程圖。如圖2所示,該方法包括:
[0077]步驟201:啟動注冊表編輯器;
[0078]步驟202:獲取所述注冊表編輯器的窗口句柄;
[0079]步驟203:根據(jù)所述窗口句柄通過調(diào)用界面函數(shù)對所述注冊表編輯器進行操作。
[0080]步驟201:啟動注冊表編輯器。
[0081]在Windows系統(tǒng)中,啟動注冊表編輯器的方式可以有多種,如通過系統(tǒng)提供的API接口模擬用戶手動操作打開注冊表編輯器,或者調(diào)用系統(tǒng)提供的API接口直接啟動注冊表編輯器等。
[0082]可選地,如果模擬用戶手動操作來打開注冊表編輯器,可以通過模擬Win+R的系統(tǒng)熱鍵調(diào)起“運行”窗口,并在打開路徑中輸入Register, exe,然后模擬用戶鼠標點擊該“運行”窗口上的“確定”,啟動注冊表編輯器。
[0083]本領域的技術(shù)人員可以理解,本文所稱界面函數(shù)是指系統(tǒng)或開發(fā)平臺提供的對計算機系統(tǒng)的圖形用戶界面進行操作的函數(shù)。
[0084]圖3示出了在Windows系統(tǒng)下模擬用戶手動操作打開注冊表編輯器的其中一種方法流程圖。如圖3所示,該方法包括:[0085]步驟301:通過調(diào)用系統(tǒng)API接口 “keybd_event”輸入鍵盤虛擬碼“VK_LWIN+R”調(diào)出“運行”窗口 ;
[0086]步驟302:調(diào)用系統(tǒng) API 接口 “FindWindow&EnumChiIdWindows” 查找窗口“ClaSSName=Eidt”的輸入框的句柄“hedit”,即獲得“運行”窗口上的輸入框句柄,然后調(diào)用系統(tǒng)API接口 “SendMessage”向此句柄“hedit”發(fā)送消息號“WM_SETTEXT”,其參數(shù)為“Register, exe”,即模擬手工操作向所述輸入框輸入“Register, exe” ;
[0087]步驟303:調(diào)用系統(tǒng) API 接 P “FindWindow&EnumChildWindows” 查找窗口"WindowsName= ‘確定’ ”的按鈕句柄“hbtn”,即獲得“運行”窗口上的確定按鈕句柄,并調(diào)用系統(tǒng)API接口 “PostMessage”向句柄“hbtn”發(fā)送BN_CLICKED消息,即模擬手工點擊確定按鈕,打開注冊表編輯器。
[0088]當然上述方式中,也可以通過快捷鍵等鍵盤模擬方式進行操作。另外,每種操作系統(tǒng)中注冊表編輯器的打開路徑不盡相同,可以根據(jù)實際情況模擬用戶操作來啟動注冊表編輯器。
[0089]步驟202:獲取所述注冊表編輯器的窗口句柄。在Windows系統(tǒng)中,每個打開的窗口都具有特定的句柄,通過獲得該句柄即可對其進行操作。
[0090]依據(jù)上面所舉的例子,通過模擬用戶手動操作打開注冊表編輯器后,可以在一個超時時間5s內(nèi),輪詢調(diào)用系統(tǒng)API接口 “FindWindow”,查找窗口“ClassName=RegisterWindowClass”的句柄,即查找獲得Register, exe注冊表編輯器的窗口句柄。
[0091]步驟203:根據(jù)所述窗口句柄通過調(diào)用界面函數(shù)對所述注冊表編輯器進行操作。具體地,對注冊表的操作包括導入或?qū)С鲎晕募?新建、刪除或重命名鍵或鍵值項,修改鍵值項等。對于上述這些對注冊表的操作,都可以通過調(diào)用界面函數(shù)來實現(xiàn)。
[0092]可選地,所述通過調(diào)用界面函數(shù)對注冊表進行操作包括:獲取注冊表編輯器的菜單項,模擬鼠標和/或鍵盤對所述菜單項進行操作。
[0093]圖4示出了本發(fā)明中獲取注冊表編輯器的菜單項的方法流程圖。如圖4所示,獲取注冊表編輯器菜單項的方法包括如下步驟:
[0094]步驟401:獲取系統(tǒng)所有頂級窗口句柄,形成第一窗口句柄列表;
[0095]步驟402:在預定位置模擬鼠標點擊操作;
[0096]步驟403:在預定時間間隔內(nèi),再次獲取系統(tǒng)所有頂級窗口句柄,形成第二窗口句柄列表;
[0097]步驟404:獲取第一窗口句柄列表和第二窗口句柄列表的差集;
[0098]步驟405:從所述差集中獲取菜單的窗口句柄;
[0099]步驟406:根據(jù)所述菜單的窗口句柄獲取菜單項。
[0100]可選地,所述預定位置包括鍵值項的坐標和/或注冊表編輯器的菜單欄。對于不同的操作,可以選擇直接在相應鍵值項上模擬鼠標右鍵選擇對應的菜單進行操作,也可以直接在注冊表編輯器的菜單欄上進行操作。例如,對于導入、導出、新建和重命名操作,可以選擇利用注冊表編輯器的菜單欄進行操作,而其他操作可以選擇在相應鍵值項上模擬鼠標右鍵選擇對應的菜單進行操作,當然如導出、新建和重命名等操作兩種方式皆可。
[0101]下面以新建鍵和/或鍵值項為例來詳細說明獲取注冊表編輯器中菜單項的具體流程。圖5示出了本發(fā)明中新建展開鍵的方法流程圖。如圖5所示,該具體流程包括:
[0102]步驟501:通過系統(tǒng)API接口 EnumChildWindows獲取系統(tǒng)的所有頂級窗口句柄列表,記為第一窗口句柄列表hwndlistl ;
[0103]步驟502:在預定的位置處,通過操作系統(tǒng)提供的API接口 mouse_event傳遞參數(shù)MOUSEEVENTF_RIGHTDOWN&MOUSEEVENTF_RIGHTUP,以模擬鼠標右鍵操作。
[0104]步驟503:在一個超時時間內(nèi)(默認5s),循環(huán)調(diào)用系統(tǒng)API接口EnumChildffindows獲得一份系統(tǒng)中當前所有的頂級窗口句柄,記為第二窗口句柄列表hwndlist2 ;
[0105]步驟504:計算第二窗口句柄列表hwndlist2與第一窗口句柄列表hwndlistl的
差集;
[0106]步驟505:在所述差集中查找ClassName=#32768的句柄,即彈出菜單項的窗口句柄 hwnd ;
[0107]步驟506:通過系統(tǒng)API接口 GetMenu將所述彈出菜單項的窗口句柄hwnd轉(zhuǎn)換為菜單句柄hmenu ;
[0108]步驟507:根據(jù)所述菜單句柄hmenu調(diào)用系統(tǒng)API接口 GetMenuItemCount獲取此菜單中所有菜單項個數(shù),并調(diào)用系統(tǒng)API接口 GetMenuItemInfo遍歷每一個菜單項,獲取其文字信息為“新建”的菜單項,并返回該菜單項所在的位置坐標(x,y),模擬用戶將鼠標光標放置在該位置坐標(X,y),并根據(jù)上面介紹的步驟查找彈出菜單,如此遞歸繼續(xù)查找到文字信息為“項”的菜單項所對應的位置坐標;
[0109]步驟508:在所找到的“項”菜單項對應的位置坐標處,模擬用戶鼠標點擊操作,并模擬用戶的鍵盤操作,輸入新建鍵的名稱,并模擬回車操作,完成鍵的新建操作。
[0110]鍵值項的新建操作與上述鍵的新建操作類似,所不同的是最后查找的是文字信息為“字符串值”、“二進制值”、“DWORD值”、“多字符串值”或“可擴充字符串值”等。
[0111]所述步驟502中預定的位置可以是注冊表編輯器窗口中左邊界面上要新建的鍵的父鍵坐標,也可以是所述父鍵對應的右邊界面上任意位置的坐標。
[0112]另外,所述新建操作還可以通過獲取注冊表編輯器上的系統(tǒng)菜單來完成,具體為:獲取注冊表編輯器的窗口句柄,并根據(jù)所述窗口句柄獲取其菜單句柄,根據(jù)所述菜單句柄找到“編輯”菜單項的位置坐標后,模擬將鼠標光標置于該位置坐標處,并查找彈出菜單,如此遞歸繼續(xù)查找到文字信息為“項”的菜單項所對應的位置坐標,并進行相應的新建操作。
[0113]可選地,所述通過調(diào)用界面函數(shù)對注冊表進行操作還包括:獲取展開鍵坐標和/或鍵值項坐標,并模擬鼠標進行操作。
[0114]圖6示出了本發(fā)明中獲取展開鍵坐標的方法流程圖。如圖5所示,獲取展開鍵坐標的方法包括:
[0115]步驟601:獲取注冊表編輯器中根鍵的界面句柄;
[0116]步驟602:根據(jù)根鍵的界面句柄,調(diào)用界面函數(shù)從樹根逐層查找,獲取展開鍵的坐標。
[0117]圖7示出了本發(fā)明中獲取鍵值項坐標的方法流程圖。如圖7所示,獲取鍵值項坐標的方法包括:
[0118]步驟701:模擬鼠標操作,在獲取到的展開鍵的坐標位置執(zhí)行點擊操作;[0119]步驟702:查找鍵值項所在界面的界面句柄;
[0120]步驟703:根據(jù)所述鍵值項所在的界面句柄,從該界面列表中遍歷查找,并獲取所述鍵值項的坐標。
[0121]下面以修改鍵值項為例簡要說明一下注冊表編輯器的操作流程。
[0122]圖8示出了利用本發(fā)明在Windows系統(tǒng)下在注冊表編輯器中修改鍵值項的詳細實施方式流程圖。如圖8所示,該方法包括:
[0123]步驟801:通過調(diào)用系統(tǒng)接口運行注冊表編輯器Regedit,并獲取Regedit的界面句柄;
[0124]步驟802:拆分待修改的目標鍵值項路徑;比如需要修改鍵HKEY_CURRENT_CONFIG\ Software \ Fonts的鍵值項LogPixels的鍵值內(nèi)容,則第一次則將其拆分成鍵HKEY_CURRENT_CONFIG \ Software \ Fonts 和鍵值項 LogPixels ;鍵 HKEY_CURRENT_C0NFIG \Software \ Fonts位于Regedit界面左邊部分的樹狀結(jié)構(gòu)中,而鍵值項LogPixels則位于Regedit界面右邊部分的列表結(jié)構(gòu)中;
[0125]步驟803:根據(jù)Regedit的窗口句柄,查找Regedit界面左邊部分的根鍵子鍵的窗口句柄;
[0126]步驟804:根據(jù)根鍵子鍵的窗口句柄,調(diào)用GUI函數(shù)從樹根層層查找,定位子鍵的坐標位置,比如最終定位找到HKEY_CURRENT_C0NFIG \ Software \ Fonts中的子鍵Fonts的坐標位置;
[0127]步驟805:找到子鍵的坐標位置后,模擬鼠標操作,點擊定位到的坐標位置,使該子鍵對應的鍵值項信息顯示在Regedit界面右部的列表結(jié)構(gòu)中;
[0128]步驟806:獲取Regedit界面右部的根鍵值項的界面句柄,并根據(jù)所述根鍵值項的界面句柄,遍歷所述列表結(jié)構(gòu),最終定位待查找鍵值項的坐標位置;
[0129]步驟807:在所找到的鍵值項的坐標位置上,模擬鼠標右鍵操作,彈出菜單項,并從所述菜單項中選擇“修改”菜單項進行修改操作。
[0130]下面詳細說明在注冊表編輯器中獲取展開鍵坐標和獲取鍵值項坐標的方法步驟。
[0131]圖9示出了利用本發(fā)明在Windows系統(tǒng)下獲取注冊表編輯器中展開鍵坐標的詳細實施方式流程圖。如圖9所示,該方法包括:
[0132]步驟901:通過系統(tǒng)API接口 FindWindow查找類型SysTreeView32的窗口,獲取注冊表編輯器中鍵(注冊表編輯器左邊界面)的窗口句柄hwnd ;
[0133]步驟902:調(diào)用系統(tǒng)API接口 SendMessage向所述鍵窗口句柄hwnd發(fā)送消息號TVM_GETNEXTITEM,其參數(shù)為“TVGN_R00T”,以獲取注冊表編輯器中根鍵HKEY_CLASSES_ROOT 的信息 hitem ;
[0134]步驟903:調(diào)用系統(tǒng)API接口 WriteProcessMemory申請一塊內(nèi)存rectAddr,其結(jié)構(gòu)體形式為TVITEM ;
[0135]步驟904:調(diào)用系統(tǒng)API接口 SendMessage向所述鍵窗口句柄hwnd發(fā)送消息號TVM_GETNEXTITEM,參數(shù)為“ I ”,獲取所述根鍵HKEY_CLASSES_R00T下的第一個鍵信息item,并保存到內(nèi)存塊rectAddr中,同時把其父節(jié)點即根鍵HKEY_CLASSES_R00T的信息hitem也保存到內(nèi)存塊rectAddr中;
[0136]步驟905:調(diào)用系統(tǒng)API接口 ReadProcessMemory從內(nèi)存塊rectAddr中讀取所述第一個鍵信息item,該鍵信息包含text和rect,分別表示文字信息和位置坐標;
[0137]步驟906:調(diào)用系統(tǒng)API接口 GetWindowRect向所述鍵窗口句柄hwnd發(fā)消息,以獲取該鍵窗口句柄hwnd的位置坐標rect ;
[0138]步驟907:根據(jù)所述鍵窗口句柄hwnd對應的位置坐標rect和所述第一個鍵信息item中包含的位置坐標rect計算出該第一個鍵在所述鍵窗口的相對坐標pos ;
[0139]步驟908:用同樣的方法,循環(huán)查找第一個鍵item的子鍵childHitem,獲取子鍵childHitem的文字信息和坐標位置,匹配其文字信息是否與給定的鍵名相同;
[0140]步驟909:如果相同,則調(diào)用系統(tǒng)API接口 SendMessage給所述鍵窗口句柄hwnd發(fā)消息TVM_EXPAND,參數(shù)為TVE_EXPAND,使該第一個鍵展開,并顯示在界面居中位置,調(diào)用系統(tǒng)API接口 SendMessage給所述鍵窗口句柄hwnd發(fā)消息TVM_SELECTITEM,參數(shù)為TVGN_CARET,以選中所述第一個鍵;
[0141]步驟910:如果不相同,則依次查找與所述第一個鍵相鄰的下一個鍵nextitem,并使用同樣的方法,循環(huán)查找下一個鍵nextitem的子鍵,直到找到給定的鍵,并獲取該給定鍵的坐標。
[0142]圖10示出了利用本發(fā)明在Windows系統(tǒng)下獲取注冊表編輯器中鍵值項坐標的詳細實施方式流程圖。如圖10所示,該方法包括:
[0143]步驟1001:通過系統(tǒng)API接口 FindWindow查找類型SysListView32的窗口,獲取鍵值項(注冊表編輯器右邊界面)的窗口句柄hwnd;
[0144]步驟1002:調(diào)用系統(tǒng)API接口 SendMessage向所述鍵值項窗口句柄hwnd發(fā)送LVM_GETITEMC0UNT的消息號,獲取所述鍵值項窗口句柄hwnd對應的鍵值項數(shù)量count,即鍵值項行數(shù);
[0145]步驟1003:遍歷所述鍵值項窗口中的每行鍵值項對應的信息item,行號為index,調(diào)用系統(tǒng)API接口 WriteProcessMemory申請一塊內(nèi)存rectAddr,其結(jié)構(gòu)體形式為LVITEM ;
[0146]步驟1004:調(diào)用系統(tǒng)API接口 SendMessage向所述鍵值項窗口句柄hwnd發(fā)送LVM_GETITEMTEXT的消息號,參數(shù)為當前所遍歷的鍵值項行號index,獲取當前遍歷的鍵值項信息item,并保存到內(nèi)存塊rectAddr中;
[0147]步驟1005:調(diào)用系統(tǒng)API接口 ReadProcessMemory從內(nèi)存塊rectAddr中讀取當前遍歷的鍵值項信息item,該鍵值項信息item包含文字信息和該鍵值項對應的坐標,過匹配該鍵值項信息item包含的文字信息是否與給定的鍵值項名相同;
[0148]步驟1006:如果不相同,則繼續(xù)遍歷查找下一行;
[0149]步驟1007:如果相同,則調(diào)用系統(tǒng)API接口 GetWindowRect向所述鍵值項窗口句柄hwnd發(fā)消息,獲取所述鍵值項窗口的坐標,根據(jù)所述鍵值項窗口的坐標和當前遍歷的鍵值項的坐標計算出該當前遍歷的鍵值項在鍵值項窗口內(nèi)的相對坐標,作為所要獲取的鍵值項的坐標。
[0150]圖11示出了利用本發(fā)明在Windows系統(tǒng)下注冊表編輯器中修改鍵值項的另一種實施方式流程圖。如圖11所示,該方法包括:
[0151]步驟1101:利用上面方法中已介紹的確定的鍵值項坐標pos,通過系統(tǒng)API接口mouse_event 傳遞 M0USEEVENTF_RIGHTD0WN&M0USEEVENTF_RIGHTUP 參數(shù)模擬鼠標右鍵操作;[0152]步驟1102:調(diào)用系統(tǒng) API 接口 FindWindow&EnumChildWindows 查找窗口ClassName= “編輯字符串”的輸入框的句柄hedit,調(diào)用系統(tǒng)API接口 SendMessage向此輸入框句柄hedit發(fā)送WM_SETTEXT的消息號,參數(shù)為要修改的內(nèi)容;
[0153]步驟1103:調(diào)用系統(tǒng) API 接口 FindWindow&EnumChildWindows 查找窗口WindowsName^i‘確定”的按鈕句柄hbtn,調(diào)用系統(tǒng)API接口 PostMessage向該按鈕句柄hbtn發(fā)送BN_CLICKED消息,以完成鍵值項的修改操作。
[0154]本領域技術(shù)人員應當理解,上面僅示例性的介紹了本發(fā)明所提出的注冊表操作方法的一部分【具體實施方式】,其中僅涵蓋了對注冊表的一部分操作方式,而其他對注冊表的具體操作都可以沿用上述方法,對其進行擴展或變形,只要是通過調(diào)用界面函數(shù)對注冊表進行相應的操作均涵蓋在本發(fā)明的保護范圍之內(nèi)。
[0155]從上述【具體實施方式】可以看出,本發(fā)明提出的上述方案中全部流程均調(diào)用界面函數(shù)對注冊表進行操作,而不是調(diào)用系統(tǒng)提供的注冊表函數(shù),比如找窗口、輸入文字、點擊按鈕等函數(shù)對注冊表進行操作。其能夠完美的在防護軟件監(jiān)控的系統(tǒng)環(huán)境下,實現(xiàn)對注冊表的安全操作,同時避免了自己的執(zhí)行程序不會被防護軟件誤報導致功能失效等情況,本方法不只限于對殺毒軟件或者防護軟件的環(huán)境,同時也適用于各種Windows正常環(huán)境,能夠保證最大的兼容性。
[0156]需要說明的是,對于方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術(shù)人員應該知悉,本申請并不受所描述的動作順序的限制,因為依據(jù)本申請,某些步驟可以采用其他順序或者同時進行。其次,本領域技術(shù)人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本申請所必須的。
[0157]圖12示出了本發(fā)明提出的一種操作注冊表的裝置的模塊化結(jié)構(gòu)圖。如圖12所示,該裝置包括:
[0158]啟動模塊1201,其用于啟動 注冊表編輯器;
[0159]獲取模塊1202,其用于獲取所述注冊表編輯器的窗口句柄;
[0160]操作模塊1203,其用于根據(jù)所述窗口句柄通過調(diào)用界面函數(shù)對所述注冊表編輯器進行操作。
[0161]下面依然以Windows操作系統(tǒng)為例詳細說明本發(fā)明提出的操作注冊表的裝置所包括的上述各個模塊實現(xiàn)的功能,本領域技術(shù)人員應當知道,該方法不僅限于Windows系統(tǒng),其還適用于能夠通過注冊表編輯器對注冊表進行操作的其它圖形化界面系統(tǒng)。
[0162]啟動模塊1201,其用于啟動注冊表編輯器。
[0163]在Windows系統(tǒng)中,啟動注冊表編輯器的方式可以有多種,如通過系統(tǒng)提供的API接口模擬用戶手動操作打開注冊表編輯器,或者調(diào)用系統(tǒng)提供的API接口直接啟動注冊表編輯器等。
[0164]可選地,如果模擬用戶手動操作來打開注冊表編輯器,可以通過模擬Win+R的系統(tǒng)熱鍵調(diào)起“運行”窗口,并在打開路徑中輸入Register, exe,然后模擬用戶鼠標點擊該“運行”窗口上的“確定”,啟動注冊表編輯器。
[0165]啟動模塊1201可通過多種方式來完成注冊編輯器的啟動,其中一種如圖3所示,其可以通過調(diào)動系統(tǒng)接口先調(diào)出“運行”窗口,然后調(diào)用系統(tǒng)接口查找獲得“運行”窗口上輸入框句柄,并調(diào)用系統(tǒng)接口向所述輸入框句柄輸入注冊表編輯器的啟動程序名稱"Register, exe”,并模擬鼠標點擊“運行”窗口上的“確定”按鈕,整個過程都是調(diào)用界面函數(shù)模擬用戶啟動注冊表的方式啟動所述注冊表編輯器。由于在上面已經(jīng)詳細介紹了圖3示出的內(nèi)容,在此就不再贅述。
[0166]當然上述方式中,也可以通過快捷鍵等鍵盤模擬方式進行操作。另外,每種操作系統(tǒng)中注冊表編輯器的打開路徑不盡相同,可以根據(jù)實際情況模擬用戶操作來啟動注冊表編輯器。
[0167]獲取模塊1202,獲取所述注冊表編輯器的窗口句柄。在Windows系統(tǒng)中,每個打開的窗口都具有特定的句柄,通過獲得該句柄調(diào)用相應的界面函數(shù)即可對其進行操作。
[0168]依據(jù)上面所舉的例子,通過模擬用戶手動操作打開注冊表編輯器后,可以在一個超時時間5s內(nèi),輪詢調(diào)用系統(tǒng)API接口 “FindWindow”,查找窗口“ClassName=RegisterWindowClass”的句柄,即查找獲得Register, exe注冊表編輯器的窗口句柄。
[0169]操作模塊1203,其根據(jù)所述窗口句柄通過調(diào)用界面函數(shù)對所述注冊表編輯器進行操作。具體地,對注冊表的操作包括導入或?qū)С鲎晕募?,新建、刪除或重命名鍵或鍵值項,修改鍵值項等。對于上述這些對注冊表的操作,都可以通過調(diào)用界面函數(shù)來實現(xiàn)。
[0170]可選地,所述操作模塊包括菜單項操作模塊,其用于獲取注冊表編輯器的菜單項,模擬鼠標和/或鍵盤對所述菜單項進行操作。
[0171]所述菜單項操作模塊獲取注冊表編輯器的菜單項具體實現(xiàn)過程如下:
[0172]獲取系統(tǒng)所有頂級窗口句柄,形成第一窗口句柄列表;
[0173]在預定位置模擬鼠標點擊操作;
[0174]在預定時間間隔內(nèi),再次獲取系統(tǒng)所有頂級窗口句柄,形成第二窗口句柄列表;
[0175]獲取第一窗口句柄列表和第二窗口句柄列表的差集;
[0176]從所述差集中獲取菜單的窗口句柄;
[0177]根據(jù)所述菜單的窗口句柄獲取菜單項。
[0178]可選地,所述預定位置包括鍵值項的坐標和/或注冊表編輯器的菜單欄。對于不同的操作,可以選擇直接在相應鍵值項上模擬鼠標右鍵選擇對應的菜單進行操作,也可以直接在注冊表編輯器的菜單欄上進行操作。例如,對于導入、導出、新建和重命名操作,可以選擇利用注冊表編輯器的菜單欄進行操作,而其他操作可以選擇在相應鍵值項上模擬鼠標右鍵選擇對應的菜單進行操作,當然如導出、新建和重命名等操作兩種方式皆可。
[0179]下面以新建鍵和/或鍵值項為例來詳細說明菜單項操作模塊獲取注冊表編輯器中菜單項的具體流程。
[0180]首先,該模塊通過系統(tǒng)API接口 EnumChildWindows獲取系統(tǒng)的所有頂級窗口句柄列表,記為第一窗口句柄列表hwndlistl ;在預定的位置處,通過操作系統(tǒng)提供的API接口mouse_event 傳遞參數(shù) MOUSEEVENTF_RIGHTDOWN&MOUSEEVENTF_RIGHTUP,以模擬鼠標右鍵操作。
[0181]其次,在一個超時時間內(nèi)(默認5s),循環(huán)調(diào)用系統(tǒng)API接口 EnumChildWindows獲得一份系統(tǒng)中當前所有的頂級窗口句柄,記為第二窗口句柄列表hwn d I i s 12 ;計算第二窗口句柄列表hwndlist2與第一窗口句柄列表hwndlistl的差集;在所述差集中查找ClassName=#32768的句柄,即彈出菜單項的窗口句柄hwnd ;[0182]之后,通過系統(tǒng)API接口 GetMenu將所述彈出菜單項的窗口句柄hwnd轉(zhuǎn)換為菜單句柄hmenu ;根據(jù)所述菜單句柄hmenu調(diào)用系統(tǒng)API接口 GetMenuItemCount獲取此菜單中所有菜單項個數(shù),并調(diào)用系統(tǒng)API接口 GetMenuItemInfo遍歷每一個菜單項,獲取其文字信息為“新建”的菜單項,并返回該菜單項所在的位置坐標(x,y),模擬用戶將鼠標光標放置在該位置坐標U,y),并根據(jù)上面介紹的步驟查找彈出菜單,如此遞歸繼續(xù)查找到文字信息為“項”的菜單項所對應的位置坐標;
[0183]最后,在所找到的“項”菜單項對應的位置坐標處,模擬用戶鼠標點擊操作,并模擬用戶的鍵盤操作,輸入新建鍵的名稱,并模擬回車操作,完成鍵的新建操作。
[0184]鍵值項的新建操作與上述鍵的新建操作類似,所不同的是最后查找的是文字信息為“字符串值”、“二進制值”、“DWORD值”、“多字符串值”或“可擴充字符串值”等。
[0185]上述預定的位置可以是注冊表編輯器窗口中左邊界面上要新建的鍵的父鍵坐標,也可以是所述父鍵對應的右邊界面上任意位置的坐標。
[0186]另外,所述新建操作還可以通過獲取注冊表編輯器上的系統(tǒng)菜單來完成,具體為:獲取注冊表編輯器的窗口句柄,并根據(jù)所述窗口句柄獲取其菜單句柄,根據(jù)所述菜單句柄找到“編輯”菜單項的位置坐標后,模擬將鼠標光標置于該位置坐標處,并查找彈出菜單,如此遞歸繼續(xù)查找到文字信息為“項”的菜單項所對應的位置坐標,并進行相應的新建操作。
[0187]可選地,所述操作模塊還包括:坐標獲取模塊,其用于獲取展開鍵坐標和/或展開鍵值項坐標,并模擬鼠標進行操作。
[0188]其中,坐標獲取模塊獲取展開鍵坐標的具體實現(xiàn)過程如下:
[0189]首先,獲取注冊表編輯器中根鍵的界面句柄;
[0190]其次,根據(jù)根鍵的界面句柄,調(diào)用界面函數(shù)從樹根逐層查找,獲取展開鍵的坐標。
[0191]其中,所述坐標獲取模塊獲取鍵值項坐標的具體實現(xiàn)過程如下:
[0192]首先,模擬鼠標操作,在獲取到的展開鍵的坐標位置執(zhí)行點擊操作;
[0193]其次,查找鍵值項所在界面的界面句柄;
[0194]最后,根據(jù)所述鍵值項所在的界面句柄,從該界面列表中遍歷查找,并獲取所述鍵值項的坐標。
[0195]下面以修改鍵值項為例簡要說明一下該操作注冊表的裝置對注冊表編輯器進行操作的具體實現(xiàn)過程。
[0196]首先,啟動模塊通過調(diào)用系統(tǒng)接口運行注冊表編輯器Regedit ;
[0197]其次,所述獲取模塊獲取Regedit的界面句柄;
[0198]再次,所述操作模塊拆分待修改的目標鍵值項路徑;比如需要修改鍵HKEY_CURRENT_CONFIG \ Software \ Fonts的鍵值項LogPixels的鍵值內(nèi)容,則第一次則將其拆分成鍵 HKEY_CURRENT_CONFIG \ Software \ Fonts 和鍵值項 LogPixels ;鍵 HKEY_CURRENT_C0NFIG \ Software \ Fonts位于Regedit界面左邊部分的樹狀結(jié)構(gòu)中,而鍵值項LogPixels則位于Regedit界面右邊部分的列表結(jié)構(gòu)中;
[0199]之后,操作模塊根據(jù)Regedit的窗口句柄,查找Regedit界面左邊部分的根鍵子鍵的窗口句柄;并根據(jù)根鍵子鍵的窗口句柄,調(diào)用GUI函數(shù)從樹根層層查找,定位子鍵的坐標位置,比如最終定位找到HKEY_CURRENT_C0NFIG \ Software \ Fonts中的子鍵Fonts的坐標位置;在找到子鍵的坐標位置后,模擬鼠標操作,點擊定位到的坐標位置,使該子鍵對應的鍵值項信息顯示在Regedit界面右部的列表結(jié)構(gòu)中;
[0200]最后,獲取Regedit界面右部的根鍵值項的界面句柄,并根據(jù)所述根鍵值項的界面句柄,遍歷所述列表結(jié)構(gòu),最終定位待查找鍵值項的坐標位置;在所找到的鍵值項的坐標位置上,模擬鼠標右鍵操作,彈出菜單項,并從所述菜單項中選擇“修改”菜單項進行修改操作。
[0201]下面詳細說明根據(jù)本發(fā)明提出的操作注冊表的裝置在注冊表編輯器中獲取展開鍵坐標和獲取鍵值項坐標的具體實現(xiàn)過程。
[0202]獲取注冊表編輯器中展開鍵坐標的具體實現(xiàn)過程如下:
[0203]首先,操作模塊通過系統(tǒng)API接口 FindWindow查找類型SysTreeView32的窗口,獲取注冊表編輯器中鍵(注冊表編輯器左邊界面)的窗口句柄hwnd;調(diào)用系統(tǒng)API接口 SendMessage向所述鍵窗口句柄hwnd發(fā)送消息號TVM_GETNEXTITEM,其參數(shù)為“TVGN_ROOT”,以獲取注冊表編輯器中根鍵HKEY_CLASSES_R00T的信息hitem ;調(diào)用系統(tǒng)API接口WriteProcessMemory申請一塊內(nèi)存rectAddr,其結(jié)構(gòu)體形式為TVITEM ;
[0204]其次,操作模塊調(diào)用系統(tǒng)API接口 SendMessage向所述鍵窗口句柄hwnd發(fā)送消息號TVM_GETNEXTITEM,參數(shù)為“1”,獲取所述根鍵HKEY_CLASSES_R00T下的第一個鍵信息item,并保存到內(nèi)存塊rectAddr中,同時把其父節(jié)點即根鍵HKEY_CLASSES_R00T的信息hitem也保存到內(nèi)存塊rectAddr中;調(diào)用系統(tǒng)API接口 ReadProcessMemory從內(nèi)存塊rectAddr中讀取所述第一個鍵信息item,該鍵信息包含text和rect,分別表示文字信息和位置坐標;
[0205]之后,操作模塊調(diào)用系統(tǒng)API接口 GetWindowRect向所述鍵窗口句柄hwnd發(fā)消息,以獲取該鍵窗口句柄hwnd的位置坐標rect ;根據(jù)所述鍵窗口句柄hwnd對應的位置坐標rect和所述第一個鍵信息item中包含的位置坐標rect計算出該第一個鍵在所述鍵窗口的相對坐標pos ;
[0206]最后,操作模塊用同樣的方法,循環(huán)查找第一個鍵item的子鍵childHitem,獲取子鍵childHitem的文字信息和坐標位置,匹配其文字信息是否與給定的鍵名相同;
[0207]如果相同,則調(diào)用系統(tǒng)API接口 SendMessage給所述鍵窗口句柄hwnd發(fā)消息TVM_EXPAND,參數(shù)為TVE_EXPAND,使該第一個鍵展開,并顯示在界面居中位置,調(diào)用系統(tǒng)API接口 SendMessage給所述鍵窗口句柄hwnd發(fā)消息TVM_SELECTITEM,參數(shù)為TVGN_CARET,以選中所述第一個鍵;
[0208]如果不相同,則依次查找與所述第一個鍵相鄰的下一個鍵nextitem,并使用同樣的方法,循環(huán)查找下一個鍵nextitem的子鍵,直到找到給定的鍵,并獲取該給定鍵的坐標。
[0209]獲取注冊表編輯器中鍵值項坐標的具體實現(xiàn)過程如下:
[0210]首先,操作模塊通過系統(tǒng)API接口 FindWindow查找類型SysListView32的窗口,獲取鍵值項(注冊表編輯器右邊界面)的窗口句柄hwnd ;并調(diào)用系統(tǒng)API接口 SendMessage向所述鍵值項窗口句柄hwnd發(fā)送LVM_GETITEMCOUNT的消息號,獲取所述鍵值項窗口句柄hwnd對應的鍵值項數(shù)量count,即鍵值項行數(shù);
[0211]其次,操作模塊遍歷所述鍵值項窗口中的每行鍵值項對應的信息item,行號為index,調(diào)用系統(tǒng)API接口 WriteProcessMemory申請一塊內(nèi)存rectAddr,其結(jié)構(gòu)體形式為LVITEM ;調(diào)用系統(tǒng)API接口 SendMessage向所述鍵值項窗口句柄hwnd發(fā)送LVM_GETITEMTEXT的消息號,參數(shù)為當前所遍歷的鍵值項行號index,獲取當前遍歷的鍵值項信息item,并保存到內(nèi)存塊rectAddr中;
[0212]最后,操作模塊調(diào)用系統(tǒng)API接口 ReadProcessMemory從內(nèi)存塊rectAddr中讀取當前遍歷的鍵值項信息item,該鍵值項信息item包含文字信息和該鍵值項對應的坐標,過匹配該鍵值項信息item包含的文字信息是否與給定的鍵值項名相同;
[0213]如果不相同,則繼續(xù)遍歷查找下一行;
[0214]如果相同,則調(diào)用系統(tǒng)API接口 GetWindowRect向所述鍵值項窗口句柄hwnd發(fā)消息,獲取所述鍵值項窗口的坐標,根據(jù)所述鍵值項窗口的坐標和當前遍歷的鍵值項的坐標計算出該當前遍歷的鍵值項在鍵值項窗口內(nèi)的相對坐標,作為所要獲取的鍵值項的坐標。
[0215]Windows操作系統(tǒng)下在注冊表編輯器中修改鍵值項的具體實現(xiàn)過程如下:
[0216]首先,利用上面方法中已介紹的確定的鍵值項坐標pos,操作模塊通過系統(tǒng)API接口 mouse_event 傳遞 MOUSEEVENTF_RIGHTDOWN&MOUSEEVENTF_RIGHTUP 參數(shù)模擬鼠標右鍵操作;
[0217]其次,操作模塊調(diào)用系統(tǒng)API接口 FindWindow&EnumChi IdWindows查找窗口ClassName= “編輯字符串”的輸入框的句柄hedit,調(diào)用系統(tǒng)API接口 SendMessage向此輸入框句柄hedit發(fā)送WM_SETTEXT的消息號,參數(shù)為要修改的內(nèi)容;
[0218]最后,操作模塊調(diào)用系統(tǒng)API接口 FindWindow&EnumChiIdWindows查找窗口WindowsName^i‘確定”的按鈕句柄hbtn,調(diào)用系統(tǒng)API接口 PostMessage向該按鈕句柄hbtn發(fā)送BN_CLICKED消息,以完成鍵值項的修改操作。
[0219]上面所介紹的具體實現(xiàn)過程均是以啟動模塊和獲取模塊已經(jīng)啟動了注冊表編輯器并獲得了注冊表編輯器的窗口句柄為前提,且上面僅示例型的介紹了注冊表的一部分操作過程,本領域技術(shù)人員應當能夠通過上面介紹的流程毫無疑義地得出注冊表的其他操作流程。
[0220]由于所述裝置實施例基本相應于前述圖1所示的方法實施例,故本實施例的描述中未詳盡之處,可以參見前述實施例中的相關(guān)說明,在此就不贅述了。
[0221]ell、如權(quán)利要求8所述的操作注冊表的裝置,其特征在于,所述操作模塊包括:
[0222]坐標獲取模塊,其用于獲取展開鍵坐標和/或展開鍵值項坐標,并模擬鼠標進行操作。
[0223]cl2、如權(quán)利要求11所述的操作注冊表的裝置,其特征在于,所述坐標獲取模塊如下獲取展開鍵坐標:
[0224]獲取注冊表編輯器中根鍵的界面句柄;
[0225]根據(jù)根鍵的界面句柄,調(diào)用界面函數(shù)從樹根逐層查找,獲取展開鍵的坐標。
[0226]cl3、如權(quán)利要求11或13所述的操作注冊表的裝置,其特征在于,坐標獲取模塊如下獲取展開鍵值項坐標:
[0227]模擬鼠標操作,在獲取到的展開鍵的坐標位置執(zhí)行點擊操作;
[0228]查找鍵值項所在界面的界面句柄;
[0229]根據(jù)所述鍵 值項所在的界面句柄,從該界面列表中遍歷查找,并獲取所述鍵值項的坐標。
[0230]cl4、如權(quán)利要求10所述的操作注冊表的裝置,其特征在于,所述預定位置包括展開鍵值項的坐標和/或注冊表編輯器的菜單欄。
[0231]本發(fā)明提出的上述方案可用于眾多通用或?qū)S玫挠嬎阆到y(tǒng)環(huán)境或配置中。例如:個人計算機、服務器計算機、手持設備或便攜式設備、平板型設備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機頂盒、可編程的消費電子設備、網(wǎng)絡PC、小型計算機、大型計算機、包括以上任何系統(tǒng)或設備的分布式計算環(huán)境等等。
[0232]本發(fā)明可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實踐本申請,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡而被連接的遠程處理設備來執(zhí)行任務。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設備在內(nèi)的本地和遠程計算機存儲介質(zhì)中。
[0233]最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
[0234]以上所述的具體實施例,對本發(fā)明的目的、技術(shù)方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發(fā)明的具體實施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之 內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1.一種操作注冊表的方法,其特征在于,包括: 啟動注冊表編輯器; 獲取所述注冊表編輯器的窗口句柄; 根據(jù)所述窗口句柄通過調(diào)用界面函數(shù)對所述注冊表編輯器進行操作。
2.如權(quán)利要求1所述的操作注冊表的方法,其特征在于,所述通過調(diào)用界面函數(shù)對所述注冊表編輯器進行操作包括:獲取注冊表編輯器的菜單項,模擬鼠標和/或鍵盤對所述菜單項進行操作。
3.如權(quán)利要求2所述的操作注冊表的方法,其特征在于,獲取注冊表編輯器的菜單項包括: 獲取系統(tǒng)所有頂級窗口句柄,形成第一窗口句柄列表; 在預定位置模擬鼠標點擊操作; 在預定時間間隔內(nèi),再次獲取系統(tǒng)所有頂級窗口句柄,形成第二窗口句柄列表; 獲取第一窗口句柄列表和第二窗口句柄列表的差集; 從所述差集中獲取菜單的窗口句柄; 根據(jù)所述菜單的窗口句柄獲取菜單項。
4.如權(quán)利要求1所述的操作注冊表的方法,其特征在于,所述通過調(diào)用界面函數(shù)對所述注冊表編輯器進行操作包括:獲取展開鍵坐標和/或鍵值項坐標,并模擬鼠標進行操作。
5.如權(quán)利要求4所述的操作注冊表的方法,其特征在于,獲取展開鍵坐標包括: 獲取注冊表編輯器中根鍵的界面句柄; 根據(jù)根鍵的界面句柄,調(diào)用界面函數(shù)從樹根逐層查找,獲取展開鍵的坐標。
6.如權(quán)利要求4或5所述的操作注冊表的方法,其特征在于,獲取鍵值項坐標包括: 模擬鼠標操作,在獲取到的展開鍵的坐標位置執(zhí)行點擊操作; 查找鍵值項所在界面的界面句柄; 根據(jù)所述鍵值項所在的界面句柄,從該界面列表中遍歷查找,并獲取所述鍵值項的坐標。
7.如權(quán)利要求3所述的操作注冊表的方法,其特征在于,所述預定位置包括鍵值項的坐標和/或注冊表編輯器的菜單欄。
8.一種操作注冊表的裝置,其特征在于,包括: 啟動模塊,其用于啟動注冊表編輯器; 獲取模塊,其用于獲取所述注冊表編輯器的窗口句柄; 操作模塊,其用于根據(jù)所述窗口句柄通過調(diào)用界面函數(shù)對所述注冊表編輯器進行操作。
9.如權(quán)利要求8所述的操作注冊表的裝置,其特征在于,所述操作模塊包括: 菜單項操作模塊,其用于獲取注冊表編輯器的菜單項,模擬鼠標和/或鍵盤對所述菜單項進行操作。
10.如權(quán)利要求9所述的操作注冊表的裝置,其特征在于,所述菜單項操作模塊如下獲取注冊表上的菜單項: 獲取系統(tǒng)所有頂級窗口句柄列表; 在預定位置模擬鼠標點擊操作;在預定時間間隔內(nèi),獲得系統(tǒng)所有頂級窗口句柄列表;比較第一次和第二次分別獲得的所有頂級窗口句柄列表的差集;從所述差集找到彈出菜單的窗口句柄; 根據(jù)所述菜單的窗口句柄獲得相應的菜單項。
【文檔編號】G06F21/50GK103593186SQ201310556281
【公開日】2014年2月19日 申請日期:2013年11月11日 優(yōu)先權(quán)日:2013年11月11日
【發(fā)明者】張 杰, 湯倩 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
花垣县| 承德市| 工布江达县| 辽宁省| 祁门县| 前郭尔| 屏东市| 晴隆县| 怀柔区| 九江县| 崇礼县| 南郑县| 竹溪县| 正定县| 宜宾市| 南陵县| 裕民县| 高邮市| 织金县| 遂川县| 正镶白旗| 金沙县| 桂平市| 汽车| 云梦县| 吉木乃县| 慈溪市| 长汀县| 武城县| 荔浦县| 安康市| 宜兰县| 原平市| 陈巴尔虎旗| 益阳市| 金堂县| 广南县| 龙川县| 华坪县| 万山特区| 尼玛县|