【发布时间】:2012-11-02 12:36:32
【问题描述】:
如果我有一个控制台应用程序,它的句柄是这样设置的;
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 应用程序等等,但我仍然想尝试.. 谢谢。
【问题讨论】:
-
根据 的用途,您可能会发现 Console project 很有用。
-
这很有趣,因为我要说你可以抓住与之关联的
WNDCLASSEX并根据它创建自己的窗口,但事实证明抓住WNDCLASSEX有点困难.GetClassInfoEx需要一个模块句柄,而获取该句柄很烦人。甚至CreateToolhelp32Snapshot也明确表示不能将其与 csrss.exe 一起使用。
标签: c++ winapi console access-denied wndproc