void CMouseKeyBordSampleDlg::OnButRegisthotkey() // 在对话框中使用加速键
{
if(RegisterHotKey(this->m_hWnd, VK_F1+1, MOD_CONTROL, VK_F1+1)) // 注册加速键
WriteLog("注册加速键成功"); // 输出提示信息
else WriteLog("注册加速键失败"); // 输出错误信息
}
LRESULT CMouseKeyBordSampleDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) // 窗口消息处理函数
{
char szName[MAX_PATH]={0}; // 定义名称变量
UINT fuModifiers,uVirtKey; // 定义按键变量
switch(message) // 判断消息
{
case WM_LBUTTONDOWN:
WriteLog("按下鼠标左键");
break;
case WM_LBUTTONUP:
WriteLog("抬起鼠标左键");
break;
case WM_KEYDOWN:
TCHAR szName[200];
GetKeyNameText(wParam, szName, sizeof(szName));
WriteLog("按下%s按键", szName);
break;
case WM_HOTKEY: // 接收到加速键
uVirtKey = MapVirtualKey((UINT)HIWORD(lParam), 0)<<16; // 获取功能按键
if (GetKeyNameText(uVirtKey, (LPTSTR)szName, sizeof(szName))) // 获取按键名称
WriteLog("加速键=%s", szName); // 输出按键名称
fuModifiers = (UINT) LOWORD(lParam); // 取组合功能键
switch(fuModifiers) // 判断组合键
{
case MOD_ALT: // ALT键
WriteLog("(按下ALT组合键)"); break;
case MOD_CONTROL: // CTRL键
WriteLog("(按下CTRL组合键)"); break;
case MOD_SHIFT: // SHIFT键
WriteLog("(按下SHIFT组合键)");break;
case MOD_WIN: // WIN键
WriteLog("(按下WIN组合键)"); break;
}
break;
default:
break;
}
return CDialog::WindowProc(message, wParam, lParam);
}
7.获取键盘类型
void CMouseKeyBordSampleDlg::OnButtonGetkeyboard() // 获取键盘类型
{
CString type[8]={"获取键盘类型失败", "IBM PC/XT or compatible (83-key) keyboard",
"Olivetti 'ICO' (102-key) keyboard", "IBM PC/AT (84-key) or similar keyboard",
"IBM enhanced (101- or 102-key) keyboard", "Nokia 1050 and similar keyboards",
"Nokia 9140 and similar keyboards", "Japanese keyboard"}; // 定义键盘类型名称
CString funKeys[8]={"获取键盘功能键数目失败", "10", "12,有时是18","10", "12",
"10", "24","根据OEM厂商而定"}; // 定义键盘功能按键数
int keyboardType = GetKeyboardType(0); // 获取键盘类型
int keyboardSubType = GetKeyboardType(1); // 获取键盘子类型
int functionsKeys = GetKeyboardType(2); // 获取键盘功能按键数
if (keyboardType < 8) WriteLog("键盘类型=%s", type[keyboardType]); // 输出键盘类型
else WriteLog("键盘类型未知");
WriteLog("键盘子类型=%d(具体含义,需要根据键盘类型的不同进行判断)", keyboardSubType); // 输出键盘子类型
if (functionsKeys < 8) WriteLog("键盘功能键数目=%s\r\n", type[functionsKeys]); // 输出键盘功能按键数
else WriteLog("键盘功能键数目未知");
}
8. 控制键盘指示灯
void CMouseKeyBordSampleDlg::OnButControlkey() // 控制键盘指示灯
{
int keys[] = {VK_CAPITAL, VK_NUMLOCK,VK_SCROLL}; // 定义控制的指示灯
CString keysName[] = {"VK_CAPITAL", "VK_NUMLOCK","VK_SCROLL"}; // 定义指示灯名称
for (int i = 0;i < sizeof(keys)/sizeof(int);i ++) // 依次控制各个指示灯状态
{
keybd_event( keys[i], 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 ); // 切换指示灯状态
keybd_event( keys[i], 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);// 切换指示灯状态
}
BYTE keyState[MAX_PATH]={0}; // 指示灯状态数组
GetKeyboardState((LPBYTE)&keyState); // 获取键盘状态
for (int i = 0;i < sizeof(keys)/sizeof(int);i ++) // 依次获取指示灯状态
WriteLog("%s当前%s", keysName[i], keyState[keys[i]] == 1 ? "灯灭" : "灯亮");// 输出指示灯状态
}