用postmessage ,keybd_event和sendinput均可实现向一窗体发送S按键,但是从spy++看都和实际点击键盘S不同,主要区别在lParam参数上,请问为什么呢?还有就是postmessage怎么会发送了两次字符?还有就是lParam参数到底是如何取值的?
点击键盘:
spy++显示:
WM_KEYDOWN  lParam:001F0001
WM_CHAR  lParam:001F0001
WM_KEYUP  lParam:C01F0001postmessage 
实现:
PostMessage hWnd, WM_KEYDOWN, VK_S, MapVirtualKey(VK_S, 0)
PostMessage hWnd, WM_KEYUP, VK_S, MapVirtualKey(VK_S, 0)
spy++显示:
WM_KEYDOWN lParam:1F
WM_KEYUP   lParam:1F
WM_CHAR lParam:1F
WM_CHAR lParam:1Fkeybd_event
实现:
keybd_event VK_S, 0, KEYEVENTF_EXTENDEDKEY, 0
keybd_event VK_S, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
spy++显示:
WM_KEYDOWN  lParam:40000001
WM_CHAR  lParam:40000001
WM_KEYUP  lParam:C0000001sendinput
实现:
GInput(0).dwType = INPUT_KEYBOARD
KInput.dwFlags = KEYEVENTF_KEYDOWN
CopyMemory GInput(0).xi(0), KInput, Len(KInput)
Call SendInput(1, GInput(0), Len(GInput(0))) KInput.dwFlags = KEYEVENTF_KEYUP
CopyMemory GInput(0).xi(0), KInput, Len(KInput)
Call SendInput(1, GInput(0), Len(GInput(0)))
spy++显示:
WM_KEYDOWN  lParam:00000001
WM_CHAR  lParam:00000001
WM_KEYUP  lParam:C0000001