给记事本发快捷键消息,不能得到响应

Richardw 2014-09-05 10:53:17
    HWND m_hWnd = FindWindow("Notepad", "无标题 - 记事本");

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));


给记事本发消息,不能得到响应,这是为什么呀?

如果成功的话应该会打开编辑菜单吧,但现在没有反应

如果单发送Alt键,是可以看到菜单栏变化的,就是菜单后面的快捷键字母出现了下划线,说明成功...

是哪还有问题吗?还是说不能发快捷键,只能发单键?
...全文
362 34 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
变态者 2016-08-07
  • 打赏
  • 举报
回复
HWND m_hWnd  = FindWindow("Notepad", "无标题 - 记事本") m_hWnd 貌似只是记事本的主窗口,编辑区属于记事本的子窗口。 所以再用 ChildWindowFromPoint 获取一下编辑区窗口句柄 就可以后台发消息了
schlafenhamster 2014-09-11
  • 打赏
  • 举报
回复
只能 再试试: WM_SYSKEYDOWN 改 WM_KEYDOWN
Richardw 2014-09-11
  • 打赏
  • 举报
回复
我们发的第29位是1呀 是不是带ALT的组合键就不能发给非活动窗口呀
Richardw 2014-09-11
  • 打赏
  • 举报
回复
我是想要后台操作CAD。 做一个程序,设置好参数及方案,自动处理图形及相关计算,但这个过程想在后台进行,不想影响前台的工作(计算机不多呀,嘿嘿)
schlafenhamster 2014-09-11
  • 打赏
  • 举报
回复
看来 ::BringWindowToTop(hwnd); 还是 去不掉。 不过 不明白 为什么 不能 ::BringWindowToTop(hwnd);
Richardw 2014-09-11
  • 打赏
  • 举报
回复
我是自己做程序,不是要找工具呀,楼上有用API解决这个问题的办法吗?
赵4老师 2014-09-11
  • 打赏
  • 举报
回复
Richardw 2014-09-11
  • 打赏
  • 举报
回复
也试了,不行,还是没反应
Richardw 2014-09-10
  • 打赏
  • 举报
回复
是的,就是不明白记事本怎么处理的,它怎么过滤掉了这个组合键呢?是在哪里检测的?如果我们知道在哪里检测,还可以作欺骗来达到效果
Richardw 2014-09-10
  • 打赏
  • 举报
回复
反着挂也试了: AttachThreadInput(GetWindowThreadProcessId(B, NULL), GetWindowThreadProcessId(A, NULL), true)
schlafenhamster 2014-09-10
  • 打赏
  • 举报
回复
我自己试了一下。 没效果。 ::BringWindowToTop(hwnd); 还是 去不掉。
Richardw 2014-09-10
  • 打赏
  • 举报
回复
已经试验,AttachThreadInput挂是能挂上,但还是解决不了问题,目标程序没反应 我们的程序为A,记事本为B AttachThreadInput(GetWindowThreadProcessId(A, NULL), GetWindowThreadProcessId(B, NULL), true) 挂上后,给B发消息(就是原来那些),B没反应,A的Edit菜单出来了(为了试验也给A加了EDIT菜单) 其实从前面函数PostMessage的返回值和发送单键能成功看到效果上看得出来,目标程序(记事本)是能接到我们发的消息的,但不知道为什么没反应
schlafenhamster 2014-09-10
  • 打赏
  • 举报
回复
int MakeKeyLparam(int VirtualKey, int flag) { UINT sCode; //Firstbyte ; lparam 参数的 24-31位 UINT Firstbyte; switch (flag) {// 24 Specifies whether the key is an extended key, // 25–28 Reserved; do not use // 29 Specifies the context code. // The value is 1 if the ALT key is down while the key is pressed; // it is 0 if the WM_SYSKEYDOWN message is posted to the active window // because no window has the keyboard focus.
schlafenhamster 2014-09-10
  • 打赏
  • 举报
回复
int MakeKeyLparam(int VirtualKey, int flag) { UINT sCode; //Firstbyte ; lparam 参数的 24-31位 UINT Firstbyte; switch (flag) { case WM_KEYDOWN: Firstbyte = 0; break; case WM_KEYUP: Firstbyte = 0xC0;break; case WM_CHAR: Firstbyte = 0x20;break; case WM_SYSKEYDOWN: Firstbyte = 0x20;break; case WM_SYSKEYUP: Firstbyte = 0xE0;break; case WM_SYSCHAR: Firstbyte = 0xE0;break; } // 键的扫描码; lparam 参数 的 16-23位 UINT iKey = MapVirtualKey(VirtualKey, 0); // 1为 lparam 参数的 0-15位,即发送次数 sCode = (Firstbyte << 24) + (iKey << 16) + 1; return sCode; }
schlafenhamster 2014-09-10
  • 打赏
  • 举报
回复
AttachThreadInput 附加 NotePad 的input到你的程序,2个程序用一个input, 有什么反了的意思?
schlafenhamster 2014-09-09
  • 打赏
  • 举报
回复
复制错了 WM_CHAR
Richardw 2014-09-09
  • 打赏
  • 举报
回复
亲,我们的是一样的吧...
schlafenhamster 2014-09-09
  • 打赏
  • 举报
回复
改改 PostMessage(m_hWnd, WM_SYSCHAR, 'E', MakeKeyLparam('E', WM_SYSCHAR)); 看
Richardw 2014-09-09
  • 打赏
  • 举报
回复
to schlafenhamster: 我发的消息是用SPY++查来的,看了你的回答,有点迷糊 倒底给后台记事本发Alt+E应该用什么?
引用
捕获Alt键时,在WM_KEYDOWN下是无效的,要在WM_SYSKEYDOWN中
我是用的WM_SYSKEYDOWN呀?
Richardw 2014-09-09
  • 打赏
  • 举报
回复
亲,好像方向反了吧,我主要是向第三方的目的程序发送组合键,这个第三方程序是不能改动的,比如记事本,不是我自己做的程序
加载更多回复(14)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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