利用Keybd_event()函数模拟键盘输入

一下来自VC++驿站:点击打开VC++驿站链接

1


代码实现:
HWND hWnd=::FindWindow(_T("Notepad"),_T("新建文本文档.txt - 记事本"));
	
	if (hWnd!=NULL)
	{
		::ShowWindow(hWnd,SW_SHOWNORMAL);
		::SetForegroundWindow(hWnd);
		BOOL bToggled=IsKeyToggled(VK_CAPITAL);
		if (bToggled)
		{
			keybd_event(VK_CAPITAL,0,0,0);
			Sleep(100);
			keybd_event(VK_CAPITAL,0,KEYEVENTF_KEYUP,0);
		}
		CString str=_T("aBcD");
		for (int i=0;i<str.GetLength();i++)
		{
			TCHAR ch=str.GetAt(i);
			if (_istlower(ch))
			{
				keybd_event(_totupper(ch),0,0,0);
				Sleep(20);
				keybd_event(_totupper(ch),0,KEYEVENTF_KEYUP,0);
			} 
			else
			{
				keybd_event(VK_SHIFT, 0, 0, 0);
				keybd_event(ch, 0, 0, 0);
				Sleep(20);
				keybd_event(ch, 0, KEYEVENTF_KEYUP, 0);
				keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
			}
			Sleep(50);
		}
		if (bToggled)
		{
			keybd_event( VK_CAPITAL, 0, KEYEVENTF_EXTENDEDKEY, 0);
			Sleep(20);
			keybd_event( VK_CAPITAL, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
		}
	}

2

其中:
#define IsKeyToggled(nVirtKey)  ((GetKeyState(nVirtKey) & 1) != 0)

说明:keybd_event 第一个参数传递大写字母,实际输入小写字母;
      keybd_event 第一个参数传递小写字母,实际输出对应的数字。

                                                                                                                                                ---------是不正确的


      所以,传进小写字母,并且要显示小写字母,就要转换到大写字母进行传入,
传进大写字母,并且要显示大写字母,要借助于 Shift 键+大写字母进行传入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值