MFC 模拟真实按键

embedc 2014-05-16 11:29:09
就是要按键精灵那种效果,Ctrl + C 、 Ctrl +V 等组合键的实现。
但是我自己做,

keybd_event(17, 0, 0, 0);
keybd_event(86, 0, 0, 0);
keybd_event(86, 0, 0x2, 0);
keybd_event(17, 0, 0x2, 0);

就只在 windows 自带的编辑器中有效。为什么??

...全文
567 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2014-06-25
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
jacky_qiu 2014-05-25
  • 打赏
  • 举报
回复
以上这个可以模拟 向后台程序发送按键
jacky_qiu 2014-05-25
  • 打赏
  • 举报
回复


win7+vs2008 express 下通过:

/****************************************************************************
参考:baidu : 如何在VB中用PostMessage向指定窗口发送带有修饰键的组合键
 http://blog.csdn.net/wangjieest/article/details/6958039
****************************************************************************/

void SimulateKeyDown(HWND hWnd,UINT nChar)
{
	UINT ScanCode= MapVirtualKey( nChar , MAPVK_VK_TO_VSC);
	LPARAM KeyDownLPARAM= (ScanCode<<16) | 0x00000001 ;
	::PostMessage(hWnd,WM_KEYDOWN,nChar,KeyDownLPARAM);
}

void SimulatekeyUp(HWND hWnd,UINT nChar)
{
	UINT ScanCode= MapVirtualKey( nChar , MAPVK_VK_TO_VSC);
	LPARAM KeyUpLPARAM	= (ScanCode<<16) | 0xC0000001 ;
	::PostMessage(hWnd,WM_KEYUP,nChar,KeyUpLPARAM);
}


//ctrl+O
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,MAPVK_VK_TO_VSC),0,0);
SimulateKeyDown( GetWnd() ,'O');
SimulatekeyUp  ( GetWnd() ,'O');
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,MAPVK_VK_TO_VSC),KEYEVENTF_KEYUP,0); 



//发送文本,不限于edit控件。不能用Sendmessage,因为不经过GetMessage循环
//最后一个参数(lParam)低16位(0001)表示按键一次,高8位00表示按下,C0表示抬起,次高8位(01)表示该键的扫描码,
//可用 API MapVirtualKey(VirtualKey, 0)取得(注意:扫描码在各系统可能会不同,在此以具体数值示例,
//实际应用MapVirtualKey取得)。
HWND m_hWnd=GetWnd();
TCHAR SendText[100]="::PostMessage(m_hWnd,WM_CHAR,'a',0x001E0001);";
int len=_tcslen(SendText);
for (int i=0;i<len;i++)
{
	::PostMessage(m_hWnd,WM_CHAR,SendText[i],0);	// lparam 不需要准确的值
}



ToneChip 2014-05-21
  • 打赏
  • 举报
回复
嗯,sendkey就能实现发送CTRL + C等功能
embedc 2014-05-20
  • 打赏
  • 举报
回复
引用 3 楼 zhangyonghui2117 的回复:
要用全局钩子,hook
引用 1 楼 hhhh63 的回复:
应该做系统钩子吧
钩子不是用来读 按键的么? 我想要的是 创建按键.不知道怎么实现. 如果有请给详细描述的链接.
embedc 2014-05-20
  • 打赏
  • 举报
回复
引用 4 楼 jacky_qiu 的回复:
keybd_event(VK_CONTROL,0,0,0); keybd_event('C',0,0,0); keybd_event('C',0,KEYEVENTF_KEYUP,0); keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); ok , 可以模拟 CTRL+C
跟我的有什么区别么?
hhhh63 2014-05-20
  • 打赏
  • 举报
回复
引用 6 楼 embedc 的回复:
钩子不是用来读 按键的么? 我想要的是 创建按键.不知道怎么实现. 如果有请给详细描述的链接.
钩子也可以写按键
叶恭介叶恭介 2014-05-20
  • 打赏
  • 举报
回复
亲,每个Keybd_event需要延时的 keybd_event(17, 0, 0, 0); Sleep(50); keybd_event(86, 0, 0, 0); Sleep(50); keybd_event(86, 0, 0x2, 0); Sleep(50); keybd_event(17, 0, 0x2, 0); 你可以拿个播放器测试一下空格键.
jacky_qiu 2014-05-18
  • 打赏
  • 举报
回复
keybd_event(VK_CONTROL,0,0,0); keybd_event('C',0,0,0); keybd_event('C',0,KEYEVENTF_KEYUP,0); keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); ok , 可以模拟 CTRL+C
「已注销」 2014-05-16
  • 打赏
  • 举报
回复
要用全局钩子,hook
fhw217 2014-05-16
  • 打赏
  • 举报
回复
SendInput(...)
hhhh63 2014-05-16
  • 打赏
  • 举报
回复
应该做系统钩子吧

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧