I want to make console window with a functional tray icon. I figured out that most probably it is necessary to replace initial console’s window procedure so I will be able to control all messages including notify area events. But SetWindowLong() function returns 0, and GetLastError() tells that access is denied.
hwndFound = GetConsoleWindow();
SetWindowLong(hwndFound, GWL_WNDPROC, (long)WndProc);
What could it be, or maybe there is some other way to control tray icon manipulations?
If all you want to do is create a notification icon for a console application, there’s nothing that says your Shell_NotifyIcon call has to point to the console window. Create an invisible dummy window with your own window class and procedure instead. Note that you’ll probably have to do this from a secondary thread in order to run its message loop. (The console window is special, as it’s hosted outside your process by conhost.exe/csrss.exe.)