繁体   English   中英

C ++:如何为控制台应用程序设置新的wndProc?

[英]C++: How to set a new wndProc for a console application?

如果我有一个控制台应用程序,其句柄设置如此;

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应用程序,但我仍然想尝试..谢谢。

虽然印象是控制台窗口属于您的过程(与其他窗口一样),但它实际上由CSRSS系统进程托管,其WndProc就在那里。 这使您无法对窗口进行子类化,并在您的过程中提供自己的WndProc。

一些相关阅读:

首先SetWindowLong被SetWindowLongPtr取代,你应该使用该函数。

您是否尝试更改自己的控制台窗口或其他进程的WNDPROC?

来自MSDN文档:

GWL_WNDPROC -4 Sets a new address for the window procedure. You cannot change this attribute if the window does not belong to the same process as the calling thread.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM