一、实际按键响应
参考http://m.blog.youkuaiyun.com/blog/marginmou/27212719
添加PreTranslateMessage方法,然后
BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(pMsg->message == WM_KEYDOWN)
{
switch (pMsg->wParam)
{//只响应回车和空格键
case VK_SPACE:
case VK_RETURN:
{
OnBtnRead();
break;
}
//其它按键响应
}
return true;//不再响应其它按键(很重要)
}
return CDialog::PreTranslateMessage(pMsg);
}
VS2008下添加PreTranslateMessage
1,类视图中找到需要添加PreTranslateMessage函数的类,
2,右键打开属性
3,选中属性的重载
4,找到PreTranslateMessage,并添加
5,写响应函数(如上)
二、模拟按键响应
参考:
http://blog.youkuaiyun.com/yizhou2010/article/details/6178115
http://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx
1、使用keybd_event,(不建议使用)
//模拟Ctrl+V粘贴功能,有时候,直接运行exe不能实现
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event('V', 0, 0, 0);
keybd_event('V', 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
2、使用SendInput实现
//使用SendInput实现
INPUT input[4];
memset(input, 0, sizeof(input));
//设置模拟键盘输入
input[0].type = input[1].type = input[2].type = input[3].type = INPUT_KEYBOARD;
input[0].ki.wVk = input[2].ki.wVk = VK_CONTROL;
input[1].ki.wVk = input[3].ki.wVk = 'V';
// 释放按键,这非常重要
input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(4, input, sizeof(INPUT));