| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1619 人关注过本帖
标题:想对后台的记事本发送 Alt+E(打开编辑菜单),但一直不能成功
取消只看楼主 加入收藏
richardw
Rank: 2
等 级:论坛游民
威 望:1
帖 子:12
专家分:14
注 册:2014-9-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
想对后台的记事本发送 Alt+E(打开编辑菜单),但一直不能成功
前台的很好办,直接
SetForegroundWindow(m_hWnd);
SendMessage(m_hWnd, WM_SYSCOMMAND, SC_KEYMENU, (WPARAM)'E');
就可以,但不置前窗体的话,怎么发过去让记事本打开编辑菜单呢?
搜索更多相关主题的帖子: 记事本 前台 
2014-09-07 16:33
richardw
Rank: 2
等 级:论坛游民
威 望:1
帖 子:12
专家分:14
注 册:2014-9-7
收藏
得分:0 
亲,先谢谢你对我的问题的关注,但你肯定没有试验吧,我原来发消息也这样子弄:
程序代码:
        PostMessage(m_hWnd, WM_SYSKEYDOWN, VK_MENU, MakeKeyLparam(VK_MENU, WM_SYSKEYDOWN)); 
        PostMessage(m_hWnd, WM_SYSKEYDOWN, 'E', MakeKeyLparam('E', WM_SYSKEYDOWN));         
        PostMessage(m_hWnd, WM_SYSCHAR, 'E', MakeKeyLparam('E', WM_SYSCHAR));               
        PostMessage(m_hWnd, WM_SYSKEYUP, 'E', MakeKeyLparam('E', WM_SYSKEYUP));             
        PostMessage(m_hWnd, WM_KEYUP, VK_MENU, MakeKeyLparam(VK_MENU, WM_KEYUP));           


但你试验一下就明白了,这些都不是关键,只要是有置前操作,就是把窗口搞成前台的SetForegroundWindow(m_hWnd);,那些都能成功

现在就是不知道如何给后台的程序发送成功

PS:keybd_event这些没句柄参数的,全都是给前台程序用的
2014-09-08 10:53
richardw
Rank: 2
等 级:论坛游民
威 望:1
帖 子:12
专家分:14
注 册:2014-9-7
收藏
得分:0 
发送的对像不是自己做的程序,也没有条件改变它。

我可以得到它的窗口句柄 ,可以向它发送单个的键,比如ALT、F10、ABC之类的,只要是单键,都能发过去(它在后台的时候)

用钩子应该怎么实现发组合键?能大概地说一下思路吗?对钩子用得不多呢,谢谢啦
2014-09-08 17:25
richardw
Rank: 2
等 级:论坛游民
威 望:1
帖 子:12
专家分:14
注 册:2014-9-7
收藏
得分:0 
单键可以,组合键还真不行。
就是一楼说的那个给后台记事本发消息的例子
SetForegroundWindow(m_hWnd);
SendMessage(m_hWnd, WM_SYSCOMMAND, SC_KEYMENU, (WPARAM)'E');

或者:
程序代码:
        SetForegroundWindow(m_hWnd);
        PostMessage(m_hWnd, WM_SYSKEYDOWN, VK_MENU, MakeKeyLparam(VK_MENU, WM_SYSKEYDOWN)); 
        PostMessage(m_hWnd, WM_SYSKEYDOWN, 'E', MakeKeyLparam('E', WM_SYSKEYDOWN));                       
        PostMessage(m_hWnd, WM_SYSKEYUP, 'E', MakeKeyLparam('E', WM_SYSKEYUP));             
        PostMessage(m_hWnd, WM_KEYUP, VK_MENU, MakeKeyLparam(VK_MENU, WM_KEYUP));  

都可以成功,如果把SetForegroundWindow取消,记事本是后台的话,这种组合键是发不成功的。

如果要给后台发单键,就很容易了,比如发F5(在记事本中添加当前时间)给后台记事本:
    PostMessage(m_hWnd, WM_KEYDOWN, VK_F5, MakeKeyLparam(VK_F5, WM_KEYDOWN));
    PostMessage(m_hWnd, WM_KEYUP, VK_F5, MakeKeyLparam(VK_F5, WM_KEYUP));


我原来也认为只要前台能发过去消息,后台也一样啦,结果一试,完全不是想像中的那回事。后台没反应呀

我用过全局或线程的HOOK,全都是DLL的,但都是一些很简单的应用,屏蔽、拦截或改键什么的

[ 本帖最后由 richardw 于 2014-9-8 21:38 编辑 ]
2014-09-08 21:36
richardw
Rank: 2
等 级:论坛游民
威 望:1
帖 子:12
专家分:14
注 册:2014-9-7
收藏
得分:0 
是因为因为窗口不前置后导致不响应快捷键

所有返回值都是1
2014-09-09 15:31
快速回复:想对后台的记事本发送 Alt+E(打开编辑菜单),但一直不能成功
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037604 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved