如果我有一个控制台应用程序,并像这样设置了对它的句柄;
HWND hWnd = GetConsoleWindow();
那么我如何为窗口设置一个新的wndProc?
我尝试使用了
SetWindowLong(hWnd, GWL_WNDPROC, (LONG)conProc);
假设conProc已定义为:
LRESULT CALLBACK conProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_NCHITTEST:
return HTCAPTION;
}
return DefWindowProc(hWnd, msg, wParam, lParam );
}
但是它并不起作用,并在GetLastError()
上显示“错误代码:5 - 拒绝访问”
我知道像这样修改控制台应用程序非常困难,因为它是一个csrss.exe应用程序,但我仍然想尝试一下。谢谢。
WNDCLASSEX
并基于它创建自己的窗口,但事实证明获取WNDCLASSEX
有点困难。GetClassInfoEx
需要一个模块句柄,而获取该句柄很麻烦。即使是CreateToolhelp32Snapshot
也明确说明不能与csrss.exe一起使用。 - chris