我正在 Windows 下编写一个 C 程序,它应该向对话框发送一个 ENTER 键以自动关闭它。
我检索我感兴趣的顶级窗口的句柄(通过 EnumDesktopWindows()),然后尝试使用 SendMessage 发送一个 ENTER 键(还要注意,通过发送 WM_CLOSE 关闭窗口工作正常)。
以下均无效:
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 );
Run Code Online (Sandbox Code Playgroud)
等等...
作为一个可能更简单的场景,我还尝试将 ascii 密钥发送到记事本等。
这应该如何工作?
提前致谢
Nick D 建议的方法都没有奏效!令人惊讶的是,以下工作:
PostMessage(hTargetWindow, WM_KEYDOWN, VK_RETURN, 0);
Run Code Online (Sandbox Code Playgroud)
也就是说,我正在调用 PostMessage 而不是 SendMessage。我不是 Windows 专家,所以我不完全理解这两个功能之间的区别。
无论如何,这正是我所需要的:将 ENTER 键发送到对话框(顺便说一句,我正在模拟 Win XP Embedded 下注册表项 enableDefaultReply 的行为)。实际上,这可以满足我的需要,但有一个例外:它似乎只有在整个窗口都有焦点时才有效。但这应该很容易解决。
感谢您建议 PostMessage!
| 归档时间: |
|
| 查看次数: |
25503 次 |
| 最近记录: |