Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
CorelSiteBuilder.cpp
Abstract:
App repeatedly calls SetWindowTextA with the same title causing flickering. This repros on some machines and not others: we don't know why.
Notes:
This is an app specific shim.
History:
01/31/2001 linstev Created
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(CorelSiteBuilder) #include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(SetWindowTextA) APIHOOK_ENUM_END
HWND g_hLast = NULL; CString * g_csLastWindowText = NULL;
CRITICAL_SECTION g_csGlobals;
/*++
Only send the message if the text has changed.
--*/
BOOL APIHOOK(SetWindowTextA)( HWND hWnd, LPCSTR lpString ) { EnterCriticalSection(&g_csGlobals);
if (lpString) { CSTRING_TRY { CString csString(lpString);
if ((g_hLast == hWnd) && g_csLastWindowText->Compare(csString) == 0) { //
// We have the same window and title, don't bother setting it again
//
LeaveCriticalSection(&g_csGlobals);
return TRUE; }
//
// Store the current settings as the last known values
//
g_hLast = hWnd; *g_csLastWindowText = csString; } CSTRING_CATCH { // Do nothing
} }
LeaveCriticalSection(&g_csGlobals);
return ORIGINAL_API(SetWindowTextA)(hWnd, lpString); }
/*++
Register hooked functions
--*/
BOOL NOTIFY_FUNCTION( DWORD fdwReason) { if (fdwReason == DLL_PROCESS_ATTACH) { CSTRING_TRY { if (!InitializeCriticalSectionAndSpinCount(&g_csGlobals, 0x80000000)) { return FALSE; } g_csLastWindowText = new CString; if (g_csLastWindowText == NULL) { return FALSE; } } CSTRING_CATCH { return FALSE; } }
return TRUE; }
HOOK_BEGIN
CALL_NOTIFY_FUNCTION
APIHOOK_ENTRY(USER32.DLL, SetWindowTextA)
HOOK_END
IMPLEMENT_SHIM_END
|