无法使用SendMessage将密钥发送到窗口

时间:2010-03-19 11:50:00

标签: windows

我正在Windows下编写一个C程序,它应该将一个ENTER键发送到一个对话框以自动关闭它。

我检索我感兴趣的顶级窗口的句柄(通过EnumDesktopWindows()),然后尝试使用SendMessage发送一个ENTER键(另请注意,通过发送WM_CLOSE关闭窗口工作正常)。 / p>

以下任何一项都不起作用:

SendMessage( hTargetWindow, WM_CHAR, VK_RETURN, 0 );

SendMessage( hTargetWindow, WM_CHAR, VK_RETURN, 1 );

SendMessage( hTargetWindow, WM_KEYDOWN, VK_RETURN, 1 );
SendMessage( hTargetWindow, WM_KEYUP, VK_RETURN, 1 );

SendMessage( hTargetWindow, WM_KEYDOWN, VK_RETURN, 1 );
SendMessage( hTargetWindow, WM_CHAR, VK_RETURN, 1 );
SendMessage( hTargetWindow, WM_KEYUP, VK_RETURN, 1 );

依旧......

作为一个可能更简单的场景,我还尝试将ascii密钥发送到记事本。

这应该如何运作?

提前致谢

4 个答案:

答案 0 :(得分:4)

Nick D建议的方式都没有! 令人惊讶的是,以下工作:

PostMessage(hTargetWindow, WM_KEYDOWN, VK_RETURN, 0);

也就是说,我正在调用PostMessage而不是SendMessage。我不是Windows专家,所以我不完全理解这两个函数之间的区别。

无论如何,这正是我所需要的:向对话框发送一个ENTER键(顺便说一句,我正在模拟Win XP Embedded下注册表项enableDefaultReply的行为)。 实际上,这是我需要的,但有一个例外:它似乎只有在整个窗口都有焦点时才有效。但这应该很容易解决。

感谢您推荐PostMessage!

答案 1 :(得分:3)

这应该有效

SendMessage(hTargetWindow, WM_KEYDOWN, VK_RETURN, 0);

但如果实际关闭对话框的默认按钮没有聚焦,则对话框不会关闭。

发送ASCII字符:

PostMessage(hTargetWindow, WM_CHAR, ch, 0);

答案 2 :(得分:0)

答案 3 :(得分:0)

如果您要从未提升的应用程序(即具有管理权限的应用程序)向已提升的应用程序发送消息,则根据Windows的版本发送消息可能不起作用。这可能是罪魁祸首吗?