系统相关功能开发(十)

编程入门 行业动态 更新时间:2024-10-25 04:25:50

系统相关<a href=https://www.elefans.com/category/jswz/34/1771378.html style=功能开发(十)"/>

系统相关功能开发(十)

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 ? "灯灭" : "灯亮");// 输出指示灯状态
}




















更多推荐

系统相关功能开发(十)

本文发布于:2024-03-10 04:23:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1727001.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:功能   系统

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!