首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SendMessage +向上键

SendMessage +向上键
EN

Stack Overflow用户
提问于 2020-03-23 19:03:17
回答 2查看 745关注 0票数 1

我正在尝试复制CTRL +向上箭头消息,但这就像忽略了CTRL键,结果就像只发送向上箭头,而不发送CTRL

这是Spy++结果的外观:

CTRL键值:

上箭头键向下:

向上箭头键:

CTRL键:

这是我使用的代码:

代码语言:javascript
复制
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, uint lParam);

SendMessage(whandle, 0x100, 0x00000011, 0x011D0001);
SendMessage(whandle, 0x100, 0x00000026, 0x01480001);
SendMessage(whandle, 0x101, 0x00000026, 0xC1480001);
SendMessage(whandle, 0x101, 0x00000011, 0xC11D0001);

我已经将此SendMessage签名更改为接受KEYUP lParams:

private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, uint lParam);

也许签名是错的?我真的不知道我错过了什么

我不能使用SendKeys或任何需要在前面设置窗口的方法,它必须在后台工作,SetKeyBoardState也不能影响其他正在运行的程序

编辑:

用PostMessage测试和我得到相同的结果,CTRL键被忽略

代码语言:javascript
复制
PostMessage(whandle, 0x100, 0x00000011, 0x011D0001);
PostMessage(whandle, 0x100, 0x00000026, 0x01480001);
PostMessage(whandle, 0x101, 0x00000026, 0xC1480001);
PostMessage(whandle, 0x101, 0x00000011, 0xC11D0001);
EN

回答 2

Stack Overflow用户

发布于 2020-04-01 17:16:04

使用SendMessage (或PostMessage)无法模拟修改器关键点的状态,例如按CTRL键。您必须改用SendInput。1

但是,使用SendInput只能将关键点发送到活动窗口。因此,如果发送到最小化/背景窗口是一个严格的要求,我担心您正在尝试做的事情是不可能的。2

如果您可以更改要求,将击键发送到活动窗口就足够了,或者可以临时将要向其发送击键的窗口拉到前台,则可以考虑使用Input Simulator库。

资料来源:

1

2

3

票数 1
EN

Stack Overflow用户

发布于 2020-04-01 12:35:16

我刚刚解决了类似的问题(使用非托管C++),但是我发送击键到DOS窗口,同时按一个键而不是2个或更多键,你可以在这里看到原始问题:How to send keyboard input to dos application running in window mode in Windows98

我使用了很多方法: SendMessage,SendInput和VxD驱动,我还解决了在发送击键之前激活窗口的问题,你可以在github - https://github.com/MossbauerLab/Sm2201Autosave上找到项目。在MossbauerLab.Sm2201.ExtSaveUtility/src/saveManager中,你可以找到方法:

void activateWindow(HWND窗口);

我正在使用可执行文件名称和窗口名称来搜索HWND (请参阅MossbauerLab.Sm2201.ExtSaveUtility/src/utils/windows/windowsInfo.h)大多数类已使用MS测试(托管C++)进行测试),测试项目也在以下存储库中: MossbauerLab.Sm2201.ExtSaveUtility.Tests

也许它能对你有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60812295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档