2010-03-26 50 views
0

我正在使用將密鑰發送給遊戲的WPF應用程序。我將鍵盤上的按鍵作爲鍵盤,向觀察者打開spy ++。然後我在應用程序上按下我的按鈕,然後我注意到spy ++消息中有不同的掃描代碼。這可能與Windows 7 64位有關嗎? 部分清單:Windows 7上的SendInput掃描碼x64

var down = new INPUT(); 
down.Type = (UInt32)InputType.KEYBOARD; 
down.Data.Keyboard = new KEYBDINPUT(); 
down.Data.Keyboard.Vk = (UInt16)keyCode; 
down.Data.Keyboard.Scan = 0; 
down.Data.Keyboard.Flags = 0; 
down.Data.Keyboard.Time = 0; 
down.Data.Keyboard.ExtraInfo = IntPtr.Zero; 
//down.Data.Keyboard.ExtraInfo = GetMessageExtraInfo(); 

var up = new INPUT(); 
up.Type = (UInt32)InputType.KEYBOARD; 
up.Data.Keyboard = new KEYBDINPUT(); 
up.Data.Keyboard.Vk = (UInt16)keyCode; 
up.Data.Keyboard.Scan = 0; 
up.Data.Keyboard.Flags = (UInt32)KeyboardFlag.KEYUP; 
up.Data.Keyboard.Time = 0; 
up.Data.Keyboard.ExtraInfo = IntPtr.Zero; 
//up.Data.Keyboard.ExtraInfo = GetMessageExtraInfo(); 

INPUT[] inputList = new INPUT[2]; 
inputList[0] = down; 
inputList[1] = up; 

var numberOfSuccessfulSimulatedInputs = SendInput(2, inputList, Marshal.SizeOf(typeof(INPUT))); 

的圖片顯示,當我用我的代碼來發送關鍵我收到的掃描碼:從諜++消息輸出00fExtended。當我實際上按相同的鍵時,我收到ScanCode:1FfExtended。其他一切都是相同的。

http://spilmansoftware.com/images/scancode.gif http://spilmansoftware.com/images/scancode.gif

回答

0

根據MSDN文檔WM_KEYDOWN,掃描代碼值取決於OEM。

特別是,您的鍵盤可能不是英語/美式美式鍵盤。或者您可以打開任何非標準切換鍵(如F Lock)。玩這些,看看是否改變這些將對掃描碼有任何影響。

1

你需要在精神上把00和fExtended之間的空間,實際的短語是「掃描碼:00」,其次是「fExtended:0」

,掃描碼是0是不足爲奇的,你把它在您的代碼中爲0:

down.Data.Keyboard.Scan = 0; 

這應該不會造成問題,掃描代碼僅在虛擬鍵不明確時才使用。例如,左右Shift鍵。如果您願意,可以使用MapVirtualKey()。

+0

好抓!謝謝。 – Stanomatic 2010-04-14 16:22:50