更改控制台窗口的窗口过程

时间:2011-01-16 16:35:15

标签: c console

我想制作带有功能托盘图标的控制台窗口。我发现很可能有必要更换初始控制台的窗口过程,这样我就可以控制所有消息,包括通知区域事件。但SetWindowLong()函数返回0,而GetLastError()表示访问被拒绝。

hwndFound = GetConsoleWindow();
SetWindowLong(hwndFound, GWL_WNDPROC, (long)WndProc);

它可能是什么,或者还有其他方法来控制托盘图标操作?

3 个答案:

答案 0 :(得分:3)

如果您只想为控制台应用程序创建通知图标,则没有任何内容表明您的Shell_NotifyIcon调用必须指向控制台窗口。使用您自己的窗口类和过程创建一个不可见的虚拟窗口。请注意,您可能必须从辅助线程执行此操作才能运行其消息循环。 (控制台窗口很特殊,因为它在您的进程外部由conhost.exe / csrss.exe托管。)

答案 1 :(得分:1)

不,你只需要一个窗口。最好的办法是启动一个线程,这样你就可以抽取一个消息循环并接收图标通知。创建一个可用于Shell_NotifyIcon()调用的隐藏窗口。

答案 2 :(得分:0)

您使用的是哪个版本的Windows?我知道在Vista之前,控制台窗口是专门处理的,并且不能以许多标准方式进行操作。 This article by Raymond Chen可能会进一步阐明。