关于winuser.h中SendMessage函数最后两个参数的技术疑问
控制台窗口全屏代码中SendMessage参数解析
先看你用到的代码:
void FullScreen() { system("mode con COLS=700"); SendMessage(GetConsoleWindow(), WM_SYSKEYDOWN, VK_RETURN, 0x20000000); }
下面拆解最后两个参数的作用:
1. wParam:VK_RETURN
这个参数指定的是触发系统操作的虚拟键码。控制台窗口原生支持Alt+Enter快捷键切换全屏/窗口模式,这里的VK_RETURN对应回车键,配合后面lParam里的Alt键标记,相当于模拟按下了Alt+Enter组合键,以此触发系统级的全屏切换逻辑。
2. lParam:0x20000000
lParam是一个32位复合参数,每一位对应按键消息的不同属性,这里的0x20000000只用到了一个关键位:
- 二进制第29位(从0开始计数)设为1,这个位专门用来标记Alt键处于按下状态。
- 其他位设为0即可,因为我们只需要告诉系统“这是Alt+Enter的按键消息”,不需要额外的按键扫描码、重复次数等冗余信息。
另外补充:前面的system("mode con COLS=700")是先把控制台列数强制拉到很大,让窗口先被拉伸,之后再发送全屏消息能更稳定地触发全屏效果,避免原窗口尺寸太小导致切换不彻底。
内容的提问来源于stack exchange,提问作者Andrei Voicea
相关产品推荐
相关产品推荐

