windows-nt/Source/XPSP1/NT/shell/ext/systray/dll/csc.c
2020-09-26 16:20:57 +08:00

55 lines
1.4 KiB
C

#include "stdafx.h"
#include "systray.h"
#include <cscuiext.h>
///////////////////////////////////////////////////////////////////////////////
// CSC_CheckEnable
typedef BOOL (WINAPI* PFNCSCMSGPROCESS)(LPMSG);
static HWND g_hWndCSC = NULL;
static HMODULE g_hCSCUIDll = NULL;
static PFNCSCMSGPROCESS g_pfnMsgProcess = NULL;
BOOL CSC_CheckEnable(HWND hWnd, BOOL bSvcEnabled)
{
if ((g_hWndCSC && IsWindow(g_hWndCSC) && !bSvcEnabled) ||
(((!g_hWndCSC) || !IsWindow(g_hWndCSC)) && bSvcEnabled))
{
if (!g_hCSCUIDll)
g_hCSCUIDll = LoadLibrary(TEXT("cscui.dll"));
if (g_hCSCUIDll)
{
PFNCSCUIINITIALIZE pfn = (PFNCSCUIINITIALIZE)GetProcAddress(g_hCSCUIDll, "CSCUIInitialize");
g_pfnMsgProcess = (PFNCSCMSGPROCESS)GetProcAddress(g_hCSCUIDll, "CSCUIMsgProcess");
if (pfn)
{
DWORD dwFlags = CI_INITIALIZE | CI_CREATEWINDOW;
if (!bSvcEnabled)
dwFlags = CI_TERMINATE | CI_DESTROYWINDOW;
g_hWndCSC = (*pfn)(NULL, dwFlags);
}
}
if (g_hCSCUIDll && !bSvcEnabled)
{
FreeLibrary(g_hCSCUIDll);
g_hCSCUIDll = NULL;
g_pfnMsgProcess = NULL;
}
}
return(TRUE);
}
BOOL CSC_MsgProcess(LPMSG pMsg)
{
if (g_pfnMsgProcess)
return (*g_pfnMsgProcess)(pMsg);
return FALSE;
}