1

这可能是一个愚蠢的问题,但它就在这里。

假设您正在与驱动程序 API 进行交互。您正在使用 C 并完全通过命令提示符进行操作。没有图形用户界面。是否可以在此类文件中接收和处理 Windows 消息?

我的意思是,在任何地方,我都将 Windows 句柄用作 NULL。我不知道这是否可能,甚至是否有意义。

4

1 回答 1

2

要使用 GetMessage 或 PeekMessage,您的线程中不需要任何窗口:http: //msdn.microsoft.com/en-us/library/ms644946%28v=vs.85%29.aspx

消息发布到的线程必须已经创建了消息队列,否则对 PostThreadMessage 的调用将失败。

使用以下方法来处理这种情况。

创建一个事件对象,然后创建线程。

在调用 PostThreadMessage 之前,使用 WaitForSingleObject 函数等待事件设置为信号状态。

在将发布消息的线程中,调用 PeekMessage 如下所示,以强制系统创建消息队列:

PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE) > 设置事件,表示线程已准备好接收发布的消息。消息发布到的线程通过调用 GetMessage 或 PeekMessage 函数来检索消息。返回的 MSG 结构的 hwnd 成员为 NULL。

于 2013-06-25T11:21:02.467 回答