我需要交換Alt Windows 7中的按鍵功能。一家大公司需要那些在打字機上寫字的老人,左側有變音符字符鍵,但他們正在工作的Win7現在有Alt爲此目的。交換Alt鍵功能
兩天的研究使我得到了驅動程序解決方案。我需要原始Windows 7驅動程序的源代碼(兩個.sys
文件似乎是鍵盤驅動程序),並可能在Windows DDK中修改它們。或者我需要製作一個可以與默認驅動程序配合使用的驅動程序。正如我所看到的,解決方案將使用C或C++。但是我必須通過什麼方式來完成這個任務?我應該採取什麼措施?
的限制是:
- 一個系統只重新啓動安裝驅動程序。
- 一個簡單的方法來交換替代密鑰,而在Win7中工作(交換替代鍵按下他們兩個)。
- 沒有Win7鍵盤重新映射,需要重新啓動。
以後補充:我有我需要的一切,但沒有處理交換的代碼。例如,我爲Shift和輸入了,因爲只發送了一個掃描碼。但左Alt鍵發送一個右Alt鍵發送兩個掃描碼:
VOID
KbFilter_ServiceCallback(
IN PDEVICE_OBJECT DeviceObject,
IN PKEYBOARD_INPUT_DATA InputDataStart,
IN PKEYBOARD_INPUT_DATA InputDataEnd,
IN OUT PULONG InputDataConsumed
)
/*++
Routine Description:
Called when there are keyboard packets to report to the Win32 subsystem.
You can do anything you like to the packets. For instance:
o Drop a packet altogether
o Mutate the contents of a packet
o Insert packets into the stream
Arguments:
DeviceObject - Context passed during the connect IOCTL
InputDataStart - First packet to be reported
InputDataEnd - One past the last packet to be reported. Total number of
packets is equal to InputDataEnd - InputDataStart
InputDataConsumed - Set to the total number of packets consumed by the RIT
(via the function pointer we replaced in the connect
IOCTL)
Return Value:
Status is returned.
--*/
{
PDEVICE_EXTENSION devExt;
WDFDEVICE hDevice;
hDevice = WdfWdmDeviceGetWdfDeviceHandle(DeviceObject);
devExt = FilterGetData(hDevice);
if (InputDataStart->MakeCode==0x1c)
InputDataStart->MakeCode=0x36;
else if (InputDataStart->MakeCode==0x36)
InputDataStart->MakeCode=0x1c;
else if (InputDataStart->MakeCode==0x9c)
InputDataStart->MakeCode=0xb6;
else if (InputDataStart->MakeCode==0xb6)
InputDataStart->MakeCode=0x9c;
(*(PSERVICE_CALLBACK_ROUTINE)(ULONG_PTR) devExt->UpperConnectData.ClassService)(
devExt->UpperConnectData.ClassDeviceObject,
InputDataStart,
InputDataEnd,
InputDataConsumed);
}
所以我乾脆換壓在掃描碼並單獨釋放這兩個鍵。 Right Alt正在發送兩個掃描碼,我不確定它是通過兩次調用此函數還是在InputDataStart
結構中創建兩個掃描碼。我會盡力嘀嘀嘀嘀聲Alt scancode,但您的幫助將不勝感激。
您可能想要編寫一個類過濾器驅動程序(位於低級設備驅動程序和kbdclass之間),而不是嘗試修改現有的驅動程序。 DDK包含一個示例鍵盤過濾器驅動程序,也是kbdclass的源代碼,可能作爲參考很有用。 –
我會嘗試並提供反饋。 – pbies
我已經爲.sys構建了kbfilter(示例鍵盤過濾器驅動程序),並按照說明安裝了它(在設備管理器中進行了說明)並重新啓動了Windows - 鍵盤停止工作,但它沒有響應按鍵。我需要卸載此驅動程序以使鍵盤再次工作(通過屏幕上的鍵盤)。似乎,DDK中的原始kbfilter(完全是WDK 7.1.0)聲稱無需更改就能正常工作 - 不起作用。我已經在kbfiltr.htm文件中完成了整個過程。我沒有使用Visual Studio或build.exe以及安裝驅動程序所需的一個文件。任何幫助? – pbies