C++: How to set a new wndProc for a console application?
access-denied, c++, console, winapi, wndproc
Solution
While the impression is that console window belongs to your process (like other window), it is in fact hosted by `CSRSS` system process and its WndProc is there. This makes you unable to subclass the window and provide your own WndProc living in your process.
Some related reading:
- The process that is in charge of displaying the GUI windows in which consoles are presented is... CSRSS
- SetWindowsHookEx with WH_KEYBOARD doesn't work for me, what do I wrong?
- Subclassing XP Console Window
Problem
If I have a console application with a handle to it set up like so; ``` HWND hWnd = GetConsoleWindow(); ``` Then how do I set up a new wndProc for the window? I tried using ``` SetWindowLong(hWnd, GWL_WNDPROC, (LONG)conProc); ``` With conProc being defined as ``` LRESULT CALLBACK conProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_NCHITTEST: return HTCAPTION; } return DefWindowProc(hWnd, msg, wParam, lParam ); } ``` But it doesn't work and says "Error code: 5 - Access is denied" on `GetLastError()` I understand that it's pretty difficult to modify the console application like this, since it's a csrss.exe application and all, but I'd still like to try.. Thanks.