一種實(shí)現(xiàn)模擬鍵盤輸入的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設(shè)及計(jì)算機(jī)技術(shù)領(lǐng)域,特別設(shè)及一種實(shí)現(xiàn)模擬鍵盤輸入的方法及裝置。
【背景技術(shù)】
[0002] Windows的驅(qū)動架構(gòu)是分層處理的,其中,自上而下具體包括第Ξ方提供的鍵盤過 濾驅(qū)動、Windows系統(tǒng)自帶的系統(tǒng)鍵盤驅(qū)動和底層驅(qū)動。現(xiàn)有技術(shù)中,鍵盤過濾驅(qū)動為實(shí)現(xiàn) 模擬鍵盤輸入(模擬鍵盤輸入具體指在沒有用戶參與鍵盤輸入的情況下,鍵盤過濾驅(qū)動能 夠模擬鍵盤輸入,使鍵盤過濾驅(qū)動之上的應(yīng)用層W為鍵盤的某個(gè)按鍵被用戶按下)的功能, 需要獲取系統(tǒng)鍵盤驅(qū)動中的虛擬輸入接口化巧boardClassService化Uback)的地址,而現(xiàn) 有技術(shù)中,均采用編碼或者暴力捜索的方法獲取虛擬輸入接口的地址,運(yùn)類方法不穩(wěn)定且 存在系統(tǒng)應(yīng)用性和兼容性差的缺陷。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明提供了一種實(shí)現(xiàn)模擬鍵盤輸入的方法及裝置,W解決現(xiàn)有技術(shù)中的實(shí)現(xiàn)模 擬鍵盤輸入的方法中存在的穩(wěn)定性差及系統(tǒng)應(yīng)用性和兼容性差的缺陷。
[0004] 本發(fā)明提供了一種模擬鍵盤輸入的方法,包括:
[0005] 步驟si:當(dāng)鍵盤過濾驅(qū)動被系統(tǒng)加載后,所述鍵盤過濾驅(qū)動根據(jù)預(yù)設(shè)的虛擬鍵盤 驅(qū)動名稱判斷虛擬鍵盤驅(qū)動是否存在,如果是,則執(zhí)行步驟s2;否則,結(jié)束流程;
[0006] 步驟s2:所述鍵盤過濾驅(qū)動根據(jù)所述虛擬鍵盤驅(qū)動,從虛擬鍵盤第一設(shè)備對象中 獲取虛擬輸入接口地址;
[0007] 步驟S3:所述鍵盤過濾驅(qū)動根據(jù)所述虛擬輸入接口地址模擬鍵盤輸入。
[000引本發(fā)明還提供了一種模擬鍵盤輸入的裝置,包括:第一判斷模塊、第一獲取模塊和 第一執(zhí)行模塊;
[0009] 所述第一判斷模塊,用于當(dāng)鍵盤過濾驅(qū)動被系統(tǒng)加載后,根據(jù)預(yù)設(shè)的虛擬鍵盤驅(qū) 動名稱判斷虛擬鍵盤驅(qū)動是否存在;
[0010] 所述第一獲取模塊,用于當(dāng)所述第一判斷模塊判定所述虛擬鍵盤驅(qū)動存在后,根 據(jù)所述虛擬鍵盤驅(qū)動,從虛擬鍵盤第一設(shè)備對象中獲取虛擬輸入接口地址;
[0011] 所述第一執(zhí)行模塊,用于根據(jù)所述第一獲取模塊獲取到的所述虛擬輸入接口地址 模擬鍵盤輸入。
[0012] 本發(fā)明的有益效果為:本發(fā)明提供的實(shí)現(xiàn)模擬鍵盤輸入的方法及裝置,通過安裝 一個(gè)與虛擬鍵盤第一設(shè)備對應(yīng)的WDM(Windows Driver Model,視窗驅(qū)動程序模塊)類型的 虛擬鍵盤驅(qū)動,獲取來自系統(tǒng)鍵盤驅(qū)動的虛擬輸入接口的地址,當(dāng)鍵盤過濾驅(qū)動被加載后, 通過虛擬鍵盤驅(qū)動獲取虛擬輸入接口的地址,根據(jù)虛擬輸入接口的地址實(shí)現(xiàn)模擬鍵盤輸 入,運(yùn)種實(shí)現(xiàn)模擬鍵盤輸入的方法及裝置的穩(wěn)定性好且系統(tǒng)應(yīng)用性和兼容性好。
【附圖說明】
[0013] 圖1為本發(fā)明實(shí)施例1提供的一種虛擬鍵盤驅(qū)動獲取虛擬輸入接口的地址的方法;
[0014] 圖2為本發(fā)明實(shí)施例1提供的一種鍵盤過濾驅(qū)動根據(jù)虛擬鍵盤驅(qū)動獲取虛擬輸入 接口的地址的方法;
[0015] 圖3為本發(fā)明實(shí)施2提供的一種模擬鍵盤輸入的裝置的結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0016] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0017]實(shí)施例1
[0018] 本實(shí)施例提供了一種虛擬鍵盤驅(qū)動獲取虛擬輸入接口的地址的方法,如圖1所示, 具體包括:
[0019] 步驟101:創(chuàng)建虛擬鍵盤第一設(shè)備;
[0020] 步驟101具體包括:
[0021 ]步驟1011:安裝程序創(chuàng)建虛擬鍵盤第一設(shè)備,獲取虛擬鍵盤第一設(shè)備句柄,判斷是 否創(chuàng)建成功,如果是,則執(zhí)行步驟1012;否則,模式鍵盤輸入失??;
[0022] 具體地,安裝程序調(diào)用系統(tǒng)的創(chuàng)建設(shè)備信息塊函數(shù)創(chuàng)建設(shè)備名稱為"Virtual Keyboard",設(shè)備類型標(biāo)識為鍵盤類型標(biāo)識的虛擬鍵盤第一設(shè)備,獲取虛擬鍵盤第一設(shè)備句 柄,判斷創(chuàng)建設(shè)備信息塊函數(shù)的返回值是否為TRUE,如果是,則判定創(chuàng)建成功,執(zhí)行步驟 1012;否則,判定創(chuàng)建失敗,模式鍵盤輸入失敗。
[0023] 本實(shí)施例中,創(chuàng)建設(shè)備信息塊函數(shù)具體為:
[0024] BOOL S巧upDiCre舶Devicein化(
[0025]
[00%] 其中,參數(shù)DeviceName具體為虛擬鍵盤第一設(shè)備的設(shè)備名稱;參數(shù)ClassGuid具體 為虛擬鍵盤第一設(shè)備的設(shè)備類型標(biāo)識,更加具體地,鍵盤類型標(biāo)識具體為:{0X4D36E96B, 0址325,0x1 ICE,Ox邸,OxCl ,0x08,0x00,0x2B,0xEl ,0x03,0x18};參數(shù)DeviceInfoData為與 虛擬鍵盤第一設(shè)備對應(yīng)的虛擬鍵盤第一設(shè)備句柄。
[0027] 步驟1012:根據(jù)虛擬鍵盤第一設(shè)備句柄將虛擬鍵盤第一設(shè)備的設(shè)備識別標(biāo)識設(shè)置 為第一設(shè)備識別標(biāo)識,判斷是否設(shè)置成功,如果是,則執(zhí)行步驟102;否則,結(jié)束流程;
[0028] 具體地,根據(jù)虛擬鍵盤第一設(shè)備句柄調(diào)用系統(tǒng)的注冊設(shè)備信息函數(shù),設(shè)置虛擬鍵 盤第一設(shè)備的設(shè)備識別標(biāo)識為第一設(shè)備識別標(biāo)識,判斷注冊設(shè)備信息函數(shù)的返回值是否為 TRUE,如果是,則判定設(shè)置成功,執(zhí)行步驟102;否則,判定設(shè)置失敗,結(jié)束流程。
[0029] 其中,注冊設(shè)備信息函數(shù)具體為:
[0032] 其中,參數(shù)Property具體為SPDRP_HARDWAREID,通知系統(tǒng)本步驟用于設(shè)置設(shè)備識 別標(biāo)識;參數(shù)PropertyBuf f er具體為第一設(shè)備識別標(biāo)識,用于通知系統(tǒng)將虛擬鍵盤第一設(shè) 備的設(shè)備識別標(biāo)識設(shè)置為第一設(shè)備識別標(biāo)識。
[0033] 本實(shí)施例中,設(shè)備識別標(biāo)識為設(shè)備的唯一識別標(biāo)識;優(yōu)選地,設(shè)備識別標(biāo)識為設(shè)備 的硬件ID,本實(shí)施例中,第一設(shè)備識別標(biāo)識可W具體為"VKeyboard"。
[0034] 需說明的是,當(dāng)執(zhí)行完步驟101之后,虛擬鍵盤第一設(shè)備的設(shè)備信息被系統(tǒng)注冊到 系統(tǒng)注冊表中,系統(tǒng)重啟后,虛擬鍵盤第一設(shè)備的設(shè)備信息不會被系統(tǒng)清空。虛擬鍵盤第一 設(shè)備的設(shè)備信息即為:虛擬鍵盤第一設(shè)備的設(shè)備名稱、設(shè)備類型標(biāo)識和設(shè)備識別標(biāo)識等信 息。
[0035] 步驟102:安裝與虛擬鍵盤第一設(shè)備對應(yīng)的WDM類型的虛擬鍵盤驅(qū)動,虛擬鍵盤驅(qū) 動被系統(tǒng)加載;
[0036] 步驟102具體包括:
[0037] 步驟1021:安裝程序?qū)DM類型的虛擬鍵盤驅(qū)動的WDM驅(qū)動信息中的虛擬鍵盤標(biāo)識 設(shè)置為第一設(shè)備識別標(biāo)識;
[0038] 具體地,安裝程序創(chuàng)建包括WDM類型的虛擬鍵盤驅(qū)動的WDM驅(qū)動信息的WDM驅(qū)動信 息文件;并將WDM驅(qū)動信息文件中的虛擬鍵盤標(biāo)識設(shè)置為虛擬鍵盤第一設(shè)備的第一設(shè)備識 別標(biāo)識。
[0039] 例如,WDM驅(qū)動信息文件具體為:FT_VKeyPad. inf文件,在FT_VKeyPad. inf文件中 指定了與虛擬鍵盤驅(qū)動對應(yīng)的虛擬鍵盤設(shè)備的虛擬鍵盤標(biāo)識為第一設(shè)備識別標(biāo)識。
[0040] [VKBModels]
[0041 ] %Vi;rtua;LKeyboard% =V肺 oard,VKeyboard;其中,VKeyboard 為第一設(shè)備識別標(biāo) 識。
[0042] 本實(shí)施例中,虛擬鍵盤標(biāo)識用于標(biāo)記和虛擬鍵盤驅(qū)動對應(yīng)的虛擬鍵盤設(shè)備。
[0043] 步驟1022:安裝程序?qū)⑴c虛擬鍵盤第一設(shè)備對應(yīng)的虛擬鍵盤驅(qū)動的WDM驅(qū)動信息 注冊到系統(tǒng)注冊表中,判斷虛擬鍵盤驅(qū)動是否被系統(tǒng)加載成功,如果是,則執(zhí)行步驟103;否 貝1J,結(jié)束流程;
[0044] 具體地,安裝程序使用第一設(shè)備識別標(biāo)識和包括WDM驅(qū)動信息的WDM驅(qū)動信息文件 調(diào)用系統(tǒng)的更新設(shè)備驅(qū)動函數(shù)將與虛擬鍵盤第一設(shè)備對應(yīng)的虛擬鍵盤驅(qū)動的WDM驅(qū)動信息 注冊到系統(tǒng)注冊表中,判斷更新設(shè)備驅(qū)動函數(shù)的返回值是否為TRUE,如果是,則判定虛擬鍵 盤驅(qū)動被系統(tǒng)加載成功,執(zhí)行步驟103;否則,判定失敗,結(jié)束流程。
[0045] 本實(shí)施例中,更新設(shè)備驅(qū)動函數(shù)具體為:
[0046]
[0047] 其中,參數(shù)化rdwareld具體為第一設(shè)備識別標(biāo)識,化llInfPath具體為虛擬鍵盤驅(qū) 動的WDM驅(qū)動信息文件,可W但不限于具體為FT_VKeyPad.ini·文件。
[0048] 需要說明的是,當(dāng)系統(tǒng)通過更新設(shè)備驅(qū)動函數(shù)獲取到第一設(shè)備識別標(biāo)識后,從系 統(tǒng)注冊表中找到對應(yīng)的虛擬鍵盤第一設(shè)備,系統(tǒng)加載與虛擬鍵盤第一設(shè)備對應(yīng)的系統(tǒng)鍵盤 驅(qū)動,創(chuàng)建與系統(tǒng)鍵盤驅(qū)動對象對應(yīng)的系統(tǒng)鍵盤第一設(shè)備對象,根據(jù)系統(tǒng)鍵盤第一設(shè)備對 象的引用將系統(tǒng)鍵盤第一設(shè)備對象加入到第一設(shè)備對象鏈中;之后,系統(tǒng)根據(jù)系統(tǒng)注冊表 中的WDM驅(qū)動信息加載虛擬鍵盤驅(qū)動,創(chuàng)建與虛擬鍵盤驅(qū)動對象對應(yīng)的虛擬鍵盤第一設(shè)備 對象,并根據(jù)虛擬鍵盤第一設(shè)備對象的引用,將虛擬鍵盤第一設(shè)備對象加入到第一設(shè)備對 象鏈中,并將虛擬鍵盤第一設(shè)備對象和系統(tǒng)鍵盤第一設(shè)備對象建立鏈接。當(dāng)虛擬鍵盤驅(qū)動 被加載后,虛擬鍵盤驅(qū)動注冊硬件消息處理函數(shù),用于接收硬件消息。
[0049] 本實(shí)施例中,驅(qū)動對象、設(shè)備對象的形態(tài)都是W結(jié)構(gòu)體的方式存儲在系統(tǒng)內(nèi)存中 的,其中,驅(qū)動對象中包括驅(qū)動對象的名稱和與驅(qū)動對象對應(yīng)的設(shè)備對象的引用等信息,例 如系統(tǒng)鍵盤驅(qū)動對象的結(jié)構(gòu)體如下:
[(Κ)加 ]
[0051 ]其中,DeviceObject為系統(tǒng)鍵盤驅(qū)動對象中的系統(tǒng)鍵盤第一設(shè)備對象的引用; 肺化i d為系統(tǒng)鍵盤驅(qū)動對象的名稱。
[0052] 本實(shí)施例中,加入虛擬鍵盤第一設(shè)備對象之后的第一設(shè)備對象鏈為:
[0053] 虛擬鍵盤第一設(shè)備對象-〉系統(tǒng)鍵盤第一設(shè)備對象-〉底