如何用api发送组合键(如ctrl+上)到hwnd,sendmessage是否可行?详细点.谢了.再次发问.

su 2000-08-13 10:08:00
...全文
248 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cproom 2000-08-15
  • 打赏
  • 举报
回复
用sendmessage()发送消息,应用程序不一定能正确响应,因为你有时不能确认是发给框架窗口还是它的活跃子窗口。如果你能保证接收消息的程序主窗口在屏幕最上面,也就是说程序正在接收键盘输入,可用下面函数模拟键盘输入,与真实的键盘输入完全等效,模拟组合键只要象前面朋友那样调用几次就可以了。
VOID keybd_event(
BYTE bVk, // virtual-key code
BYTE bScan, // hardware scan code
DWORD dwFlags, // flags specifying various function options
DWORD dwExtraInfo // additional data associated with keystroke
);
U皮特U 2000-08-13
  • 打赏
  • 举报
回复
可以模拟按组合键的过程,以下参数是我通过键盘HOOK读出来的,WPARAM参数是按键的virtual-key code,LPARAM参数的位设置如下:
0 -15 本次消息按键的重复次数
16-23 指定扫描码
24 标识该键是否为扩展键,比如Ctrl,1表示是
25-28 保留
29 对WM_KEYDOWN为0,对WM_KEYUP为1
30 前一次按键状态。如果在消息发出前键已按下,则为1。
31 对WM_KEYDOWN为0,对WM_KEYUP为1
例子:
SendMessage(hWnd, WM_KEYDOWN, (WPARAM)17, (LPARAM)0x001d0001); // 按下Ctrl
SendMessage(hWnd, WM_KEYDOWN, (WPARAM)38, (LPARAM)0x01480001); // 按下上键
SendMessage(hWnd, WM_KEYUP, (WPARAM)38, (LPARAM)0xc1480001); // 放开上键
SendMessage(hWnd, WM_KEYUP, (WPARAM)17, (LPARAM)0xc01d0001); // 放开Ctrl

16,471

社区成员

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

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

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