功能开发(十)"/>
系统相关功能开发(十)
1.交换鼠标左右键
void CMouseKeyBordSampleDlg::OnButSwap() // 交换鼠标左右键
{ if (SwapMouseButton(TRUE)) // 交换鼠标左右键WriteLog("鼠标左右键已经交换"); // 输出错误提示信息elseWriteLog("交换鼠标左右键成功"); // 输出提示信息
}void CMouseKeyBordSampleDlg::OnButRestoreswap() // 恢复鼠标左右键
{ if (SwapMouseButton(FALSE)) // 恢复鼠标左右键WriteLog("恢复鼠标左右键成功"); // 输出提示信息elseWriteLog("交换鼠标左右键成功"); // 输出错误提示信息
}
2.设置鼠标双击时间间隔
void CMouseKeyBordSampleDlg::OnButSetdoubletime() // 设置鼠标双击时间间隔
{UpdateData(TRUE); // 获取要设置的鼠标双击时间间隔BOOL bResult = SetDoubleClickTime(m_DoubleClickTime); // 设置双击时间间隔值UINT dcTime = GetDoubleClickTime(); // 获取双击时间间隔值WriteLog("设置鼠标双击时间间隔%s,当前值为%d", bResult ? "成功": "失败", dcTime);
}
3. 获得鼠标键数
void CMouseKeyBordSampleDlg::OnButtonGetbuttons() // 获得鼠标键数
{int iButtons = GetSystemMetrics(SM_CMOUSEBUTTONS); // 调用GetSystemMetrics函数获取按键数if (iButtons > 0) // 如果大于0,输出按键数WriteLog("当前系统中共有%d个鼠标按键", iButtons);elseWriteLog("当前系统中没有安装鼠标"); // 否则,系统中没有安装鼠标
}
4.捕获鼠标的窗体句柄
void CMouseKeyBordSampleDlg::OnButHwnd() // 启动捕获鼠标窗体的定时器
{SetTimer(100, 1000, NULL);
}void CMouseKeyBordSampleDlg::OnTimer(UINT nIDEvent) // 定时器处理函数
{ HWND m_hWnd = ::GetCapture(); // 捕获鼠标窗体WriteLog("当前捕获鼠标的窗体的HWND=0x%08X", m_hWnd);// 输出句柄CDialog::OnTimer(nIDEvent); // 调用基类处理函数
}
5.模拟鼠标
void CMouseKeyBordSampleDlg::OnButSendmouse() // 模拟鼠标左键
{mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP , 0, 0, NULL, NULL); // 模拟鼠标左键
}
6.在对话框中使用加速键
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 ? "灯灭" : "灯亮");// 输出指示灯状态
}
更多推荐
系统相关功能开发(十)
发布评论