当前位置: 首页 > 知识库问答 >
问题:

windows OS如何确定消息应该发布到哪个窗口

柳涵意
2023-03-14

问题:

假设我有一个具有主窗口和子窗口的进程。当我使用键盘输入时,操作系统如何确定发送WM_KEYDOWN消息的HWND?

我知道事件循环和函数GetMessage、TranslateMessage和DispatchMessage,但我不理解如何在MSG结构中设置hwnd字段。

例子:

使用Spy,我看到有时子窗口接收WM_KEYDOWN消息,有时父窗口接收。

在winforms中,有焦点的文本框接收消息。然而,在其他用户界面中,消息跳过子窗口,直接发布到主窗口。

共有1个答案

洪俊拔
2023-03-14

输入被发送到具有焦点的窗口

根据MSalters的评论:

GITHREADINFO结构包含变量:

HWND  hwndFocus;

Type: HWND

A handle to the window that has the keyboard focus.

这是默认行为。如果一个程序将消息转发到另一个窗口,那么这个行为是由开发人员实现的。

有许多方法可以检测和处理输入,但标准方法是使用消息队列。您可能会发现程序在没有焦点的情况下检测输入,这可能是因为它们使用了另一种读取输入的方法,例如GetKeyboardState()。

 类似资料:
  • 本文向大家介绍Python如何将消息发布到RabbitMQ,包括了Python如何将消息发布到RabbitMQ的使用技巧和注意事项,需要的朋友参考一下 示例 从导入库开始。 接下来,我们需要打开与RabbitMQ服务器的连接。 之后,我们需要建立一个频道。每个连接可以有多个通道,通常在执行多线程任务时,建议(但不是必需)每个线程一个。 建立频道后,我们就可以开始准备信息了。 现在,我们可以通过简单

  • 物联网有很多设备,通过这条指令可以向某个特定的物联网设备发送特定的消息内容。 请求方式: "|4|1|3|topic|message|" 参数: topic 设置订阅的topic,获取设备topic可参考教程 message 发布消息的内容 返回值: "|4|1|3|1|\r" 消息发送成功 "|4|1|3|2|\r" 消息发送失败 Arduino样例: softSerial.print("|4|

  • 我们公司在Go中建立了push服务,为了保证传输速度,我们在四台机器上安装了push服务,当我们需要发送通知时,我们将消息发送给rabbitMQ,然后push服务从队列中获取消息,但有时我们发现只有一台机器获取消息。 我应该如何设置配置以确保每个消费者获得相同数量的消息?

  • 我正在使用一些Google云平台服务(数据流、云存储、PubSub),并有以下场景: 许多应用程序将GCS上CSV文件的路径发布到PubSub主题 在用Python编写的流式Beam管道中,我们使用Beam。io。从PubSub读取并在DoFn中将每个输入文件作为一个整体进行处理(每个调用都会获得一条PubSub消息) 这在很大程度上可以正常工作,但随着文件的增长,我们希望通过使用Datafram

  • 1.发送文本消息到聊窗内 小能sdk支持发送自定义的纯文本内容到聊窗内。例如用户可以在打开聊窗前调用此方法,即可在打开聊窗后发送一条自定义的文本消息。 /** * @param msgs 发送的消息内容 */ Ntalker.getInstance().sendNMsg(String msgs);

  • 发布确认原理 生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上的消息都会被指派一个唯一的 ID(从一开始),一旦消息被投递到所有匹配的队列后,broker 就会发送一个确认给生产者(包含消息的唯一ID),这就使得生产者知道消息已经正确到达目的队列了 如果消息和队列是持久化的,那么确认消息会在将消息写入磁盘后发出,broker 回传给生产者的确认消息中 ,