我正在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密钥发送到记事本。
这应该如何运作?
提前致谢
答案 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的版本发送消息可能不起作用。这可能是罪魁祸首吗?