本發(fā)明涉及電子設(shè)備輸入領(lǐng)域,尤其涉及一種提高鍵盤輸入正確性的方法及鍵盤過(guò)濾驅(qū)動(dòng)。
背景技術(shù):
Windows的驅(qū)動(dòng)架構(gòu)是分層處理的,其中針對(duì)PS2鍵盤設(shè)備的驅(qū)動(dòng)包括鍵盤過(guò)濾驅(qū)動(dòng)、Windows系統(tǒng)自帶的系統(tǒng)鍵盤驅(qū)動(dòng)(系統(tǒng)鍵盤驅(qū)動(dòng)包括系統(tǒng)鍵盤底層驅(qū)動(dòng)和系統(tǒng)鍵盤類驅(qū)動(dòng))。PS2鍵盤將PS2鍵盤輸入數(shù)據(jù)發(fā)送到8042控制器,系統(tǒng)鍵盤驅(qū)動(dòng)從控制器中取出鍵盤輸入數(shù)據(jù)并進(jìn)行處理得到預(yù)設(shè)結(jié)構(gòu)的鍵盤輸入信息,并將預(yù)設(shè)結(jié)構(gòu)的鍵盤輸入信息傳輸給鍵盤過(guò)濾驅(qū)動(dòng)。PS2鍵盤輸入數(shù)據(jù)可能有一個(gè)字節(jié)或兩個(gè)字節(jié),而接收PS2鍵盤輸入數(shù)據(jù)的控制器每次只能接收一個(gè)字節(jié)的數(shù)據(jù);鍵盤過(guò)濾驅(qū)動(dòng)為防止8042控制器中PS2鍵盤輸入的鍵盤輸入數(shù)據(jù)被盜取,可能與PS2鍵盤同時(shí)訪問(wèn)8042控制器,向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)。
現(xiàn)有技術(shù)中,鍵盤輸入方法存在以下弊端:如果PS2鍵盤將PS2鍵盤輸入數(shù)據(jù)發(fā)送到8042控制器之后,在系統(tǒng)鍵盤驅(qū)動(dòng)將控制器中的PS2鍵盤輸入數(shù)據(jù)取走之前,鍵盤過(guò)濾驅(qū)動(dòng)向8042控制器發(fā)送模擬鍵盤輸入數(shù)據(jù),模擬鍵盤輸入數(shù)據(jù)會(huì)將PS2鍵盤輸入數(shù)據(jù)覆蓋,導(dǎo)致PS2鍵盤輸入數(shù)據(jù)失效;當(dāng)PS2鍵盤向控制器發(fā)送的PS2鍵盤輸入數(shù)據(jù)包括兩個(gè)字節(jié)時(shí),PS2鍵盤向控制器發(fā)送完第一個(gè)字節(jié)后,如果鍵盤過(guò)濾驅(qū)動(dòng)向8042控制器發(fā)送模擬鍵盤輸入數(shù)據(jù),則兩個(gè)字節(jié)的PS2鍵盤輸入數(shù)據(jù)的第一個(gè)字節(jié)和第二個(gè)字節(jié)會(huì)被模擬鍵盤輸入數(shù)據(jù)拆分,鍵盤過(guò)濾驅(qū)動(dòng)將獲取的與第一個(gè)字節(jié)對(duì)應(yīng)的鍵盤輸入信息和與第二個(gè)字節(jié)對(duì)應(yīng)的鍵盤輸入信息分開(kāi)傳輸給上層應(yīng)用,最終導(dǎo)致上層應(yīng)用接收的PS2鍵盤輸入數(shù)據(jù)不正確。鑒于此,業(yè)界亟需一種能夠提高PS2鍵盤輸入數(shù)據(jù)正確性的鍵盤輸入方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明為解決上述現(xiàn)有技術(shù)中存在的技術(shù)問(wèn)題提供一種提高輸入正確性的方法和鍵盤過(guò)濾驅(qū)動(dòng)。
本發(fā)明提供一種提高輸入正確性的方法,包括以下步驟:
步驟S1:鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù);
步驟S2:所述鍵盤過(guò)濾驅(qū)動(dòng)從所述鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息;
當(dāng)所述當(dāng)前鍵盤輸入信息不為干擾信息,所述鍵盤過(guò)濾驅(qū)動(dòng)自身保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí)時(shí),執(zhí)行步驟S3;
當(dāng)所述當(dāng)前鍵盤輸入信息為干擾信息,所述鍵盤過(guò)濾驅(qū)動(dòng)自身保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí)時(shí),執(zhí)行步驟S4;
當(dāng)所述當(dāng)前鍵盤輸入信息為干擾信息,所述鍵盤過(guò)濾驅(qū)動(dòng)自身保存的矯正標(biāo)識(shí)為默認(rèn)標(biāo)識(shí)時(shí),執(zhí)行步驟S5;
在所述鍵盤過(guò)濾驅(qū)動(dòng)初始化時(shí)所述鍵盤過(guò)濾驅(qū)動(dòng)將所述矯正標(biāo)識(shí)設(shè)置為默認(rèn)標(biāo)識(shí);
步驟S3:所述鍵盤過(guò)濾驅(qū)動(dòng)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),將矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí),將矯正后的當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置;
步驟S4:所述鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
步驟S5:所述鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)所述當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),并將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
所述鍵盤過(guò)濾驅(qū)動(dòng)處理完所述鍵盤輸入數(shù)據(jù)中所有的鍵盤輸入信息之后,將鍵盤輸入數(shù)據(jù)返回所述系統(tǒng)。
本發(fā)明提供的一種鍵盤過(guò)濾驅(qū)動(dòng),包括:
第一獲取模塊,用于從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù);
第二獲取模塊,用于從所述鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息;
保存模塊,用于保存矯正標(biāo)識(shí);
矯正模塊,用于當(dāng)所述第二獲取模塊獲取的所述當(dāng)前鍵盤輸入信息不為干擾信息,所述保存模塊保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí)時(shí),矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
第一更新模塊,用于當(dāng)所述矯正模塊矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)之后,將所述保存模塊保存的矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí);
存儲(chǔ)模塊,用于將所述矯正模塊矯正后的當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置;
第一移除模塊,用于當(dāng)所述第二獲取模塊獲取的所述當(dāng)前鍵盤輸入信息為干擾信息,所述保存模塊保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí)時(shí),將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
第二更新模塊,用于當(dāng)所述第二獲取模塊獲取的所述當(dāng)前鍵盤輸入信息為干擾信息,所述保存模塊保存的矯正標(biāo)識(shí)為默認(rèn)標(biāo)識(shí)時(shí),根據(jù)所述當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新所述保存模塊保存的矯正標(biāo)識(shí);
第二移除模塊,用于當(dāng)所述第二更新模塊根據(jù)所述當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新所述保存模塊保存的矯正標(biāo)識(shí)之后,將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
設(shè)置模塊,用于在所述鍵盤過(guò)濾驅(qū)動(dòng)初始化時(shí),將所述保存模塊保存的矯正標(biāo)識(shí)設(shè)置為默認(rèn)標(biāo)識(shí);
返回模塊,用于當(dāng)所述鍵盤過(guò)濾驅(qū)動(dòng)處理完所述第一獲取模塊獲取的所述鍵盤輸入數(shù)據(jù)中所有的鍵盤輸入信息之后,將鍵盤輸入數(shù)據(jù)返回所述系統(tǒng)。
本發(fā)明與現(xiàn)有技術(shù)相比的有益效果是:鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù),從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息之后,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)獲取的當(dāng)前鍵盤輸入信息和自身保存的矯正標(biāo)識(shí)對(duì)當(dāng)前鍵盤輸入信息進(jìn)處理,從而提高鍵盤輸入的正確性。
附圖說(shuō)明
圖1所示為本發(fā)明實(shí)施例1中一種提高鍵盤輸入正確性的方法流程圖;
圖2所示為本發(fā)明實(shí)施例2中一種提高鍵盤輸入正確性的方法流程圖;
圖3所示為本發(fā)明實(shí)施例3中一種提高鍵盤輸入正確性的方法流程圖;
圖4所示為本發(fā)明實(shí)施例4中一種鍵盤過(guò)濾驅(qū)動(dòng)的模塊組成框圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
實(shí)施例1
本實(shí)施例提供一種提高鍵盤輸入正確性的方法,如圖1所示,包括:
步驟S1:鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù);
步驟S2:鍵盤過(guò)濾驅(qū)動(dòng)從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息;
當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)自身保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí),當(dāng)前鍵盤輸入信息不為干擾信息時(shí),執(zhí)行步驟S3;
當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)自身保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí),當(dāng)前鍵盤輸入信息為干擾信息時(shí),執(zhí)行步驟S4;
當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)自身保存的矯正標(biāo)識(shí)為默認(rèn)標(biāo)識(shí),當(dāng)前鍵盤輸入信息為干擾信息時(shí),執(zhí)行步驟S5;
在鍵盤過(guò)濾驅(qū)動(dòng)初始化時(shí)鍵盤過(guò)濾驅(qū)動(dòng)將矯正標(biāo)識(shí)設(shè)置為默認(rèn)標(biāo)識(shí);
步驟S3:鍵盤過(guò)濾驅(qū)動(dòng)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),將矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí),將矯正后的當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置;
步驟S4:鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
步驟S5:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),并將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
鍵盤過(guò)濾驅(qū)動(dòng)處理完鍵盤輸入數(shù)據(jù)中所有的鍵盤輸入信息之后,將鍵盤輸入數(shù)據(jù)返回系統(tǒng)。
本實(shí)施例中,上述方法中,還包括:
步驟N1:鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送禁止鍵盤輸入指令;
步驟N2:鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù),通過(guò)控制器將模擬鍵盤輸入數(shù)據(jù)傳輸給系統(tǒng),通過(guò)系統(tǒng)將模擬鍵盤輸入數(shù)據(jù)進(jìn)行處理得到鍵盤輸入信息,并將鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中;
步驟N2中,鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之后,還包括:鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送允許鍵盤輸入指令。
可選地,在上述步驟N1之前還包括:鍵盤過(guò)濾驅(qū)動(dòng)等待控制器空閑。
可選地,上述步驟N2中鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之后,還包括:鍵盤過(guò)濾驅(qū)動(dòng)生成并保存信息記錄;
鍵盤過(guò)濾驅(qū)動(dòng)獲取的當(dāng)前鍵盤輸入信息為干擾信息時(shí),具有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄。
可選地,在本實(shí)施例中,上述步驟S1中,還包括:鍵盤過(guò)濾驅(qū)動(dòng)計(jì)算鍵盤輸入數(shù)據(jù)中鍵盤輸入信息的個(gè)數(shù);
相應(yīng)地,上述步驟S2之前,還包括:
步驟m1:鍵盤過(guò)濾驅(qū)動(dòng)判斷循環(huán)次數(shù)是否小于鍵盤輸入信息的個(gè)數(shù),是則執(zhí)行步驟S2,否則將鍵盤輸入數(shù)據(jù)返回系統(tǒng);
鍵盤過(guò)濾驅(qū)動(dòng)每次處理完從鍵盤輸入數(shù)據(jù)中獲取的當(dāng)前鍵盤輸入信息之后,還包括:
步驟m2:鍵盤過(guò)濾驅(qū)動(dòng)將循環(huán)次數(shù)加一,返回步驟m1;
在鍵盤過(guò)濾驅(qū)動(dòng)初始化時(shí),鍵盤過(guò)濾驅(qū)動(dòng)將循環(huán)次數(shù)設(shè)置為初始值。
具體地,循環(huán)次數(shù)的初始值為0。
上述鍵盤過(guò)濾驅(qū)動(dòng)每次處理完從鍵盤輸入數(shù)據(jù)中獲取的當(dāng)前鍵盤輸入信息之后,即為上述步驟S3-步驟S5之后,還包括步驟m2。
可選地,在本實(shí)施例的上述方法中,矯正標(biāo)識(shí)為鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí);相應(yīng)地,默認(rèn)標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí);
鍵盤過(guò)濾驅(qū)動(dòng)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),將矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),并將第二按鍵標(biāo)識(shí)更新為默認(rèn)按鍵標(biāo)識(shí)。
具體地,上述鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第二按鍵標(biāo)識(shí)的值與第一按鍵標(biāo)識(shí)的值相加,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí);
相應(yīng)地,上述方法中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值減去對(duì)應(yīng)的按鍵狀態(tài)值,使用運(yùn)算結(jié)果更新第二按鍵標(biāo)識(shí)。
具體地,上述鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第二按鍵標(biāo)識(shí)的值與第一按鍵標(biāo)識(shí)的值進(jìn)行位或運(yùn)算,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí);
相應(yīng)地,上述方法中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值取反,將取反結(jié)果與當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值進(jìn)行位與運(yùn)算,使用運(yùn)算結(jié)果更新第二按鍵標(biāo)識(shí)。
具體地,上述鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)的值為鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用自身保存的第二按鍵標(biāo)識(shí)更新當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
相應(yīng)地,上述方法中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)不為鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),或者當(dāng)?shù)谝话存I標(biāo)識(shí)的值與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值不相等時(shí),或者當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值不相等時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí)。
例如,第一預(yù)設(shè)值為0,第二預(yù)設(shè)值為1。
或者,上述鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用自身保存的第二按鍵標(biāo)識(shí)更新當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
相應(yīng)地,上述方法中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值不相等時(shí),或者當(dāng)?shù)谝话存I標(biāo)識(shí)的值與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值不相等時(shí),或者當(dāng)所述第一按鍵標(biāo)識(shí)的值不為所述鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí)。
可選地,在本實(shí)施例的上述方法中,上述鍵盤過(guò)濾驅(qū)動(dòng)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),將矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)的值為鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),或者當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),并將矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí);
相應(yīng)地,上述方法中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)的值與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值不相等,或者當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值不相等時(shí),或者當(dāng)?shù)谝话存I標(biāo)識(shí)的值不為鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),鍵盤過(guò)濾驅(qū)動(dòng)將自身保存的矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí)。
具體地,上述鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第一按鍵標(biāo)識(shí)的值與自身保存的第三預(yù)設(shè)值進(jìn)行位或運(yùn)算,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí)。
具體地,上述鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第一按鍵標(biāo)識(shí)的值與自身保存的第三預(yù)設(shè)值進(jìn)行加運(yùn)算,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí)。
可選地,本實(shí)施例上述方法中,步驟S3-步驟S4,具體為:
步驟a1:鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的矯正標(biāo)識(shí)是否為默認(rèn)標(biāo)識(shí);
當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的矯正標(biāo)識(shí)不為默認(rèn)標(biāo)識(shí)時(shí),執(zhí)行步驟a2;
步驟a2:鍵盤過(guò)濾驅(qū)動(dòng)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),將矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí);
步驟a3:鍵盤過(guò)濾驅(qū)動(dòng)判斷矯正后的當(dāng)前鍵盤輸入信息是否為干擾信息,是則執(zhí)行步驟a4,否則執(zhí)行a5;
步驟a4:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)矯正后的當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),并將矯正后的當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
步驟a5:鍵盤過(guò)濾驅(qū)動(dòng)將矯正后的當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
可選地,上述方法中,矯正標(biāo)識(shí)為鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí),默認(rèn)標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí);
上述步驟a2中,鍵盤過(guò)濾驅(qū)動(dòng)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),將矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),并將第二按鍵標(biāo)識(shí)更新為默認(rèn)按鍵標(biāo)識(shí)。
具體地,上述鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第二按鍵標(biāo)識(shí)的值與第一按鍵標(biāo)識(shí)的值相加,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí);
相應(yīng)地,上述步驟a4中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)矯正后的當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將矯正后的當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值減去對(duì)應(yīng)的按鍵狀態(tài)值,使用運(yùn)算結(jié)果更新第二按鍵標(biāo)識(shí);
上述步驟S5中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值減去對(duì)應(yīng)的按鍵狀態(tài)值,使用運(yùn)算結(jié)果更新自身保存的第二按鍵標(biāo)識(shí)。
具體地,上述鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第二按鍵標(biāo)識(shí)的值與第一按鍵標(biāo)識(shí)的值進(jìn)行位或運(yùn)算,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí);
相應(yīng)地,上述步驟a4中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)矯正后的當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將矯正后的當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值取反,將取反結(jié)果與矯正后的當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值進(jìn)行位與運(yùn)算,使用運(yùn)算結(jié)果更新自身保存的第二按鍵標(biāo)識(shí);
上述步驟S5中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值取反,將取反結(jié)果與當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值進(jìn)行位與運(yùn)算,使用運(yùn)算結(jié)果更新自身保存的第二按鍵標(biāo)識(shí)。
具體地,上述鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)的值為鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值,或者當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用自身保存的第二按鍵標(biāo)識(shí)更新當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
相應(yīng)地,上述步驟a4中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)矯正后的當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)使用第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí);
上述步驟S5中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)不為鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),或者當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值不相等時(shí),或者當(dāng)?shù)谝话存I標(biāo)識(shí)的值與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值不相等時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí)。
可選地,上述步驟a2中,鍵盤過(guò)濾驅(qū)動(dòng)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),將矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)的值為鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),或者當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),并將矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí);
相應(yīng)地,上述步驟a4中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)矯正后的當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將自身保存的矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí);
上述步驟S5中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的矯正標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)的值與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值不相等時(shí),或者當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值不相等時(shí),或者當(dāng)?shù)谝话存I標(biāo)識(shí)不為鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),鍵盤過(guò)濾驅(qū)動(dòng)將自身保存的矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí)。
具體地,上述鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第一按鍵標(biāo)識(shí)的值與自身保存的第三預(yù)設(shè)值進(jìn)行位或運(yùn)算,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí)。
具體地,上述鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第一按鍵標(biāo)識(shí)的值與自身保存的第三預(yù)設(shè)值進(jìn)行加運(yùn)算,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí)。
在本實(shí)施例中,上述步驟S2之后,還包括:
當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)自身保存的矯正標(biāo)識(shí)為默認(rèn)標(biāo)識(shí),當(dāng)前鍵盤輸入信息不為干擾信息時(shí),執(zhí)行步驟S6;
步驟S6:鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
本發(fā)明與現(xiàn)有技術(shù)相比的有益效果是:鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù),從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息之后,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)獲取的當(dāng)前鍵盤輸入信息和自身保存的矯正標(biāo)識(shí)對(duì)當(dāng)前鍵盤輸入信息進(jìn)處理,提高了鍵盤輸入的正確性;鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之前,等待控制器空閑,如此可以防止模擬鍵盤輸入數(shù)據(jù)將控制器中的數(shù)據(jù)覆蓋,保證控制器中在鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之前的數(shù)據(jù)有效。
實(shí)施例2
本實(shí)施例提供一種提高鍵盤輸入正確性的方法,如圖2所示,包括以下步驟:
步驟S21:鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù),從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息;
本實(shí)施例中,當(dāng)PS2鍵盤向控制器發(fā)送PS2鍵盤輸入數(shù)據(jù)之后,系統(tǒng)從控制器中取出PS2鍵盤輸入數(shù)據(jù),并對(duì)取出的PS2鍵盤輸入數(shù)據(jù)進(jìn)行處理生成鍵盤輸入信息,并將鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中。當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之后,系統(tǒng)從控制器中取出模擬鍵盤輸入數(shù)據(jù),并對(duì)取出的模擬鍵盤輸入數(shù)據(jù)進(jìn)行處理生成鍵盤輸入信息,并將鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中。
具體地,鍵盤過(guò)濾驅(qū)動(dòng)從鍵盤輸入數(shù)據(jù)中獲取的當(dāng)前鍵盤輸入信息具體為KEYBOARD_NIPUT_DATA結(jié)構(gòu)數(shù)據(jù)。
例如,KEYBOARD_NIPUT_DATA結(jié)構(gòu)數(shù)據(jù)如下:
USHORT UnitId;//鍵盤設(shè)備對(duì)應(yīng)的位置數(shù)字
USHORT MakeCode;//按鍵掃描碼,即按鍵值
USHORT Flags;//第一按鍵標(biāo)識(shí)
其中,PS2鍵盤對(duì)應(yīng)的Unitld值為0;PS2鍵盤上包括非擴(kuò)展按鍵和擴(kuò)展按鍵,當(dāng)非擴(kuò)展按鍵被按下時(shí)系統(tǒng)處理后得到的鍵盤輸入信息中Flags=0,非擴(kuò)展按鍵彈起時(shí)系統(tǒng)處理后得到的鍵盤輸入信息中Flags=1;擴(kuò)展按鍵按下時(shí)系統(tǒng)處理后得到的鍵盤輸入信息中Flags=2,擴(kuò)展按鍵彈起時(shí)系統(tǒng)處理后得到的鍵盤輸入信息中Flags=3。
本實(shí)施例中,在當(dāng)前鍵盤輸入信息中的按鍵標(biāo)識(shí)Flags里面還記錄了當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值。
具體地,當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值為第一按鍵標(biāo)識(shí)中第一位數(shù)字的值。例如,當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值為Flags=0(0的二進(jìn)制數(shù)為00,第一位數(shù)字的值為0)或Flags=2(2的二進(jìn)制數(shù)為10,第一位數(shù)字的值為0)時(shí),對(duì)應(yīng)的按鍵狀態(tài)值為0;當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值為Flags=1(1的二進(jìn)制數(shù)為01,第一位數(shù)字的值為1)或Flags=3(3的二進(jìn)制數(shù)為11,第一位數(shù)字的值為1)時(shí),對(duì)應(yīng)的按鍵狀態(tài)值為1。
例如,當(dāng)PS2鍵盤上的字母a被按下時(shí),經(jīng)過(guò)系統(tǒng)處理后得到鍵盤輸入信息,系統(tǒng)將鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中,鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù),從鍵盤輸入數(shù)據(jù)中獲取的對(duì)應(yīng)的當(dāng)前鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=0;
當(dāng)PS2鍵盤上的字母a被彈起時(shí),經(jīng)過(guò)系統(tǒng)處理后得到鍵盤輸入信息,系統(tǒng)將鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中,鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù),從鍵盤輸入數(shù)據(jù)中獲取的對(duì)應(yīng)的當(dāng)前鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=1;
其中,PS2鍵盤上字母a的按鍵掃描碼的值為:MakeCode=0x1e。
步驟S22:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息,是則執(zhí)行步驟S25,否則執(zhí)行步驟S23;
具體地,鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息,具體為:鍵盤過(guò)濾驅(qū)動(dòng)判斷是否具有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄,是則為干擾信息,否則不為干擾信息。
步驟S23:鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的第二按鍵標(biāo)識(shí)是否為默認(rèn)按鍵標(biāo)識(shí),是則將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置;否則執(zhí)行步驟S24。
例如,默認(rèn)按鍵標(biāo)識(shí)的值為0,鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的第二按鍵標(biāo)識(shí)是否為默認(rèn)按鍵標(biāo)識(shí),具體為鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的第二按鍵標(biāo)識(shí)的值是否為0。
步驟S24:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),將自身保存的第二按鍵標(biāo)識(shí)更新為默認(rèn)按鍵標(biāo)識(shí),將矯正后的當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
步驟S25:鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的第二按鍵標(biāo)識(shí)是否為默認(rèn)按鍵標(biāo)識(shí),是則執(zhí)行步驟S26,否則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除。
例如,默認(rèn)按鍵標(biāo)識(shí)的值為0,鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的第二按鍵標(biāo)識(shí)是否為默認(rèn)按鍵標(biāo)識(shí),具體為鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的第二按鍵標(biāo)識(shí)的值是否為0。
步驟S26:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),并將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除。
可選地,上述步驟S24中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將自身保存的第二按鍵標(biāo)識(shí)的值與第一按鍵標(biāo)識(shí)的值相加,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí);
例如,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí)的值為2,從鍵盤輸入數(shù)據(jù)中獲取的當(dāng)前鍵盤輸入信息為:
UnitId=0;
MakeCode=0x1e;
Flags=0;
即第一按鍵標(biāo)識(shí)的值為0,當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值為0,鍵盤過(guò)濾驅(qū)動(dòng)將第二按鍵標(biāo)識(shí)的值2與第一按鍵標(biāo)識(shí)的值0相加,使用運(yùn)算結(jié)果2更新當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),更新后第一按鍵標(biāo)識(shí)的值為2,矯正后的當(dāng)前鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=2;
即矯正后的當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值為2,對(duì)應(yīng)的按鍵狀態(tài)值為0;
相應(yīng)地,步驟S26中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第一按鍵標(biāo)識(shí)的值減去當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值,使用運(yùn)算結(jié)果更新自身保存的第二按鍵標(biāo)識(shí);
例如,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),默認(rèn)按鍵標(biāo)識(shí)的值0,鍵盤過(guò)濾驅(qū)動(dòng)獲取的當(dāng)前鍵盤輸入信息為:
UnitId=0;
MakeCode=0x35;
Flags=3;
當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值為3,當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值為1,鍵盤過(guò)濾驅(qū)動(dòng)將第一按鍵標(biāo)識(shí)的值3減去第對(duì)應(yīng)的按鍵狀態(tài)值1,使用運(yùn)算結(jié)果2更新自身保存的第二按鍵標(biāo)識(shí),即更新后第二按鍵標(biāo)識(shí)的值為2。
可選地,上述步驟S24中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第二按鍵標(biāo)識(shí)的值與第一按鍵標(biāo)識(shí)的值進(jìn)行位或運(yùn)算,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí);
例如,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí)的值為2,獲取的當(dāng)前鍵盤輸入信息為:
UnitId=0;
MakeCode=0x1e;
Flags=0;
即第一按鍵標(biāo)識(shí)的值為0,當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值為0;鍵盤過(guò)濾驅(qū)動(dòng)將第二按鍵標(biāo)識(shí)的值2與第一按鍵標(biāo)識(shí)的值0進(jìn)行位或運(yùn)算(2的二進(jìn)制數(shù)為00000010,0的二進(jìn)制數(shù)為00000000,00000010與00000000進(jìn)行位或運(yùn)算后得到00000010),使用運(yùn)算結(jié)果2更新第一按鍵標(biāo)識(shí),矯正后的當(dāng)前鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=2;
即矯正后的當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值為2(對(duì)應(yīng)的二進(jìn)制數(shù)為00000010);
相應(yīng)地,上述步驟S26中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值取反,將取反結(jié)果與當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值進(jìn)行位與運(yùn)算,使用運(yùn)算結(jié)果更新第二按鍵標(biāo)識(shí)。
例如,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí)的值為默認(rèn)按鍵標(biāo)識(shí),默認(rèn)按鍵標(biāo)識(shí)的值為0,鍵盤過(guò)濾驅(qū)動(dòng)獲取的當(dāng)前鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=2;
當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值為2,當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值為0,鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值00000000取反,將取反結(jié)果11111111與當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值00000010進(jìn)行位與運(yùn)算,使用運(yùn)算結(jié)果00000010更新第二按鍵標(biāo)識(shí),更新后第二按鍵標(biāo)識(shí)的值為2(2的二進(jìn)制為00000010)。
可選地,上述步驟S23之后、步驟S24之前,還包括:
步驟h1:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)是否為自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值,是則執(zhí)行步驟S24,否則將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置;
相應(yīng)地,上述步驟S24中鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)為第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用自身保存的第二按鍵標(biāo)識(shí)更新當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
例如,第一預(yù)設(shè)值為0,第二預(yù)設(shè)值為1,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí)的值為2,鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取的當(dāng)前鍵盤輸入信息為:
UnitId=0;
MakeCode=0x1e;
Flags=0;
即當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值為0,鍵盤過(guò)濾驅(qū)動(dòng)使用自身保存的第二按鍵標(biāo)識(shí)更新第一按鍵標(biāo)識(shí),更新后第一按鍵標(biāo)識(shí)的值為2,矯正后的當(dāng)前鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=2;
相應(yīng)地,上述步驟S25之后、步驟S26之前還包括:
步驟h2:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值是否為自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除,否則執(zhí)行步驟S26。
上述步驟S26中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)的值不為第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí);
例如,第一預(yù)設(shè)值為0,第二預(yù)設(shè)值為1,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí)的值為0,鍵盤過(guò)濾驅(qū)動(dòng)獲取的當(dāng)前鍵盤輸入信息為:
UnitId=0;
MakeCode=0x1e;
Flags=2;
即第一按鍵標(biāo)識(shí)的值為2,鍵盤過(guò)濾驅(qū)動(dòng)使用第一按鍵標(biāo)識(shí)的值2更新第二按鍵標(biāo)識(shí),更新后第二按鍵標(biāo)識(shí)的值為2。
可選地,本實(shí)施例中,上述步驟h1還可以為:
步驟c1:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)是否與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等,是則執(zhí)行步驟S24,否則將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
相應(yīng)地,上述步驟S24中鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用自身保存的第二按鍵標(biāo)識(shí)更新當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)。
可選地,上述步驟h2還可以為:
步驟c2:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值是否與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除,否則執(zhí)行步驟S26。
具體地,鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值是否與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等,具體為:鍵盤過(guò)濾驅(qū)動(dòng)判斷第一按鍵標(biāo)識(shí)的值是否與第一按鍵標(biāo)識(shí)第一位數(shù)字的值相等。
相應(yīng)地,上述步驟S26中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),具體為:當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值不相等時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí)。
可選地,上述步驟h2還可以為:
步驟c3:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值是否與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值相等,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除,否則執(zhí)行步驟S26。
相應(yīng)地,上述步驟S26中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),具體為:當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值不相等時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí)。
可選地,本實(shí)施例的上述方法中,還包括:
步驟N1:鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送禁止鍵盤輸入指令;
本實(shí)施例中,當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送禁止鍵盤輸入指令之后,PS2鍵盤不能夠向控制器中發(fā)送PS2鍵盤輸入數(shù)據(jù)。
具體地,鍵盤過(guò)濾驅(qū)動(dòng)通過(guò)端口函數(shù)WRITE_PORT_UCHAR向控制器發(fā)送禁止鍵盤輸入指令。
例如,端口函數(shù)為:WRITE_PORT_UCHAR(0x64,0xAD);其中,WRITE_PORT_UCHAR為端口函數(shù)名稱,參數(shù)0x64為控制器命令端口地址,參數(shù)0xAD為禁止鍵盤輸入指令。
步驟N2:鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù),通過(guò)控制器將模擬鍵盤輸入數(shù)據(jù)傳輸給系統(tǒng),通過(guò)系統(tǒng)將模擬鍵盤輸入數(shù)據(jù)進(jìn)行處理得到鍵盤輸入信息,并將鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中;
步驟N2中,鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之后,還包括:鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送允許鍵盤輸入指令。
具體地,鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送允許鍵盤輸入指令,具體為:鍵盤過(guò)濾驅(qū)動(dòng)通過(guò)端口函數(shù)WRITE_PORT_UCHAR向控制器發(fā)送允許鍵盤輸入指令;
例如,端口函數(shù)如下:WRITE_PORT_UCHAR(0x64,0xae);其中,WRITE_PORT_UCHAR為端口函數(shù)名稱,參數(shù)0x64為控制器命令端口地址,參數(shù)0xae為允許鍵盤輸入指令。
可選地,上述步驟N1之前還包括:鍵盤過(guò)濾驅(qū)動(dòng)等待控制器空閑。
具體地:鍵盤過(guò)濾驅(qū)動(dòng)通過(guò)運(yùn)行端口函數(shù)WaitForKeyboardWriteCTL等待控制器命令端口0x64空閑。如果控制器命令端口0x64空閑,則鍵盤過(guò)濾驅(qū)動(dòng)停止運(yùn)行端口函數(shù)WaitForKeyboardWriteCTL,執(zhí)行步驟N1;否則繼續(xù)運(yùn)行端口函數(shù)WaitForKeyboardWriteCTL。
具體地,鍵盤過(guò)濾驅(qū)動(dòng)通過(guò)運(yùn)行端口函數(shù)WaitForKeyboardWriteCTL等待控制器命令端口0x64空閑,具體包括:
步驟L1:鍵盤過(guò)濾驅(qū)動(dòng)通過(guò)運(yùn)行端口函數(shù)讀控制器端口的狀態(tài);
例如,鍵盤過(guò)濾驅(qū)動(dòng)通過(guò)運(yùn)行端口函數(shù)WaitForKeyboardWriteCTL讀取控制器端口的狀態(tài)為READ_PORT_UCHAR(0x64),0x64為控制器端口地址;
步驟L2:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)控制器端口的狀態(tài)判斷控制器端口是否空閑,如果是則執(zhí)行步驟N1;否則返回步驟L1;
其中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)控制器端口的狀態(tài)判斷控制器端口是否空閑,具體為:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)控制器端口的狀態(tài)判斷控制器中最低兩位的數(shù)據(jù)是否被取走,如果是則空閑,否則不空閑;
例如,鍵盤過(guò)濾驅(qū)動(dòng)判斷READ_PORT_UCHAR(0x64)&0x3是否為0,如果是,則控制器中最低兩位已經(jīng)被取走,控制器空閑;否則控制器中最低兩位沒(méi)有被取走,控制器沒(méi)有空閑。
本實(shí)施例中,鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之前等待控制器空閑,是為了避免覆蓋控制器中的PS2鍵盤輸入數(shù)據(jù)。
進(jìn)一步地,鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之后,還包括:鍵盤過(guò)濾驅(qū)動(dòng)開(kāi)啟干擾信息事件;
相應(yīng)地,上述步驟S22之前,還包括:鍵盤過(guò)濾驅(qū)動(dòng)判斷是否開(kāi)啟干擾信息事件,是則執(zhí)行步驟S22,否則執(zhí)行步驟S23;
步驟S25中,當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的按鍵標(biāo)識(shí)不是默認(rèn)按鍵標(biāo)識(shí)時(shí),還包括:鍵盤過(guò)濾驅(qū)動(dòng)關(guān)閉干擾信息事件;
步驟S26中還包括:關(guān)閉干擾信息事件。
可選地,上述步驟N2中鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之后,還包括:鍵盤過(guò)濾驅(qū)動(dòng)生成并保存信息記錄;
具體地,信息記錄中包括按鍵掃描碼和第三按鍵標(biāo)識(shí)。
上述步驟S21中,鍵盤過(guò)濾驅(qū)動(dòng)獲取的當(dāng)前鍵盤輸入信息為干擾信息時(shí),具有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄。
相應(yīng)地,上述步驟S22中鍵盤過(guò)濾驅(qū)動(dòng)判斷鍵盤輸入信息是否為干擾信息,具體為:鍵盤過(guò)濾驅(qū)動(dòng)判斷是否保存有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄,是則為干擾信息,否則不是干擾信息;
具體地,鍵盤過(guò)濾驅(qū)動(dòng)判斷是否保存有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄,具體為:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中的按鍵掃描碼的值是否與對(duì)應(yīng)的信息記錄中的按鍵掃描碼的值相等,是則具有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄,否則沒(méi)有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄。
可選地,上述步驟S26中,還包括:鍵盤過(guò)濾驅(qū)動(dòng)清除與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄;
上述步驟S25中,當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的第二按鍵標(biāo)識(shí)不是默認(rèn)按鍵標(biāo)識(shí)時(shí),還包括:鍵盤過(guò)濾驅(qū)動(dòng)清除與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄。
可選地,在上述步驟S21中,鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù)之后、從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息之前,還包括:鍵盤過(guò)濾驅(qū)動(dòng)計(jì)算鍵盤輸入數(shù)據(jù)中鍵盤輸入信息的個(gè)數(shù);
相應(yīng)地,鍵盤過(guò)濾驅(qū)動(dòng)從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息之前,還包括:
步驟m1:鍵盤過(guò)濾驅(qū)動(dòng)判斷循環(huán)次數(shù)是否小于鍵盤輸入信息的個(gè)數(shù),是則從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息,否則將鍵盤輸入數(shù)據(jù)返回系統(tǒng);
鍵盤過(guò)濾驅(qū)動(dòng)每次處理完從鍵盤輸入數(shù)據(jù)中獲取的當(dāng)前鍵盤輸入信息之后,還包括:
步驟m2:鍵盤過(guò)濾驅(qū)動(dòng)將循環(huán)次數(shù)加一,返回步驟m1;
在鍵盤過(guò)濾驅(qū)動(dòng)初始化時(shí),鍵盤過(guò)濾驅(qū)動(dòng)將循環(huán)次數(shù)設(shè)置為初始值。例如,初始值為0。
本實(shí)施例中,上述鍵盤過(guò)濾驅(qū)動(dòng)每次處理完從鍵盤輸入數(shù)據(jù)中獲取的當(dāng)前鍵盤輸入信息之后執(zhí)行步驟m2,具體為:在步驟S26之后執(zhí)行步驟m2,步驟S24之后執(zhí)行步驟m2、鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除之后執(zhí)行步驟m2,鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置之后執(zhí)行步驟m2。
具體地,上述鍵盤過(guò)濾驅(qū)動(dòng)計(jì)算鍵盤輸入數(shù)據(jù)中鍵盤輸入信息的個(gè)數(shù),具體為:鍵盤過(guò)濾驅(qū)動(dòng)使用鍵盤輸入數(shù)據(jù)的數(shù)據(jù)長(zhǎng)度除以鍵盤輸入數(shù)據(jù)中單個(gè)鍵盤輸入信息的數(shù)據(jù)長(zhǎng)度得到的正整數(shù)。
本實(shí)施例中,鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取的鍵盤輸入數(shù)據(jù),具體是上層應(yīng)用發(fā)送給系統(tǒng)的。相應(yīng)地,鍵盤過(guò)濾驅(qū)動(dòng)將鍵盤輸入數(shù)據(jù)返回系統(tǒng)之后,系統(tǒng)將鍵盤輸入信息中的數(shù)據(jù)返回對(duì)應(yīng)的上層應(yīng)用。
可選地,本實(shí)施例中,上述鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息與鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的第二按鍵標(biāo)識(shí)是否為默認(rèn)按鍵標(biāo)識(shí)的順序可以調(diào)換,即步驟S21-步驟S26順序可以為步驟M1-步驟M6,具體步驟M1-步驟M6如下:
步驟M1:鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù),從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息;
步驟M2:鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的第二按鍵標(biāo)識(shí)是否為默認(rèn)按鍵標(biāo)識(shí),是則執(zhí)行步驟M3;否則執(zhí)行步驟M5;
步驟M3:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息,是則執(zhí)行步驟M4,否則將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置;
具體地,步驟M3與上述步驟S22相同,在此不再贅述。
步驟M4:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),并將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除。
具體地,步驟M4與上述步驟S26相同,在此不再贅述。
步驟M5:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除,否則執(zhí)行步驟M6;
具體地,步驟M5與上述步驟S22相同,在此不再贅述。
步驟M6:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),將自身保存的第二按鍵標(biāo)識(shí)更新為默認(rèn)按鍵標(biāo)識(shí),將矯正后的當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置;
具體地,步驟M6與上述步驟S24相同,在此不再贅述。
可選地,本實(shí)施例中,上述步驟S22-步驟S26還可以為步驟a1-步驟a7:
步驟a1:鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的第二按鍵標(biāo)識(shí)是否為默認(rèn)按鍵標(biāo)識(shí),是則執(zhí)行步驟a6,否則執(zhí)行步驟a2;
具體地,步驟a1中鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的第二按鍵標(biāo)識(shí)是否為默認(rèn)按鍵標(biāo)識(shí)與上述步驟S25和步驟S23相同,在此不再贅述。
步驟a2:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),將第二按鍵標(biāo)識(shí)更新為默認(rèn)按鍵標(biāo)識(shí);
步驟a3:鍵盤過(guò)濾驅(qū)動(dòng)判斷矯正后的當(dāng)前鍵盤輸入信息是否為干擾信息,是則執(zhí)行步驟a4,否則執(zhí)行a5;
步驟a3中,鍵盤過(guò)濾驅(qū)動(dòng)判斷矯正后的當(dāng)前鍵盤輸入信息是否為干擾信息,與步驟S22中鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息相同,在此不再贅述。
步驟a4:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)矯正后的當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),并將矯正后的當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
步驟a5:鍵盤過(guò)濾驅(qū)動(dòng)將矯正后的當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置;
步驟a6:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息,是則執(zhí)行步驟a7,否則執(zhí)行a8;
步驟a6中鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息,與步驟S22中鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息相同,在此不再贅述。
步驟a7:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),并將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
步驟a8:鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
可選地,上述步驟a2中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第二按鍵標(biāo)識(shí)的值與第一按鍵標(biāo)識(shí)的值相加,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí);
例如,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí)的值為2,從系統(tǒng)中獲取的鍵盤輸入信息為:
UnitId=0;
MakeCode=0x1e;
Flags=0;
即第一按鍵標(biāo)識(shí)的值為0,對(duì)應(yīng)的按鍵狀態(tài)值為0,鍵盤過(guò)濾驅(qū)動(dòng)將第二按鍵標(biāo)識(shí)的值2與第一按鍵標(biāo)識(shí)的值0相加,使用運(yùn)算結(jié)果更新當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),更新后第一按鍵標(biāo)識(shí)的值為2,矯正后的鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=2;
即矯正后的當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值為2,對(duì)應(yīng)的按鍵狀態(tài)值為0。
相應(yīng)地,上述步驟a4中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)矯正后的當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將矯正后的當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值減去對(duì)應(yīng)的按鍵狀態(tài)值,使用運(yùn)算結(jié)果更新自身保存的第二按鍵標(biāo)識(shí)。
例如,鍵盤過(guò)濾驅(qū)動(dòng)將矯正后的當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值2減去對(duì)應(yīng)的按鍵狀態(tài)值0,使用運(yùn)算結(jié)果2更新自身保存的第二按鍵標(biāo)識(shí),更新后,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí)的值為2。
上述步驟a7中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值減去對(duì)應(yīng)的按鍵狀態(tài)值,使用運(yùn)算結(jié)果更新第二按鍵標(biāo)識(shí)。
例如,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),默認(rèn)按鍵標(biāo)識(shí)的值0,鍵盤過(guò)濾驅(qū)動(dòng)獲取的當(dāng)前鍵盤輸入信息為:
UnitId=0;
MakeCode=0x35;
Flags=3;
當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值為3,對(duì)應(yīng)的按鍵狀態(tài)值為1,鍵盤過(guò)濾驅(qū)動(dòng)將第一按鍵標(biāo)識(shí)的值3減去第對(duì)應(yīng)的按鍵狀態(tài)值1,使用運(yùn)算結(jié)果2更新自身保存的第二按鍵標(biāo)識(shí),即更新后第二按鍵標(biāo)識(shí)的值為2。
可選地,步驟a2中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第二按鍵標(biāo)識(shí)的值與第一按鍵標(biāo)識(shí)的值進(jìn)行位或運(yùn)算,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí);
例如,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí)的值為2,從系統(tǒng)中獲取的鍵盤輸入信息為:
UnitId=0;
MakeCode=0x1e;
Flags=0;
即第一按鍵標(biāo)識(shí)的值為0,鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值為0;鍵盤過(guò)濾驅(qū)動(dòng)將第二按鍵標(biāo)識(shí)的值2與第一按鍵標(biāo)識(shí)的值0進(jìn)行位或運(yùn)算(2的二進(jìn)制數(shù)為00000011,0的二進(jìn)制數(shù)為00000000,00000010與00000000進(jìn)行位或運(yùn)算后得到00000010),使用運(yùn)算結(jié)果2更新第一按鍵標(biāo)識(shí),矯正后的鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=2;
即矯正后的鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值為2(對(duì)應(yīng)的二進(jìn)制數(shù)為00000010);
相應(yīng)地,步驟a4中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)矯正后的當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將矯正后的當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值取反,將取反結(jié)果與矯正后的當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值進(jìn)行位與運(yùn)算,使用運(yùn)算結(jié)果更新第二按鍵標(biāo)識(shí);
例如,矯正后的當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值為2,矯正后的當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值為0,鍵盤過(guò)濾驅(qū)動(dòng)將矯正后的當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值00000000取反,將取反結(jié)果11111111與矯正后的當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值00000010進(jìn)行位與運(yùn)算,使用運(yùn)算結(jié)果00000010更新第二按鍵標(biāo)識(shí),更新后第二按鍵標(biāo)識(shí)的值為2(2的二進(jìn)制為00000010)。
步驟a7中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值取反,將取反結(jié)果與當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值進(jìn)行位與運(yùn)算,使用運(yùn)算結(jié)果更新第二按鍵標(biāo)識(shí)。
例如,鍵盤過(guò)濾驅(qū)動(dòng)獲取的當(dāng)前鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=2;
當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值為2,則與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值為0,鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值00000000取反,將取反結(jié)果11111111與當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值00000010進(jìn)行位與運(yùn)算,使用運(yùn)算結(jié)果00000010更新第二按鍵標(biāo)識(shí),更新后第二按鍵標(biāo)識(shí)的值為2(2的二進(jìn)制為00000010)。
可選地,步驟a2之前,還包括:
步驟W1:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否為自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值,是則執(zhí)行步驟a2。
步驟a2中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)的值為第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用自身保存的第二按鍵標(biāo)識(shí)更新當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
例如,第一預(yù)設(shè)值為0,第二預(yù)設(shè)值為1,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí)的值為2,鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取的當(dāng)前鍵盤輸入信息為:
UnitId=0;
MakeCode=0x1e;
Flags=0;
即當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值為0,鍵盤過(guò)濾驅(qū)動(dòng)使用自身保存的第二按鍵標(biāo)識(shí)更新第一按鍵標(biāo)識(shí),更新后第一按鍵標(biāo)識(shí)的值為2,矯正后的當(dāng)前鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=2;
相應(yīng)地,步驟a4中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)矯正后的當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)使用矯正后的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí);
例如,鍵盤過(guò)濾驅(qū)動(dòng)使用矯正后的第一按鍵標(biāo)識(shí)的值2更新自身保存的第二按鍵標(biāo)識(shí)的值,更新后,第二按鍵標(biāo)識(shí)的值為2。
相應(yīng)地,步驟a7之前,還包括:
步驟W2:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否為自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除,否則執(zhí)行步驟a7。
步驟a7中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)不為第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí)。
例如,第一預(yù)設(shè)值為0,第二預(yù)設(shè)值為1,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第二按鍵標(biāo)識(shí)的值為0,從系統(tǒng)中獲取的鍵盤輸入信息為:
UnitId=0;
MakeCode=0x1e;
Flags=2;
即第一按鍵標(biāo)識(shí)的值為2,鍵盤過(guò)濾驅(qū)動(dòng)使用第一按鍵標(biāo)識(shí)的值2更新第二按鍵標(biāo)識(shí),更新后第二按鍵標(biāo)識(shí)的值為2。
可選地,上述步驟W1中,鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值不為自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
可選地,上述步驟W1中,鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值不為自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),在鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置之前,還包括:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;否則將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
可選地,上述步驟W1還可以為:
步驟R1:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等,是則執(zhí)行步驟a2,否則將鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
相應(yīng)地,上述步驟a2中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用自身保存的第二按鍵標(biāo)識(shí)更新當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)。
可選地,上述步驟W2還可以為:
步驟R2:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除,否則執(zhí)行步驟a7。
具體地,鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等,具體為:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否與當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)第一位數(shù)字的值相等,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除,否則執(zhí)行步驟a7;
相應(yīng)地,上述步驟a7中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值不相等時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí)。
可選地,上述步驟W2還可以為:
步驟R3:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值相等,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除,否則執(zhí)行步驟a7。
相應(yīng)地,上述步驟a7中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí),具體為:當(dāng)?shù)谝话存I標(biāo)識(shí)的值與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值不相等時(shí),鍵盤過(guò)濾驅(qū)動(dòng)使用第一按鍵標(biāo)識(shí)更新自身保存的第二按鍵標(biāo)識(shí)。
在本發(fā)明實(shí)施例中,系統(tǒng)中包括系統(tǒng)鍵盤底層驅(qū)動(dòng)、系統(tǒng)鍵盤類驅(qū)動(dòng);PS2鍵盤向控制器發(fā)送的PS2鍵盤輸入數(shù)據(jù)可能為1個(gè)字節(jié),也可能是兩個(gè)字節(jié),鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送的模擬鍵盤輸入數(shù)據(jù)通常為一個(gè)字節(jié)??刂破髅看沃荒芙邮找粋€(gè)字節(jié)的數(shù)據(jù),當(dāng)PS2鍵盤輸入數(shù)據(jù)包括兩個(gè)字節(jié)時(shí),PS2鍵盤向控制器發(fā)送的第一個(gè)字節(jié)包括額外按鍵標(biāo)識(shí),向控制器發(fā)送的第二個(gè)字節(jié)包括按鍵掃描碼。
本實(shí)施例中,當(dāng)PS2鍵盤上的按鍵被按下時(shí),PS2鍵盤向控制器發(fā)送相應(yīng)的PS2鍵盤輸入數(shù)據(jù),系統(tǒng)從控制其中獲取PS2鍵盤輸入數(shù)據(jù)以及對(duì)PS2鍵盤輸入數(shù)據(jù)的處理方法如下:
當(dāng)PS2鍵盤的非擴(kuò)展按鍵被按下時(shí),PS2鍵盤向控制器發(fā)送的PS2鍵盤輸入數(shù)據(jù)為1個(gè)字節(jié),鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中取出對(duì)應(yīng)的鍵盤輸入信息之前,控制器和系統(tǒng)對(duì)PS2鍵盤輸入數(shù)據(jù)的處理方法包括以下步驟:
步驟A1:PS2鍵盤向控制器發(fā)送PS2鍵盤輸入數(shù)據(jù);
步驟A2:系統(tǒng)鍵盤底層驅(qū)動(dòng)從控制器中取出PS2鍵盤輸入數(shù)據(jù),對(duì)PS2鍵盤輸入數(shù)據(jù)進(jìn)行處理得到鍵盤輸入信息;
例如,當(dāng)PS2鍵盤按下字母a時(shí),系統(tǒng)鍵盤底層驅(qū)動(dòng)對(duì)PS2鍵盤輸入數(shù)據(jù)進(jìn)行處理得到的鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=0;
步驟A3:系統(tǒng)鍵盤底層驅(qū)動(dòng)通過(guò)回調(diào)函數(shù)將鍵盤輸入信息發(fā)送給系統(tǒng)鍵盤類驅(qū)動(dòng);
步驟A4:系統(tǒng)鍵盤類驅(qū)動(dòng)將鍵盤輸入信息復(fù)制到IRP中的鍵盤輸入數(shù)據(jù)中。
系統(tǒng)鍵盤類驅(qū)動(dòng)中的IRP來(lái)自上層應(yīng)用。
具體地,本發(fā)明中,上述鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù),具體為:鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)鍵類盤驅(qū)動(dòng)中的IRP中獲取鍵盤輸入數(shù)據(jù)。
當(dāng)PS2鍵盤擴(kuò)展按鍵被按下時(shí),PS2鍵盤向控制器發(fā)送的PS2鍵盤輸入數(shù)據(jù)為兩個(gè)字節(jié),鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中取出鍵盤輸入數(shù)據(jù)之前,控制器和系統(tǒng)對(duì)PS2鍵盤輸入數(shù)據(jù)的處理方法包括以下步驟:
步驟B1:PS2鍵盤向控制器發(fā)送PS2鍵盤輸入數(shù)據(jù)的第一個(gè)字節(jié);
步驟B2:系統(tǒng)鍵盤底層驅(qū)動(dòng)從控制器中取出PS2鍵盤輸入數(shù)據(jù)第一個(gè)字節(jié),并進(jìn)行保存。
步驟B3:PS2鍵盤向控制器發(fā)送PS2鍵盤輸入數(shù)據(jù)的第二個(gè)字節(jié);
步驟B4:系統(tǒng)鍵盤底層驅(qū)動(dòng)從控制器中取出數(shù)據(jù),并進(jìn)行處理,生成鍵盤輸入信息。
在步驟B2之后、步驟B3之前,鍵盤過(guò)濾驅(qū)動(dòng)沒(méi)有向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)時(shí),則PS2鍵盤輸入數(shù)據(jù)的第一個(gè)字節(jié)和第二個(gè)字節(jié)不會(huì)被拆分,步驟B4系統(tǒng)鍵盤底層驅(qū)動(dòng)從控制器中取出的數(shù)據(jù)為PS2鍵盤輸入數(shù)據(jù)的第二個(gè)字節(jié),系統(tǒng)鍵盤底層驅(qū)動(dòng)會(huì)對(duì)保存PS2鍵盤輸入數(shù)據(jù)的第一個(gè)字節(jié)和接收的第二個(gè)字節(jié)進(jìn)行處理得到鍵盤輸入信息。
例如,當(dāng)PS2鍵盤按下字母小鍵盤“/”時(shí),系統(tǒng)鍵盤底層驅(qū)動(dòng)對(duì)PS2鍵盤輸入數(shù)據(jù)的第二個(gè)字節(jié)和保存的第一個(gè)字節(jié)進(jìn)行處理,得到的鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x35;
Flags=2;
在步驟B2之后、步驟B3之前,鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)時(shí),則PS2鍵盤輸入數(shù)據(jù)的第一個(gè)字節(jié)和第二個(gè)字節(jié)被拆分,步驟B4中系統(tǒng)鍵盤底層驅(qū)動(dòng)從控制器中取出的數(shù)據(jù)為模擬鍵盤輸入數(shù)據(jù),系統(tǒng)鍵盤底層驅(qū)動(dòng)會(huì)對(duì)保存的第一個(gè)字節(jié)和接收的模擬鍵盤輸入數(shù)據(jù)進(jìn)行處理,得到鍵盤輸入信息,鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之后,鍵盤過(guò)濾驅(qū)動(dòng)會(huì)生成并保存信息記錄,信息記錄中包括第三按鍵標(biāo)識(shí)和按鍵掃描碼。
例如,模擬鍵盤輸入數(shù)據(jù)中按鍵掃描碼的值為0x1e,系統(tǒng)鍵盤底層驅(qū)動(dòng)對(duì)模擬鍵盤輸入數(shù)據(jù)和保存的第一個(gè)字節(jié)進(jìn)行處理,得到的鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=2;
鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之后,生成并保存信息記錄,信息記錄中按鍵掃描碼的值為0x1e,第三按鍵標(biāo)識(shí)的值為0,鍵盤過(guò)濾驅(qū)動(dòng)獲取到對(duì)應(yīng)的當(dāng)前鍵盤輸入信息時(shí),會(huì)根據(jù)接收的第一按鍵標(biāo)識(shí)Flags=2更新自身保存的矯正標(biāo)識(shí)(矯正標(biāo)識(shí)具體可以為第二按鍵標(biāo)識(shí))。
當(dāng)系統(tǒng)鍵盤底層驅(qū)動(dòng)從控制器中取到PS2鍵盤輸入數(shù)據(jù)的第二個(gè)字節(jié)時(shí),對(duì)第二個(gè)字節(jié)進(jìn)行處理,當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)獲取到對(duì)應(yīng)的當(dāng)前鍵盤輸入信息時(shí),根據(jù)自身保存的矯正標(biāo)識(shí)(矯正標(biāo)識(shí)具體可以為第二按鍵標(biāo)識(shí))對(duì)當(dāng)前鍵盤輸入信息進(jìn)行矯正。
例如,系統(tǒng)鍵盤底層驅(qū)動(dòng)對(duì)PS2鍵盤輸入數(shù)據(jù)的第二個(gè)字節(jié)進(jìn)行處理,得到的鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x35;
Flags=0;
鍵盤過(guò)濾驅(qū)動(dòng)獲取對(duì)應(yīng)的當(dāng)前鍵盤輸入信息之后,會(huì)根據(jù)自身保存的矯正標(biāo)識(shí)對(duì)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)Flags=0進(jìn)行矯正。
步驟B5:系統(tǒng)鍵盤底層驅(qū)動(dòng)通過(guò)回調(diào)函數(shù)將鍵盤輸入信息發(fā)送給系統(tǒng)鍵盤類驅(qū)動(dòng);
步驟B6:系統(tǒng)鍵盤類驅(qū)動(dòng)將鍵盤輸入信息復(fù)制到IRP中的鍵盤輸入數(shù)據(jù)。
本實(shí)施例中,系統(tǒng)鍵盤類驅(qū)動(dòng)的IRP來(lái)自上層應(yīng)用。
具體地,上述鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù),具體為:鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)鍵類盤驅(qū)動(dòng)的IRP中獲取鍵盤輸入數(shù)據(jù)。
本發(fā)明中,鍵盤過(guò)濾驅(qū)動(dòng)會(huì)不定時(shí)的向控制器發(fā)送模擬鍵盤輸入信息,當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)時(shí),在鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)鍵盤驅(qū)動(dòng)中取出對(duì)應(yīng)的鍵盤輸入信息之前,還包括以下步驟:
步驟D1:鍵盤過(guò)濾驅(qū)動(dòng)等待控制器空閑;
具體地,步驟D1與本實(shí)施例中上述鍵盤過(guò)濾驅(qū)動(dòng)等待控制器空閑的方法相同,在此不再贅述。
步驟D2:鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送禁止鍵盤輸入指令。
具體參考上述步驟N1,在此不再贅述。
步驟D3:鍵盤過(guò)濾驅(qū)動(dòng)等待控制器空閑;
與步驟D1相同,在此不再贅述。
步驟D4:當(dāng)控制器空閑時(shí),鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送寫數(shù)據(jù)指令;
具體地,鍵盤過(guò)濾驅(qū)動(dòng)調(diào)用端口函數(shù)WRITE_PORT_UCHAR向控制器的命令端口0x64發(fā)送寫數(shù)據(jù)指令。
例如,端口函數(shù)為:WRITE_PORT_UCHAR(0x64,0xd2)。
其中,WRITE_PORT_UCHAR為端口函數(shù)名稱,參數(shù)0x64為控制器命令端口地址,參數(shù)0xd2為寫數(shù)據(jù)指令。
步驟D5:鍵盤過(guò)濾驅(qū)動(dòng)等待控制器的輸入緩存器空閑。
具體地,鍵盤過(guò)濾驅(qū)動(dòng)通過(guò)運(yùn)行第一端口函數(shù)判斷控制器端口是否空閑,是則輸入緩存器空閑,否則輸入緩存器不空閑:
例如,第一端口函數(shù)為READ_PORT_UCHAR(0x64),其中,參數(shù)0x64為控制器端口地址;
具體地,鍵盤過(guò)濾驅(qū)動(dòng)通過(guò)運(yùn)行第一端口函數(shù)判斷控制器端口是否空閑,具體為:鍵盤過(guò)濾驅(qū)動(dòng)通過(guò)運(yùn)行第一端口函數(shù)判斷控制器中第二位的數(shù)據(jù)是否被取走,如果取走則空閑,否則不空閑。
例如,鍵盤過(guò)濾驅(qū)動(dòng)判斷READ_PORT_UCHAR(0x64)&0x2是否為0,如果是,則控制器中第二位數(shù)據(jù)已經(jīng)被取走,控制器空閑;否則控制器中第二位數(shù)據(jù)沒(méi)有被取走,控制器沒(méi)有空閑,繼續(xù)判斷控制器端口是否空閑。
步驟D6:鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù),開(kāi)啟干擾信息事件,生成并保存信息記錄;
步驟D7:系統(tǒng)鍵盤底層驅(qū)動(dòng)從控制器中取出模擬鍵盤輸入數(shù)據(jù),對(duì)模擬鍵盤輸入數(shù)據(jù)進(jìn)行處理得到鍵盤輸入信息。
當(dāng)系統(tǒng)鍵盤底層驅(qū)動(dòng)中沒(méi)有保存額外按鍵標(biāo)識(shí)時(shí),對(duì)模擬鍵盤輸入數(shù)據(jù)處理后得到的鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值為0或1;
例如,得到的鍵盤輸入信息為:
UnitId=0;
MakeCode=0x82;
Flags=1;
當(dāng)系統(tǒng)鍵盤底層驅(qū)動(dòng)中保存額外按鍵標(biāo)識(shí)時(shí),對(duì)模擬鍵盤輸入數(shù)據(jù)和額外按鍵標(biāo)識(shí)進(jìn)行處理后得到的鍵盤輸入信息中第一按鍵標(biāo)的不為0或1;
例如,得到的鍵盤輸入信息為:
UnitId=0;
MakeCode=0x82;
Flags=3;
步驟D8:系統(tǒng)鍵盤底層驅(qū)動(dòng)通過(guò)回調(diào)函數(shù)將鍵盤輸入信息發(fā)送給系統(tǒng)鍵盤類驅(qū)動(dòng)。
步驟D9:系統(tǒng)鍵盤類驅(qū)動(dòng)將鍵盤輸入信息復(fù)制到IRP請(qǐng)求的鍵盤輸入數(shù)據(jù)中。
本實(shí)施例中,系統(tǒng)鍵盤類驅(qū)動(dòng)中的IRP來(lái)自上層應(yīng)用。
具體地,本發(fā)明中,上述鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入信息,具體為:鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)鍵類盤驅(qū)動(dòng)的IRP中獲取鍵盤輸入數(shù)據(jù)。
本發(fā)明與現(xiàn)有技術(shù)相比的有益效果是:當(dāng)PS2鍵盤輸入數(shù)據(jù)包括兩個(gè)字節(jié)時(shí),在PS2鍵盤向控制器發(fā)送完第一個(gè)字節(jié)后,如果鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù),鍵盤過(guò)濾驅(qū)動(dòng)獲取對(duì)應(yīng)的鍵盤輸入信息,根據(jù)獲取的當(dāng)前鍵盤輸入信息對(duì)自身保存的第二按鍵標(biāo)識(shí)進(jìn)行更新,當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)獲取到與PS2鍵盤輸入數(shù)據(jù)第二個(gè)字節(jié)對(duì)應(yīng)的鍵盤輸入信息時(shí),使用保存的第二按鍵標(biāo)識(shí)對(duì)獲取的當(dāng)前鍵盤輸入信息進(jìn)行矯正,從而有效避免PS2鍵盤輸入數(shù)據(jù)的第二個(gè)字節(jié)和第一個(gè)字節(jié)被模擬鍵盤輸入數(shù)據(jù)拆分,保證上層應(yīng)用接收的PS2鍵盤輸入數(shù)據(jù)的正確性;控制器接收到PS2鍵盤輸入數(shù)據(jù)后,在系統(tǒng)鍵盤驅(qū)動(dòng)將控制器中的PS2鍵盤輸入數(shù)據(jù)取走之前,鍵盤過(guò)濾驅(qū)動(dòng)會(huì)等待控制器空閑之后再向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù),如此可以防止模擬鍵盤輸入數(shù)據(jù)將控制器中的PS2鍵盤輸入數(shù)據(jù)覆蓋,保證PS2鍵盤輸入數(shù)據(jù)有效。
實(shí)施例3
本實(shí)施例提供一種提高鍵盤輸入正確性的方法,如圖3所示,包括:
步驟S31:鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù),從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息。
本實(shí)施例步驟S31與實(shí)施例2中步驟S21相同,在此不再贅述。
步驟S32:鍵盤過(guò)驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息,是則執(zhí)行步驟S36;否則執(zhí)行步驟S33。
具體地,鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息,具體為:鍵盤過(guò)濾驅(qū)動(dòng)判斷是否具有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄,是則為干擾信息,否則不為干擾信息。
步驟S33:鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的矯正標(biāo)識(shí)是否為默認(rèn)標(biāo)識(shí),是則將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置;否則執(zhí)行步驟S34。
例如,默認(rèn)標(biāo)識(shí)的值為0,鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的矯正標(biāo)識(shí)是否為默認(rèn)標(biāo)識(shí),具體為鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的矯正標(biāo)識(shí)的值是否為0。
步驟S34:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否為自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值,是則執(zhí)行步驟S35,否則將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置;
優(yōu)選地,本實(shí)施例中,第一預(yù)設(shè)值為0,第二預(yù)設(shè)值為1。
可選地,步驟S34還可以為:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等,是則執(zhí)行步驟S35,否則將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
具體地,鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等,具體為:鍵盤過(guò)濾驅(qū)動(dòng)判斷第一按鍵標(biāo)識(shí)的值是否與第一按鍵標(biāo)識(shí)中第一位數(shù)字的值相等,是則執(zhí)行步驟S35,否則將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
步驟S35:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),并將矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí)。
優(yōu)選地,第三預(yù)設(shè)值為2。
步驟S36:鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的矯正標(biāo)識(shí)是否為默認(rèn)標(biāo)識(shí),是則執(zhí)行步驟S37;否則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除。
例如,默認(rèn)標(biāo)識(shí)為0。
步驟S37:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值相等,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除,否則執(zhí)行步驟S38。
可選地,步驟S37還可以為:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除,否則執(zhí)行步驟S38。
具體地,鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否與第一按鍵標(biāo)識(shí)中第一位數(shù)字的值相等,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除,否則執(zhí)行步驟S38。
可選地,步驟S37還可以為:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否與自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值相等,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除,否則執(zhí)行步驟S38。
例如,第一預(yù)設(shè)值為0,第二預(yù)設(shè)值為1。
步驟S38:鍵盤過(guò)濾驅(qū)動(dòng)將自身保存的矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí),將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除。
例如,預(yù)設(shè)的非默認(rèn)標(biāo)識(shí)為1。
可選地,上述步驟S35中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第一按鍵標(biāo)識(shí)的值與自身保存的第三預(yù)設(shè)值進(jìn)行位或運(yùn)算,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí)。
例如,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第三預(yù)設(shè)值為2,從系統(tǒng)鍵盤驅(qū)動(dòng)中獲取的當(dāng)前鍵盤輸入信息為:
UnitId=0;
MakeCode=0x1e;
Flags=0;
即第一按鍵標(biāo)識(shí)的值為0,鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值為0;
鍵盤過(guò)濾驅(qū)動(dòng)將第三預(yù)設(shè)值2與第一按鍵標(biāo)識(shí)的值0進(jìn)行位或運(yùn)算(2的二進(jìn)制數(shù)為00000011,0的二進(jìn)制數(shù)為00000000,00000010與00000000進(jìn)行位或運(yùn)算后得到00000010),使用運(yùn)算結(jié)果2更新第一按鍵標(biāo)識(shí),矯正后的當(dāng)前鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=2;
即矯正后的當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值為2(對(duì)應(yīng)的二進(jìn)制數(shù)為00000010)。
可選地,上述步驟S35中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第一按鍵標(biāo)識(shí)的值與自身保存的第三預(yù)設(shè)值進(jìn)行加運(yùn)算,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí)。
例如,第三預(yù)設(shè)值為2,鍵盤過(guò)濾驅(qū)動(dòng)獲取的鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=0;
即第一按鍵標(biāo)識(shí)的值為0,鍵盤過(guò)濾驅(qū)動(dòng)將第一按鍵標(biāo)識(shí)的值0與自身保存的第三預(yù)設(shè)值2進(jìn)行加運(yùn)算,使用運(yùn)算結(jié)果2更新第一按鍵標(biāo)識(shí),更新后第一按鍵標(biāo)識(shí)的值為2。矯正后的鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=2;
即矯正后當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值為2。
可選地,本實(shí)施例的上述方法中,還包括:
步驟N1:鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送禁止鍵盤輸入指令;
本實(shí)施例中,步驟N1與實(shí)施例2中步驟N1相同,在此不再贅述。
步驟N2:鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù),通過(guò)控制器將模擬鍵盤輸入數(shù)據(jù)傳輸給系統(tǒng),通過(guò)系統(tǒng)將模擬鍵盤輸入數(shù)據(jù)進(jìn)行處理得到鍵盤輸入信息,并將鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中;
步驟N2中,鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之后,還包括:鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送允許鍵盤輸入指令。
具體地,鍵盤過(guò)濾驅(qū)動(dòng)通過(guò)端口函數(shù)WRITE_PORT_UCHAR向控制器發(fā)送允許鍵盤輸入指令;
例如,端口函數(shù)如下:WRITE_PORT_UCHAR(0x64,0xae);其中,WRITE_PORT_UCHAR為端口函數(shù)名稱,參數(shù)0x64為控制器命令端口地址,參數(shù)0xae為允許鍵盤輸入指令。
可選地,步驟N2中鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之后,還包括:鍵盤過(guò)濾驅(qū)動(dòng)生成并保存信息記錄;
具體地,信息記錄中包括按鍵掃描碼和第三按鍵標(biāo)識(shí)。
上述步驟S31中,鍵盤過(guò)濾驅(qū)動(dòng)獲取的當(dāng)前鍵盤輸入信息為干擾信息時(shí),具有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄。
相應(yīng)地,上述步驟S32中鍵盤過(guò)濾驅(qū)動(dòng)判斷鍵盤輸入信息是否為干擾信息,具體為:鍵盤過(guò)濾驅(qū)動(dòng)判斷是否保存有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄,是則為干擾信息,否則不是干擾信息;
具體地,鍵盤過(guò)濾驅(qū)動(dòng)判斷是否保存有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄,具體為:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中的按鍵掃描碼的值是否與對(duì)應(yīng)的信息記錄中的按鍵掃描碼的值相等,是則具有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄,否則沒(méi)有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄。
上述步驟S38中,還包括:鍵盤過(guò)濾驅(qū)動(dòng)清除與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄;
上述步驟S36中,當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的矯正標(biāo)識(shí)是默認(rèn)標(biāo)識(shí)時(shí),還包括:鍵盤過(guò)濾驅(qū)動(dòng)清除與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄;
上述步驟S37中,鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值不相等時(shí),還包括:鍵盤過(guò)濾驅(qū)動(dòng)清除與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄。
進(jìn)一步地,步驟N1之前還包括:鍵盤過(guò)濾驅(qū)動(dòng)等待控制器空閑。
本實(shí)施例中鍵盤過(guò)濾驅(qū)動(dòng)等待控制器空閑,與實(shí)施例2中鍵盤過(guò)濾驅(qū)動(dòng)等待控制器空閑的方法相同,在此不再贅述。
本實(shí)施例中,鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之前等待控制器空閑,是為了避免覆蓋控制器中的PS2鍵盤輸入數(shù)據(jù)。
進(jìn)一步地,鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之后,還包括:鍵盤過(guò)濾驅(qū)動(dòng)開(kāi)啟干擾信息事件;
相應(yīng)地,上述步驟S32之前,還包括:鍵盤過(guò)濾驅(qū)動(dòng)判斷是否開(kāi)啟干擾信息事件,是則執(zhí)行步驟S32,否則執(zhí)行步驟S33;
上述步驟S36中,當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí)時(shí),還包括:鍵盤過(guò)濾驅(qū)動(dòng)關(guān)閉干擾信息事件;
上述步驟S37中,鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值相等時(shí),還包括:鍵盤過(guò)濾驅(qū)動(dòng)關(guān)閉干擾信息事件;
上述步驟S38中還包括:關(guān)閉干擾信息事件。
可選地,本實(shí)施例中,上述步驟S32-步驟S38還可以為步驟a1-步驟a7:
步驟a1:鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的矯正標(biāo)識(shí)是否為默認(rèn)標(biāo)識(shí),是則執(zhí)行步驟a7,否則執(zhí)行步驟a2;
例如,默認(rèn)標(biāo)識(shí)的值為0。
具體地,步驟a1中鍵盤過(guò)濾驅(qū)動(dòng)判斷自身保存的矯正標(biāo)識(shí)是否為默認(rèn)標(biāo)識(shí)與上述步驟S33和步驟S36相同。
步驟a2:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否為第一預(yù)設(shè)值或第二預(yù)設(shè)值,是則執(zhí)行步驟a3,否則將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置;
優(yōu)選地,本實(shí)施例中,第一預(yù)設(shè)值為0,第二預(yù)設(shè)值為1。
可選地,步驟a2還可以為:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等,是則執(zhí)行步驟a3,否則將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
具體地,鍵盤過(guò)濾驅(qū)動(dòng)判斷第一按鍵標(biāo)識(shí)的值是否與第一按鍵標(biāo)識(shí)中第一位數(shù)字的值相等,是則執(zhí)行步驟a3;否則將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
可選地,在步驟a2中的否分支中,在鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置之前,還包括:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
相應(yīng)地,鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置,具體為:當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息不為干擾信息時(shí),鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
步驟a3:鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),并將矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí)。
步驟a4:鍵盤過(guò)濾驅(qū)動(dòng)判斷矯正后的當(dāng)前鍵盤輸入信息是否為干擾信息,是則執(zhí)行步驟a5,否則執(zhí)行a6;
步驟a4中,鍵盤過(guò)濾驅(qū)動(dòng)判斷矯正后的當(dāng)前鍵盤輸入信息是否為干擾信息,具體與步驟S32中鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息相同,在此不再贅述。
步驟a5:鍵盤過(guò)濾驅(qū)動(dòng)將自身保存的矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí),并將矯正后的當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
例如,預(yù)設(shè)的非默認(rèn)標(biāo)識(shí)的值為1。
步驟a6:鍵盤過(guò)濾驅(qū)動(dòng)將矯正后的當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置;
步驟a7:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息,是則執(zhí)行步驟a8,否則將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)對(duì)應(yīng)的位置;
步驟a7中鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息,與上述步驟S32中鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息是否為干擾信息相同,在此不再贅述。
步驟a8:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值是否與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值相等,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;否則執(zhí)行步驟a9。
可選地,步驟a8還可以為:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;否則執(zhí)行步驟a9。
具體地,鍵盤過(guò)濾驅(qū)動(dòng)判斷第一按鍵標(biāo)識(shí)的值是否與第一按鍵標(biāo)識(shí)中第一位數(shù)字的值相等,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;否則執(zhí)行步驟a9。
可選地,步驟a8還可以為:鍵盤過(guò)濾驅(qū)動(dòng)判斷當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值是否為自身保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值,是則將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;否則執(zhí)行步驟a9。
例如,第一預(yù)設(shè)值為0,第二預(yù)設(shè)值為1。
步驟a9:鍵盤過(guò)濾驅(qū)動(dòng)將自身保存的矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí),并將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除。
優(yōu)選地,預(yù)設(shè)的非默認(rèn)標(biāo)識(shí)的值為1。
可選地,上述步驟a3中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第一按鍵標(biāo)識(shí)的值與自身保存的第三預(yù)設(shè)值進(jìn)行位或運(yùn)算,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí)。
例如,鍵盤過(guò)濾驅(qū)動(dòng)自身保存的第三預(yù)設(shè)值為2,從系統(tǒng)鍵盤驅(qū)動(dòng)中獲取的當(dāng)前鍵盤輸入信息為:
UnitId=0;
MakeCode=0x1e;
Flags=0;
即第一按鍵標(biāo)識(shí)的值為0,鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值為0;
鍵盤過(guò)濾驅(qū)動(dòng)將第三預(yù)設(shè)值2與第一按鍵標(biāo)識(shí)的值0進(jìn)行位或運(yùn)算(2的二進(jìn)制數(shù)為00000011,0的二進(jìn)制數(shù)為00000000,00000010與00000000進(jìn)行位或運(yùn)算后得到00000010),使用運(yùn)算結(jié)果2更新第一按鍵標(biāo)識(shí),矯正后的當(dāng)前鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=2;
即矯正后的當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值為2(對(duì)應(yīng)的二進(jìn)制數(shù)為00000010)。
可選地,上述步驟a3中,鍵盤過(guò)濾驅(qū)動(dòng)根據(jù)自身保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),具體為:鍵盤過(guò)濾驅(qū)動(dòng)將第一按鍵標(biāo)識(shí)的值與自身保存的第三預(yù)設(shè)值進(jìn)行加運(yùn)算,使用運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí)。
例如,第三預(yù)設(shè)值為2,鍵盤過(guò)濾驅(qū)動(dòng)獲取的當(dāng)前鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=0;
即第一按鍵標(biāo)識(shí)的值為0,鍵盤過(guò)濾驅(qū)動(dòng)將第一按鍵標(biāo)識(shí)的值0與自身保存的第三預(yù)設(shè)值2進(jìn)行加運(yùn)算,使用運(yùn)算結(jié)果2更新第一按鍵標(biāo)識(shí),更新后第一按鍵標(biāo)識(shí)的值為2。矯正后的鍵盤輸入信息如下:
UnitId=0;
MakeCode=0x1e;
Flags=2;
即矯正后當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)的值為2。
可選地,在上述步驟S31中,鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù)之后、從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息之前,還包括:鍵盤過(guò)濾驅(qū)動(dòng)計(jì)算鍵盤輸入數(shù)據(jù)中鍵盤輸入信息的個(gè)數(shù);
相應(yīng)地,鍵盤過(guò)濾驅(qū)動(dòng)從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息之前,還包括:
步驟m1:鍵盤過(guò)濾驅(qū)動(dòng)判斷循環(huán)次數(shù)是否小于鍵盤輸入信息的個(gè)數(shù),是則從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息,否則將鍵盤輸入數(shù)據(jù)返回系統(tǒng);
鍵盤過(guò)濾驅(qū)動(dòng)每次處理完從鍵盤輸入數(shù)據(jù)中獲取的當(dāng)前鍵盤輸入信息之后,還包括:
步驟m2:鍵盤過(guò)濾驅(qū)動(dòng)將循環(huán)次數(shù)加一,返回步驟m1;
在鍵盤過(guò)濾驅(qū)動(dòng)初始化時(shí),鍵盤過(guò)濾驅(qū)動(dòng)將循環(huán)次數(shù)設(shè)置為初始值。例如,初始值為0。
本實(shí)施例中,上述鍵盤過(guò)濾驅(qū)動(dòng)每次處理完從鍵盤輸入數(shù)據(jù)中獲取的當(dāng)前鍵盤輸入信息之后執(zhí)行步驟m2,具體為:在步驟S38之后執(zhí)行步驟m2,步驟S35之后執(zhí)行步驟m2,鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除之后執(zhí)行步驟m2,鍵盤過(guò)濾驅(qū)動(dòng)將當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置之后執(zhí)行步驟m2。
具體地,上述鍵盤過(guò)濾驅(qū)動(dòng)計(jì)算鍵盤輸入數(shù)據(jù)中鍵盤輸入信息的個(gè)數(shù),具體為:鍵盤過(guò)濾驅(qū)動(dòng)使用鍵盤輸入數(shù)據(jù)的數(shù)據(jù)長(zhǎng)度除以鍵盤輸入數(shù)據(jù)中單個(gè)鍵盤輸入信息的數(shù)據(jù)長(zhǎng)度得到的正整數(shù)。
本實(shí)施例中,鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)中獲取的鍵盤輸入數(shù)據(jù),具體是上層應(yīng)用發(fā)送給系統(tǒng)的。相應(yīng)地,鍵盤過(guò)濾驅(qū)動(dòng)將鍵盤輸入數(shù)據(jù)返回系統(tǒng)之后,系統(tǒng)將鍵盤輸入信息中的數(shù)據(jù)返回對(duì)應(yīng)的上層應(yīng)用。
本實(shí)施例中,當(dāng)PS2鍵盤上的按鍵被按下時(shí),PS2鍵盤向控制器發(fā)送相應(yīng)的PS2鍵盤輸入數(shù)據(jù),系統(tǒng)從控制器中獲取PS2鍵盤輸入數(shù)據(jù)以及對(duì)PS2鍵盤輸入數(shù)據(jù)的處理方法參考實(shí)施例2中步驟A1-步驟A4和步驟B1-步驟B6,在此不再贅述。
本發(fā)明中,鍵盤過(guò)濾驅(qū)動(dòng)會(huì)不定時(shí)的向控制器發(fā)送模擬鍵盤輸入信息,當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)時(shí),在鍵盤過(guò)濾驅(qū)動(dòng)從系統(tǒng)鍵盤驅(qū)動(dòng)中取出對(duì)應(yīng)的鍵盤輸入信息之前,鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)以及系統(tǒng)對(duì)模擬鍵盤輸入數(shù)據(jù)的處理方法參考實(shí)施例2中步驟D1-步驟D9,在此不再贅述。
本發(fā)明與現(xiàn)有技術(shù)相比的有益效果是:本發(fā)明中,當(dāng)PS2鍵盤輸入數(shù)據(jù)包括兩個(gè)字節(jié)時(shí),在PS2鍵盤向控制器發(fā)送完第一個(gè)字節(jié)后,如果鍵盤過(guò)濾驅(qū)動(dòng)向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù),鍵盤過(guò)濾驅(qū)動(dòng)獲取到對(duì)應(yīng)的當(dāng)前鍵盤輸入信息后,將自身保存的矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí),當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)獲取到與PS2鍵盤輸入數(shù)據(jù)第二個(gè)字節(jié)對(duì)應(yīng)的鍵盤輸入信息時(shí),判斷自身保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí)時(shí),根據(jù)自身保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí),從而有效避免PS2鍵盤輸入數(shù)據(jù)的第二個(gè)字節(jié)和第一個(gè)字節(jié)被模擬鍵盤輸入數(shù)據(jù)拆分,保證上層應(yīng)用接收的PS2鍵盤輸入數(shù)據(jù)的正確性;控制器接收到PS2鍵盤輸入數(shù)據(jù)后,在系統(tǒng)鍵盤驅(qū)動(dòng)將控制器中的PS2鍵盤輸入數(shù)據(jù)取走之前,鍵盤過(guò)濾驅(qū)動(dòng)會(huì)等待控制器空閑之后再向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù),如此可以防止模擬鍵盤輸入數(shù)據(jù)將控制器中的PS2鍵盤輸入數(shù)據(jù)覆蓋,保證PS2鍵盤輸入數(shù)據(jù)有效。
實(shí)施例4
本實(shí)施例提供一種鍵盤過(guò)濾驅(qū)動(dòng),如圖4所示為鍵盤過(guò)濾驅(qū)動(dòng)的模塊組成框圖,具體包括:
第一獲取模塊101,用于從系統(tǒng)中獲取鍵盤輸入數(shù)據(jù);
第二獲取模塊102,用于從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息;
保存模塊103,用于保存矯正標(biāo)識(shí);
矯正模塊104,用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息不為干擾信息,保存模塊103保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí)時(shí),矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
第一更新模塊105,用于當(dāng)矯正模塊104矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)之后,將保存模塊103保存的矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí);
存儲(chǔ)模塊106,用于將矯正模塊104矯正后的當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置;
第一移除模塊107,用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息,保存模塊103保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí)時(shí),將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
第二更新模塊108,用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息,保存模塊103保存的矯正標(biāo)識(shí)為默認(rèn)標(biāo)識(shí)時(shí),根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新保存模塊103保存的矯正標(biāo)識(shí);
第二移除模塊109,用于當(dāng)?shù)诙履K108根據(jù)當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新保存模塊103保存的矯正標(biāo)識(shí)之后,將當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
設(shè)置模塊110,用于在鍵盤過(guò)濾驅(qū)動(dòng)初始化時(shí),將保存模塊103保存的矯正標(biāo)識(shí)設(shè)置為默認(rèn)標(biāo)識(shí);
返回模塊111,用于當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)處理完第一獲取模塊101獲取的鍵盤輸入數(shù)據(jù)中所有的鍵盤輸入信息之后,將鍵盤輸入數(shù)據(jù)返回系統(tǒng)。
可選地,上述鍵盤過(guò)濾驅(qū)動(dòng),還包括第一發(fā)送模塊、第二發(fā)送模塊和第三發(fā)送模塊,
第一發(fā)送模塊,用于向控制器發(fā)送禁止鍵盤輸入指令;
第二發(fā)送模塊,用于當(dāng)?shù)谝话l(fā)送模塊向控制器發(fā)送禁止鍵盤輸入指令之后,向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù),通過(guò)控制器將模擬鍵盤輸入數(shù)據(jù)傳輸給系統(tǒng),通過(guò)系統(tǒng)將模擬鍵盤輸入數(shù)據(jù)進(jìn)行處理得到鍵盤輸入信息,并將鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中;
第三發(fā)送模塊,用于當(dāng)?shù)诙l(fā)送模塊向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之后,向控制器發(fā)送允許鍵盤輸入指令。
可選地,上述鍵盤過(guò)濾驅(qū)動(dòng)在包括第一發(fā)送模塊、第二發(fā)送模塊和第三發(fā)送模塊的基礎(chǔ)上,還包括等待模塊,
等待模塊,用于在第一發(fā)送模塊向控制器發(fā)送禁止鍵盤輸入指令之前,等待控制器空閑。
可選地,上述鍵盤過(guò)濾驅(qū)動(dòng)在包括第一發(fā)送模塊、第二發(fā)送模塊和第三發(fā)送模塊的基礎(chǔ)上,還包括生成模塊,
生成模塊,用于當(dāng)?shù)诙l(fā)送模塊向控制器發(fā)送模擬鍵盤輸入數(shù)據(jù)之后,生成信息記錄;
相應(yīng)地,上述保存模塊103,還用于保存生成模塊生成的信息記錄;
第二獲取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息時(shí),具有與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄。
可選地,上述鍵盤過(guò)濾驅(qū)動(dòng),還包括計(jì)算模塊、計(jì)數(shù)模塊和第一判斷模塊;
保存模塊103,還用于保存循環(huán)次數(shù);
設(shè)置模塊110,還用于在鍵盤過(guò)濾驅(qū)動(dòng)初始化時(shí),將保存模塊103保存的循環(huán)次數(shù)設(shè)置為初始值;
計(jì)算模塊,用于計(jì)算第一獲取模塊101獲取的鍵盤輸入數(shù)據(jù)中鍵盤輸入信息的個(gè)數(shù);
第一判斷模塊,用于在第二獲取模塊102從鍵盤輸入信息中獲取當(dāng)前鍵盤輸入信息之前,判斷保存模塊103保存的循環(huán)次數(shù)是否小于計(jì)算模塊計(jì)算得到的鍵盤輸入信息的個(gè)數(shù);
相應(yīng)地,上述返回模塊111,具體用于當(dāng)?shù)谝慌袛嗄K判斷保存模塊103保存的循環(huán)次數(shù)不小于鍵盤輸入信息的個(gè)數(shù)時(shí),將鍵盤輸入數(shù)據(jù)返回系統(tǒng);
第二獲取模塊102,具體用于當(dāng)?shù)谝慌袛嗄K判斷保存模塊103保存的循環(huán)次數(shù)小于鍵盤輸入信息的個(gè)數(shù)時(shí),從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息;
計(jì)數(shù)模塊,用于鍵盤過(guò)濾驅(qū)動(dòng)每次處理完從鍵盤輸入數(shù)據(jù)中獲取的當(dāng)前鍵盤輸入信息之后,將保存模塊103保存的循環(huán)次數(shù)加一;
第一判斷模塊,還用于在計(jì)數(shù)模塊將保存模塊103保存的循環(huán)次數(shù)加一之后,判斷保存模塊103保存的循環(huán)次數(shù)是否小于鍵盤輸入信息的個(gè)數(shù)。
在本實(shí)施例中,上述鍵盤過(guò)濾驅(qū)動(dòng)中保存模塊103保存的矯正標(biāo)識(shí)為第二按鍵標(biāo)識(shí),默認(rèn)標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí);
矯正模塊104,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息不為干擾信息,保存模塊103保存的第二按鍵標(biāo)識(shí)不是默認(rèn)按鍵標(biāo)識(shí)時(shí),根據(jù)保存模塊103保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
第一更新模塊105,具體用于當(dāng)矯正模塊104根據(jù)保存模塊103保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)之后,將保存模塊103保存的第二按鍵標(biāo)識(shí)更新為默認(rèn)按鍵標(biāo)識(shí)。
具體地,上述矯正模塊104包括運(yùn)算子模塊和更新子模塊,
運(yùn)算子模塊,用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息不為干擾信息,保存模塊103保存的第二按鍵標(biāo)識(shí)不是默認(rèn)按鍵標(biāo)識(shí)時(shí),將保存模塊103保存的第二按鍵標(biāo)識(shí)的值與第一按鍵標(biāo)識(shí)的值相加;
更新子模塊,用于使用運(yùn)算子模塊的運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí);
相應(yīng)地,上述第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息,保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí)時(shí),將當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值減去對(duì)應(yīng)的按鍵狀態(tài)值,使用運(yùn)算結(jié)果更新保存模塊103保存的第二按鍵標(biāo)識(shí)。
具體地,上述矯正模塊104包括運(yùn)算子模塊和更新子模塊,
運(yùn)算子模塊,用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息不為干擾信息,保存模塊103保存的第二按鍵標(biāo)識(shí)不是默認(rèn)按鍵標(biāo)識(shí)時(shí),將第二按鍵標(biāo)識(shí)的值與第一按鍵標(biāo)識(shí)的值進(jìn)行位或運(yùn)算;
更新子模塊,用于使用運(yùn)算子模塊的運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí);
相應(yīng)地,上述第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息,保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí)時(shí),將與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值取反,將取反結(jié)果與當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值進(jìn)行位與運(yùn)算,使用運(yùn)算結(jié)果更新保存模塊103保存的第二按鍵標(biāo)識(shí)。
具體地,上述保存模塊103,還用于保存第一預(yù)設(shè)值和第二預(yù)設(shè)值;用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息時(shí),保存與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄;
相應(yīng)地,上述矯正模塊104,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息不為干擾信息、保存模塊103保存的第二按鍵標(biāo)識(shí)不是默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值為保存模塊103保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),使用保存模塊103保存的第二按鍵標(biāo)識(shí)更新當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
上述第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息、保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值不為保存模塊103保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),或者當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息、保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值不相等時(shí);或者當(dāng)所述第二獲取模塊獲取的所述當(dāng)前鍵盤輸入信息為干擾信息、所述保存模塊保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值不相等時(shí),使用第一按鍵標(biāo)識(shí)更新保存模塊103保存的第二按鍵標(biāo)識(shí);
或者,可選地,
上述矯正模塊104,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息不為干擾信息、保存模塊103保存的第二按鍵標(biāo)識(shí)不是默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),使用保存模塊103保存的第二按鍵標(biāo)識(shí)更新當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
相應(yīng)地,上述第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息、保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值不相等時(shí);或者當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息、保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值不相等時(shí);或者當(dāng)所述第二獲取模塊獲取的所述當(dāng)前鍵盤輸入信息為干擾信息、所述保存模塊保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)所述第一按鍵標(biāo)識(shí)的值不為所述保存模塊保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí)時(shí),使用第一按鍵標(biāo)識(shí)更新保存模塊103保存的第二按鍵標(biāo)識(shí)。
在本實(shí)施例中,上述鍵盤過(guò)濾驅(qū)動(dòng)中的保存模塊103,還用于保存第三預(yù)設(shè)值、第一預(yù)設(shè)值和第二預(yù)設(shè)值;用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息時(shí),保存與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄;
相應(yīng)地,上述矯正模塊104,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息不為干擾信息、保存模塊103保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值為保存模塊103保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),根據(jù)保存模塊103保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
或者,矯正模塊104,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息不為干擾信息、保存模塊103保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),根據(jù)保存模塊103保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
第一更新模塊105,具體用于當(dāng)矯正模塊104根據(jù)保存模塊103保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)之后,將保存模塊103保存的矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí);
第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息、保存模塊103保存的矯正標(biāo)識(shí)為默認(rèn)標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與保存模塊103保存的信息記錄中的第三按鍵標(biāo)識(shí)的值不相等時(shí),將保存模塊103保存的矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí);
或者,第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息、保存模塊103保存的矯正標(biāo)識(shí)為默認(rèn)標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值不相等時(shí),將保存模塊103保存的矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí);
或者,第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息、保存模塊103保存的矯正標(biāo)識(shí)為默認(rèn)標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值不為保存模塊103保存的第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),將保存模塊103保存的矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí)。
具體地,上述矯正模塊104包括運(yùn)算子模塊和更新子模塊,
運(yùn)算子模塊,用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息不為干擾信息、保存模塊103保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值為第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),將第一按鍵標(biāo)識(shí)的值與保存模塊103保存的第三預(yù)設(shè)值進(jìn)行位或運(yùn)算;
或者,運(yùn)算子模塊,用于當(dāng)?shù)诙@取模塊獲取的當(dāng)前鍵盤輸入信息不為干擾信息、保存模塊保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),將第一按鍵標(biāo)識(shí)的值與保存模塊保存的第三預(yù)設(shè)值進(jìn)行位或運(yùn)算;
更新子模塊,用于使用運(yùn)算子模塊的運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí)。
具體地,上述矯正模塊104包括運(yùn)算子模塊和更新子模塊,
運(yùn)算子模塊,用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息不為干擾信息、保存模塊103保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值為第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),將第一按鍵標(biāo)識(shí)的值與保存模塊103保存的第三預(yù)設(shè)值進(jìn)行加運(yùn)算;
或者,運(yùn)算子模塊,用于當(dāng)?shù)诙@取模塊獲取的當(dāng)前鍵盤輸入信息不為干擾信息、保存模塊保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),將第一按鍵標(biāo)識(shí)的值與保存模塊保存的第三預(yù)設(shè)值進(jìn)行加運(yùn)算;
更新子模塊,用于使用運(yùn)算子模塊的運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí)。
本實(shí)施例中,上述鍵盤過(guò)濾驅(qū)動(dòng),還包括第二判斷模塊、第三判斷模塊和第三更新模塊;
第二判斷模塊,用于當(dāng)?shù)诙@取模塊102從鍵盤輸入數(shù)據(jù)中獲取當(dāng)前鍵盤輸入信息之后,判斷保存模塊103保存的矯正標(biāo)識(shí)是否為默認(rèn)標(biāo)識(shí);
相應(yīng)地,矯正模塊104,具體用于當(dāng)?shù)诙袛嗄K判斷保存模塊103保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí)時(shí),矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
第一更新模塊105,具體用于當(dāng)?shù)诙袛嗄K判斷保存模塊103保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí),矯正模塊104矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)之后,將保存模塊103保存的矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí);
第三判斷模塊,用于判斷矯正模塊104矯正后的當(dāng)前鍵盤輸入信息是否為干擾信息;
第三更新模塊,用于當(dāng)?shù)谌袛嗄K判斷矯正模塊104矯正后的當(dāng)前鍵盤輸入信息是干擾信息時(shí),根據(jù)矯正模塊104矯正后的當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新保存模塊103保存的矯正標(biāo)識(shí);
第二移除模塊109,還用于當(dāng)?shù)谌履K根據(jù)矯正模塊104矯正后的當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)更新保存模塊103保存的矯正標(biāo)識(shí)之后,將矯正模塊104矯正后的當(dāng)前鍵盤輸入信息從鍵盤輸入數(shù)據(jù)中移除;
存儲(chǔ)模塊106,具體用于當(dāng)?shù)谌袛嗄K判斷矯正模塊104矯正后的當(dāng)前鍵盤輸入信息不是干擾信息時(shí),將矯正模塊104矯正后的當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
可選地,上述保存模塊103保存的矯正標(biāo)識(shí)為第二按鍵標(biāo)識(shí),默認(rèn)標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí);
相應(yīng)地,上述矯正模塊104,具體用于當(dāng)?shù)诙袛嗄K判斷保存模塊103保存的第二按鍵標(biāo)識(shí)不是默認(rèn)按鍵標(biāo)識(shí)時(shí),根據(jù)保存模塊103保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
第一更新模塊105,具體用于當(dāng)矯正模塊104根據(jù)保存模塊103保存的第二按鍵標(biāo)識(shí)矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)之后,將保存模塊103保存的第二按鍵標(biāo)識(shí)更新為默認(rèn)按鍵標(biāo)識(shí)。
具體地,上述矯正模塊104包括運(yùn)算子模塊和更新子模塊;
運(yùn)算子模塊,用于當(dāng)?shù)诙袛嗄K判斷保存模塊103保存的第二按鍵標(biāo)識(shí)不是默認(rèn)按鍵標(biāo)識(shí)時(shí),將保存模塊103保存的第二按鍵標(biāo)識(shí)的值與第一按鍵標(biāo)識(shí)的值相加;
更新子模塊,用于使用運(yùn)算子模塊的運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí);
上述第三更新模塊,具體用于當(dāng)?shù)谌袛嗄K判斷矯正模塊104矯正后的當(dāng)前鍵盤輸入信息是干擾信息時(shí),將矯正模塊104矯正后的當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值減去對(duì)應(yīng)的按鍵狀態(tài)值,使用運(yùn)算結(jié)果更新保存模塊103保存的第二按鍵標(biāo)識(shí);
第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息,保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí)時(shí),將當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值減去對(duì)應(yīng)的按鍵狀態(tài)值,使用運(yùn)算結(jié)果更新保存模塊103保存的第二按鍵標(biāo)識(shí)。
具體地,上述矯正模塊104包括運(yùn)算子模塊和更新子模塊;
運(yùn)算子模塊,用于當(dāng)?shù)诙袛嗄K判斷保存模塊103保存的第二按鍵標(biāo)識(shí)不是默認(rèn)按鍵標(biāo)識(shí)時(shí),將保存模塊103保存的第二按鍵標(biāo)識(shí)的值與第一按鍵標(biāo)識(shí)的值進(jìn)行位或運(yùn)算;
更新子模塊,用于使用運(yùn)算子模塊的運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí);
相應(yīng)地,上述第三更新模塊,具體用于當(dāng)?shù)谌袛嗄K判斷矯正模塊104矯正后的當(dāng)前鍵盤輸入信息是干擾信息時(shí),將矯正后的當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值取反,將取反結(jié)果與矯正后的當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值進(jìn)行位與運(yùn)算,使用運(yùn)算結(jié)果更新保存模塊103保存的第二按鍵標(biāo)識(shí);
第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息,保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí)時(shí),將當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值取反,將取反結(jié)果與當(dāng)前鍵盤輸入信息中第一按鍵標(biāo)識(shí)的值進(jìn)行位與運(yùn)算,使用運(yùn)算結(jié)果更新保存模塊103保存的第二按鍵標(biāo)識(shí)。
具體地,上述保存模塊103,還用于保存第一預(yù)設(shè)值和第二預(yù)設(shè)值;用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息時(shí),保存與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄;
相應(yīng)地,上述矯正模塊104,具體用于當(dāng)?shù)诙袛嗄K判斷保存模塊103保存的第二按鍵標(biāo)識(shí)不是默認(rèn)按鍵標(biāo)識(shí),并且第一按鍵標(biāo)識(shí)的值為第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),使用保存模塊103保存的第二按鍵標(biāo)識(shí)更新當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
或者,上述矯正模塊104,具體用于當(dāng)?shù)诙袛嗄K判斷保存模塊103保存的第二按鍵標(biāo)識(shí)不是默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),使用保存模塊103保存的第二按鍵標(biāo)識(shí)更新當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
相應(yīng)地,上述第三更新模塊,具體用于當(dāng)?shù)谌袛嗄K判斷矯正模塊104矯正后的當(dāng)前鍵盤輸入信息是干擾信息時(shí),使用矯正模塊104矯正后的第一按鍵標(biāo)識(shí)更新保存模塊103保存的第二按鍵標(biāo)識(shí);
第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息,保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)不為第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),使用第一按鍵標(biāo)識(shí)更新保存模塊103保存的第二按鍵標(biāo)識(shí);
或者,第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息,保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值不相等時(shí),使用第一按鍵標(biāo)識(shí)更新保存模塊103保存的第二按鍵標(biāo)識(shí);
或者,第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息,保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值不相等時(shí),使用第一按鍵標(biāo)識(shí)更新保存模塊103保存的第二按鍵標(biāo)識(shí)。
可選地,上述保存模塊103,還用于保存第三預(yù)設(shè)值、第一預(yù)設(shè)值和第二預(yù)設(shè)值;用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息時(shí),保存與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的信息記錄;
相應(yīng)地,上述矯正模塊104,具體用于當(dāng)?shù)诙袛嗄K判斷保存模塊103保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值為第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),根據(jù)保存模塊103保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
或者,矯正模塊104,具體用于當(dāng)?shù)诙袛嗄K判斷保存模塊103保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),根據(jù)保存模塊103保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí);
第一更新模塊105,具體用于當(dāng)矯正模塊104根據(jù)保存模塊103保存的第三預(yù)設(shè)值矯正當(dāng)前鍵盤輸入信息中的第一按鍵標(biāo)識(shí)之后,將保存模塊103保存的矯正標(biāo)識(shí)更新為默認(rèn)標(biāo)識(shí);
第三更新模塊,具體用于當(dāng)?shù)谌袛嗄K判斷矯正模塊104矯正后的當(dāng)前鍵盤輸入信息是干擾信息時(shí),將矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí);
第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息,保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與對(duì)應(yīng)的信息記錄中的第三按鍵標(biāo)識(shí)的值不相等時(shí),將保存模塊103保存的矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí);
或者,第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息,保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值不相等時(shí),將保存模塊103保存的矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí);
或者,第二更新模塊108,具體用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息為干擾信息,保存模塊103保存的第二按鍵標(biāo)識(shí)為默認(rèn)按鍵標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)不為第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),將保存模塊103保存的矯正標(biāo)識(shí)更新為預(yù)設(shè)的非默認(rèn)標(biāo)識(shí)。
具體地,上述矯正模塊104包括運(yùn)算子模塊和更新子模塊;
運(yùn)算子模塊,用于當(dāng)?shù)诙袛嗄K判斷保存模塊103保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí)時(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值為第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),將第一按鍵標(biāo)識(shí)的值與保存模塊103保存的第三預(yù)設(shè)值進(jìn)行位或運(yùn)算;
或者,運(yùn)算子模塊,用于當(dāng)?shù)诙袛嗄K判斷保存模塊保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),將第一按鍵標(biāo)識(shí)的值與保存模塊保存的第三預(yù)設(shè)值進(jìn)行位或運(yùn)算;
更新子模塊,用于使用運(yùn)算子模塊的運(yùn)算結(jié)果更新第一按鍵標(biāo)識(shí)。
具體地,上述矯正模塊104包括運(yùn)算子模塊和更新子模塊;
運(yùn)算子模塊,用于當(dāng)?shù)诙袛嗄K判斷保存模塊103保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí)時(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值為第一預(yù)設(shè)值或第二預(yù)設(shè)值時(shí),將第一按鍵標(biāo)識(shí)的值與保存模塊103保存的第三預(yù)設(shè)值進(jìn)行加運(yùn)算;
或者,運(yùn)算子模塊,用于當(dāng)?shù)诙袛嗄K判斷保存模塊保存的矯正標(biāo)識(shí)不是默認(rèn)標(biāo)識(shí),并且當(dāng)?shù)谝话存I標(biāo)識(shí)的值與當(dāng)前鍵盤輸入信息對(duì)應(yīng)的按鍵狀態(tài)值相等時(shí),將第一按鍵標(biāo)識(shí)的值與保存模塊保存的第三預(yù)設(shè)值進(jìn)行加運(yùn)算;
更新子模塊,用于使用運(yùn)算子模塊的運(yùn)算結(jié)果更新第一按鍵標(biāo)。
可選地,上述鍵盤過(guò)濾驅(qū)動(dòng)中的存儲(chǔ)模塊106,還用于當(dāng)?shù)诙@取模塊102獲取的當(dāng)前鍵盤輸入信息不為干擾信息,并且保存模塊103保存的矯正標(biāo)識(shí)為默認(rèn)標(biāo)識(shí)時(shí),將第二獲取模塊102獲取的當(dāng)前鍵盤輸入信息保存到鍵盤輸入數(shù)據(jù)中對(duì)應(yīng)位置。
以上,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。