Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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
C 更改控制台窗口的窗口过程_C_Console - Fatal编程技术网

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

C 更改控制台窗口的窗口过程,c,console,C,Console,我想使控制台窗口具有功能托盘图标。我发现很可能有必要替换初始控制台的窗口过程,以便能够控制所有消息,包括notify area事件。但是SetWindowLong()函数返回0,并且GetLastError()告诉您访问被拒绝 hwndFound = GetConsoleWindow(); SetWindowLong(hwndFound, GWL_WNDPROC, (long)WndProc); 它可能是什么,或者可能有其他方法来控制托盘图标操作?您使用的是哪个版本的Windows?我知道在V

我想使控制台窗口具有功能托盘图标。我发现很可能有必要替换初始控制台的窗口过程,以便能够控制所有消息,包括notify area事件。但是
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)。奇怪。谢谢,这看起来是这种情况下的最佳解决方案。谢谢,这看起来是这种情况下的最佳解决方案。