C 更改控制台窗口的窗口过程
我想使控制台窗口具有功能托盘图标。我发现很可能有必要替换初始控制台的窗口过程,以便能够控制所有消息,包括notify area事件。但是C 更改控制台窗口的窗口过程,c,console,C,Console,我想使控制台窗口具有功能托盘图标。我发现很可能有必要替换初始控制台的窗口过程,以便能够控制所有消息,包括notify area事件。但是SetWindowLong()函数返回0,并且GetLastError()告诉您访问被拒绝 hwndFound = GetConsoleWindow(); SetWindowLong(hwndFound, GWL_WNDPROC, (long)WndProc); 它可能是什么,或者可能有其他方法来控制托盘图标操作?您使用的是哪个版本的Windows?我知道在V
SetWindowLong()
函数返回0,并且GetLastError()
告诉您访问被拒绝
hwndFound = GetConsoleWindow();
SetWindowLong(hwndFound, GWL_WNDPROC, (long)WndProc);
它可能是什么,或者可能有其他方法来控制托盘图标操作?您使用的是哪个版本的Windows?我知道在Vista之前,控制台窗口是经过特殊处理的,不能用许多标准的方式进行操作。可能会透露更多信息。您使用的是哪个版本的Windows?我知道在Vista之前,控制台窗口是经过特殊处理的,不能用许多标准的方式进行操作。可能会有进一步的启示。如果您只想为控制台应用程序创建一个通知图标,那么没有任何说明您的Shell\u NotifyIcon调用必须指向控制台窗口。使用自己的窗口类和过程创建一个不可见的虚拟窗口。请注意,为了运行其消息循环,您可能必须从辅助线程执行此操作。(控制台窗口是特殊的,因为它由conhost.exe/csrss.exe托管在您的进程之外。)如果您只想为控制台应用程序创建通知图标,那么没有任何说明您的Shell\u NotifyIcon调用必须指向控制台窗口。使用自己的窗口类和过程创建一个不可见的虚拟窗口。请注意,为了运行其消息循环,您可能必须从辅助线程执行此操作。(控制台窗口很特殊,因为它由conhost.exe/csrss.exe托管在进程外部。)不,您只需要一个窗口。最好的方法是启动一个线程,这样您就可以启动一个消息循环并接收图标通知。创建一个小的隐藏窗口,用于Shell\u NotifyIcon()调用。不,您只需要一个窗口。最好的方法是启动一个线程,这样您就可以启动一个消息循环并接收图标通知。创建一个小隐藏窗口,用于Shell\u NotifyIcon()调用。我在Windows 7上。我刚刚意识到GetMessage()在控制台应用程序中不会返回任何内容。即使我使用指定的控制台窗口句柄调用它:GetMessage(&msg,hwndFound,0,0)。奇怪,我在Windows7上。我刚刚意识到GetMessage()在控制台应用程序中不会返回任何内容。即使我使用指定的控制台窗口句柄调用它:GetMessage(&msg,hwndFound,0,0)。奇怪。谢谢,这看起来是这种情况下的最佳解决方案。谢谢,这看起来是这种情况下的最佳解决方案。