繁体   English   中英

使用C ++ Win32处理控制台应用程序/ DLL中的消息

[英]Handling Messages in Console Apps/DLLs in C++ Win32

我希望能够在控制台应用程序和/或独立DLL中处理Win32消息。

我已经能够在.NET中使用以下文章来完成它,它在控制台应用程序和独立DLL中的C#中运行良好
http://msdn.microsoft.com/en-us/magazine/cc163417.aspx

有没有办法与C / C ++ Win32 API相提并论? 我已经尝试过将RegisterClassEx(...)和CreateWindow(...)传递给HWND_MESSAGE到hWndParent,但问题是在创建“隐形”窗口之后,消息没有被处理,可能是由于缺少消息泵。

如果你有一个DLL入口点,消息泵会去哪里? 我已经尝试在DLL中创建另一个线程并将while(GetMesage(..))放在那里,但这也不起作用。

有任何想法吗?

你需要一个消息泵是的。 该窗口还具有线程关联性,因此需要在运行消息泵的同一线程上创建它。 基本方法是合理的,如果您包含更多代码,可能会清楚问题是什么。

除了Logan Capaldo所说的,你还有一个问题,就是在编译时你不知道什么样的进程会在运行时加载你。

  • 如果您正在通过控制台应用程序(/ SUBSYSTEM:CONSOLE)加载,那么创建自己的隐藏窗口并在同一个线程上设置消息泵将正常工作(只要您是第一个创建的窗口)。
  • 如果您正在被Windows应用程序(/ SUBSYSTEM:WINDOWS)加载,那么您可能会在收到消息时遇到问题。 它们将被发送到您未创建的层次结构中的顶级窗口。 您需要获取主进程hWnd并将其子类化(如果您还没有)。
  • 如果您正在加载某项服务,那么您根本不会收到窗口消息。 您需要使用RegisterServiceCtrlHandlerEx函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM