-1

我在下面挂钩了 Winapi EndPaint() 函数,在其中我发送了一些 wm_copydata,但与此同时,我收到“wm_copydata,变量 endpaint_text 周围的堆栈已损坏......”挂钩的应用程序崩溃。

BOOL WINAPI Mine_EndPaint(HWND hWnd, const PAINTSTRUCT *lpPaint) {

    BOOL result = fpEndPaint(hWnd, lpPaint);

    if (hWnd == g_win)
    {

        if (lpPaint->rcPaint.left == g_12x && lpPaint->rcPaint.top == g_12y)
        {
        painting = 0;

        wchar_t endpaint_text[MAX_PATH] = L"deleting_a";
         COPYDATASTRUCT cds;
        ::ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
        cds.cbData = sizeof(paint_dc);
        cds.lpData = endpaint_text;

        ::SendMessageTimeoutW(g_main, WM_COPYDATA, (WPARAM)::GetDesktopWindow(), (LPARAM)&cds, SMTO_ABORTIFHUNG, 1000, 0);

        }
        else if (lpPaint->rcPaint.left == g_list12x && lpPaint->rcPaint.top == 137)
        {

        big_painting = 0;
        wchar_t endpaint_text[MAX_PATH] = L"deleting_b";
         COPYDATASTRUCT cds;
        ::ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
        cds.cbData = sizeof(paint_dc);
        cds.lpData = endpaint_text;

        ::SendMessageTimeoutW(g_main, WM_COPYDATA, (WPARAM)::GetDesktopWindow(), (LPARAM)&cds, SMTO_ABORTIFHUNG, 1000, 0);

        }
    }

    else if (check_d)
    {
        re_window = NULL;

        GetWindowText(hWnd, window_text, MAX_PATH);
        if (!wcscmp(window_text, L"Text"))
        {
            check_d = false;
            re_window = hWnd;
            wchar_t re_info[MAX_PATH] = L"";
            //wcscat(re_info, text);
            COPYDATASTRUCT cds;
            ::ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
            cds.dwData = 931;
            cds.cbData = sizeof(re_info);
            cds.lpData = re_info;
            wsprintf(re_info, L"Text='%s', HWND='%X'", d_text, re_window);
            ::SendMessageTimeoutW(g_main, WM_COPYDATA, (WPARAM)::GetDesktopWindow(), (LPARAM)&cds, SMTO_ABORTIFHUNG, 1000, 0);

        }

    }
    return result;

}
4

1 回答 1

0

它溢出了 wsprint,与提到的损坏的 var 无关。

于 2012-06-10T08:35:29.277 回答