Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows GetMessage需要GUI吗_Windows_Winapi_User Interface - Fatal编程技术网

Windows GetMessage需要GUI吗

Windows GetMessage需要GUI吗,windows,winapi,user-interface,Windows,Winapi,User Interface,许多年前,我了解到为了使用GetMessage,您需要某种形式的GUI。 没有它,windows不会创建消息队列 我被教错了吗 编辑: MSDN说:因为系统将消息定向到应用程序中的各个窗口,所以线程必须在启动其消息循环之前至少创建一个窗口 我似乎被教得很好,还是还有更多?对参数的调用和要求HWND。如果没有窗口,就不会有HWND,无论是否有消息队列,都无法接收消息 编辑:我收回它。允许您为HWND传递NULL参数,并将在没有HWND的情况下向队列发布消息。PostMessage还允许HWND参数

许多年前,我了解到为了使用GetMessage,您需要某种形式的GUI。 没有它,windows不会创建消息队列

我被教错了吗

编辑: MSDN说:因为系统将消息定向到应用程序中的各个窗口,所以线程必须在启动其消息循环之前至少创建一个窗口

我似乎被教得很好,还是还有更多?

对参数的调用和要求HWND。如果没有窗口,就不会有HWND,无论是否有消息队列,都无法接收消息

编辑:我收回它。允许您为HWND传递NULL参数,并将在没有HWND的情况下向队列发布消息。PostMessage还允许HWND参数为NULL


我每天都学到新东西

这里有些东西你搞混了

首先,您可以使用
GetMessage
,而无需在线程中创建实时窗口

默认情况下,操作系统不会为新创建的线程创建消息队列。因此-对新创建的线程的调用(如
PostThreadMessage
)可能会失败

要强制创建消息队列,您需要从该线程调用任何本应在该线程队列上操作的函数

简单地说,只需在该线程中调用
PeekMessage

更多信息请点击此处:


(见备注)

不完全正确。有一些没有窗口的消息(COM可以做到这一点)。我认为MSDN声明是一个建议,而不是一个要求。如果没有窗口,Windows本身不会向您发送任何消息,但是您自己的程序可以向自己发送消息,例如从另一个线程发送消息。我也很想知道诸如SetTimer之类的调用是否允许空HWND参数。