BOOL WINAPI SetHook(BOOL fInstall) {
BOOL fOk;
if (fInstall)
{
if (g_hhook == NULL)
{
//error
}
g_hhook = SetWindowsHookEx(WH_CBT, CBTProc, g_hinstDll, 0);
fOk = (g_hhook != NULL);
}
else
{
if (g_hhook != NULL)
{
// Can't uninstall if not installed
}
fOk = UnhookWindowsHookEx(g_hhook);
g_hhook = NULL;
}
return(fOk);
}
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
static HWND g_hWndDialog = NULL;
switch (nCode)
{
case HCBT_CREATEWND:
{
HWND hWnd = (HWND)wParam;
LPCBT_CREATEWND pcbt = (LPCBT_CREATEWND)lParam;
LPCREATESTRUCT pcs = pcbt->lpcs;
if ((DWORD)(pcs->dwExStyle) == 0x40310)
{
MessageBox(NULL, NULL, L"Shell open!", 0);
g_hWndDialog = hWnd;
}
break;
}
default:
break;
}
return CallNextHookEx(g_hhook, nCode, wParam, lParam);
}