求高人解决HOOK有关问题——使某个窗口的标题永远为为"XXX"

求高人解决HOOK问题——使某个窗口的标题永远为为"XXX"
我一开始想用WH_CALLWNDPROC,试了下,不可以用这个,因为这个是在消息发到目标窗口之前的
最后决定用这个WH_CALLWNDPROCRET
MessageBox可以正常显示,SetWindowText就没效果了
dll.def:
C/C++ code
LIBRARY HookDll
EXPORTS
SetHook
uHook


dllcpp:
C/C++ code
#include <windows.h>
#pragma data_seg("SetWindowTextHookEx")
HWND g_hwnd = 0;
char *g_title = 0;
HHOOK hhgm = 0;
#pragma data_seg()
#pragma comment(linker,"/section:SetWindowTextHookEx,RWS")

BOOL SetText();
LRESULT CALLBACK CallWndProc(int code,
  WPARAM wParam,
  LPARAM lParam
)
{
    CWPRETSTRUCT  *cs = (CWPRETSTRUCT *)lParam;
    if(code==HC_ACTION)
    {
        if(cs->hwnd == g_hwnd)
        {
            if(cs->message == WM_SETTEXT)
            {
                //MessageBox(0,0,0,0);
                //SendMessage(g_hwnd,WM_SETTEXT,0,(LPARAM)g_title);
                SetText();
            }
        }
    }else if(code<0)
    {
            return CallNextHookEx(hhgm,code,wParam,lParam);
    }
    return 0;
}

bool SetHook(HWND hwnd,char *title)
{
    hhgm = SetWindowsHookEx(WH_CALLWNDPROCRET,CallWndProc,GetModuleHandle("HookDll"),NULL);
    if(hhgm)
    {
        g_hwnd = hwnd;
        g_title = title;
        return true;
    }else
    {
        return false;
    }
}
BOOL uHook()
{
    return UnhookWindowsHookEx(hhgm);
}
BOOL SetText()
{
    MessageBox(g_hwnd,"NOW",0,0);
    return SetWindowText(g_hwnd,g_title);
}


execpp:
C/C++ code
#include <Windows.h>
#pragma comment(lib,"HookDll.lib")
_declspec(dllimport) bool SetHook(HWND hwnd,char *title);
_declspec(dllimport) BOOL uHook();
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HWND hwnd,hb;
int WINAPI WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrveInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
{
    WNDCLASSEX wcex;
    wcex.cbClsExtra=0;
    wcex.cbSize=sizeof(WNDCLASSEX);
    wcex.cbWndExtra=0;
    wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
    wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
    wcex.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wcex.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
    wcex.hInstance=hInstance;
    wcex.lpfnWndProc=WndProc;
    wcex.lpszClassName="ClassName";
    wcex.lpszMenuName=NULL;
    wcex.style=CS_HREDRAW|CS_VREDRAW;
    RegisterClassEx(&wcex);
    //hi = hInstance;
    hwnd=CreateWindow(wcex.lpszClassName,"Title",WS_OVERLAPPEDWINDOW+WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,350,250,NULL,NULL,hInstance,NULL);
    hb=CreateWindow("Button","Title",WS_CHILDWINDOW+WS_VISIBLE,0,0,100,50,hwnd,NULL,hInstance,NULL);
    MSG msg;
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return (int) msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    switch(message)
    {
    case WM_CREATE:
        
        break;
    case WM_COMMAND:
        if((HWND)lParam==hb)
        {
            //SendMessage(hWnd,WM_SETTEXT,99,(LPARAM)"agsagas");
            bool result = SetHook((HWND)3278740,"想修改?没门!");
            if(result)
            {
                MessageBox(hWnd,"chenggong",0,0);
            }else
            {
                MessageBox(0,"shibai",0,0);
            }
        }
        break;
    case WM_DESTROY:
        uHook();
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd,message,wParam,lParam);
        break;
    }
    return 0;
}


------解决方案--------------------
SetWindowText也会发WM_SETTEXT消息