Beispiel #1
0
BOOL DLLIMPORT RegisterHook(HMODULE hLib) {
	_hMouse = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseProc, hLib, 0);
	_hWndProc = SetWindowsHookEx(WH_CALLWNDPROCRET, (HOOKPROC)CallWndRetProc, hLib, 0);
	if (_hMouse == NULL || _hWndProc == NULL) {
		UnRegisterHook();
		return FALSE;
	}
	return TRUE;
}
Beispiel #2
0
LRESULT CALLBACK
HookWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    NOTIFYICONDATA nid;
    int i;
    char buff[255];
    //  DWORD ProcessId;
    HMENU hSysMenu;
    switch (msg) {
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case IDM_RESTORE:
            ShowTheWindow(CurrentWindow);
            break;
        case IDM_EXIT:
            SendMessage(hwndHook,WM_DESTROY,0,0);
            break;
        case IDM_CLOSE:
            CloseTheWindow(CurrentWindow);
            break;
        case IDM_ABOUT:
            DialogBox(thisInstance, MAKEINTRESOURCE(IDD_DIALOG1), hwndHook, (DLGPROC)AboutDlgProc );
            break;
        case IDM_DESTROY:
            if(MessageBox(NULL,"Kill the window?","RBTray",MB_YESNO | MB_ICONWARNING )==IDYES)DestroyTheWindow(CurrentWindow);
            break;
        case IDM_SHOWKEY:
            showKeyb = !showKeyb;
            keyState = -1;
            SetKbdCfg(showKeyb);
            ShowKeyState();
            break;
        };
        break;
    case WM_MYCMD:
        switch (wParam)
        {
            /*
        case IDM_LOTUSEDIT:
            buff[0] = '\0';
            GetWindowText((HWND)lParam, buff, 10);
            //buff[250] = '\0';
            MessageBox(NULL,buff,"code",MB_OK);
            break;
            */
        case IDM_SIZE:
            Resize((HWND)lParam);
            break;
        case IDM_TRAY:
            // prohibit hiding of explorer's taskbar			
            GetClassName((HWND)lParam, buff, 255);
            if(strcasecmp("Shell_TrayWnd", buff) == 0) break;
            if(strcasecmp("DV2ControlHost", buff) == 0) break;
            //MessageBox(NULL, buff, "RBTray", MB_OK);
            for(i = 0 ; i < MAXCOUNT ;i++) { 
                if(!list[i]) break;
            }
            if (i == MAXCOUNT) break;

            list[i]=(HWND)lParam;
            ShowWindow((HWND)lParam, SW_HIDE);
            ShowWindow((HWND)lParam, SW_MINIMIZE);
            AddToTray(i);
            ShowWindow((HWND)lParam, SW_HIDE);
            ShowWindow(GetParent((HWND)lParam), SW_HIDE);
            UpdMenu((HWND)lParam,(LPARAM)TRUE);
            break;
            /*
            case IDM_KEY:
            // Fix chars typed in incorrect keyboard layout
            FixChars();
            break;
            */
        case IDM_KEYSTAT:
            ShowKeyState();
            break;
        case IDM_ONTOP:
            hSysMenu=GetSystemMenu((HWND)lParam, FALSE);
            if(hSysMenu)
            {
                if(GetMenuState(hSysMenu, IDM_ONTOP,MF_BYCOMMAND) & MF_CHECKED)
                    //GetWindowLong((HWND)lParam,GWL_EXSTYLE)&WS_EX_TOPMOST)
                {
                    CheckMenuItem(hSysMenu,IDM_ONTOP,MF_BYCOMMAND |MF_UNCHECKED);
                    SetWindowPos((HWND)lParam,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOREDRAW);
                }
                else
                {
                    CheckMenuItem(hSysMenu,IDM_ONTOP,MF_BYCOMMAND |MF_CHECKED);
                    SetWindowPos((HWND)lParam,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOREDRAW);
                }
            }
            break;
        }
    case WM_DELTRAY:
        CloseTheWindow((HWND)wParam);
        break;
    case WM_TRAYCMD:
        switch ((UINT)lParam) {
    case WM_LBUTTONDOWN:
        // Hmm, there's probably a better way to do this... SetCapture maybe?
        // But I don't feel like messing with it :)
        lastLButtonDown = GetTickCount();
        break;
    case WM_LBUTTONUP:
        if ((GetTickCount() - lastLButtonDown) <= 1000) {
            ShowTheWindow((HWND)wParam);
        }
        break;
    case WM_RBUTTONUP:
        CurrentWindow=(HWND)wParam;
        ExecuteMenu();
        break;
    case WM_MOUSEMOVE:
        if (!IsWindow((HWND)wParam))
            DelFromTray(FindInTray((HWND)wParam));
        else {
            nid.uID              = (UINT)wParam;
            nid.uFlags           = NIF_ICON | NIF_TIP;
            nid.hIcon            = GetWindowIcon((HWND)wParam);
            GetWindowText((HWND)wParam, nid.szTip, MAXTEXT);
            Shell_NotifyIcon(NIM_MODIFY, &nid);
        }
        }
        break;
    case WM_DESTROY:
        for (i = 0; i < MAXCOUNT; i++)
            if (list[i])
            {
                ShowIt(list[i]);
                DelFromTray(i);
            }
            showKeyb = FALSE;
            ShowKeyState();
            UnRegisterHook();
            FreeLibrary(hLib);
            EnumWindows((WNDENUMPROC)UpdMenu,FALSE);
            PostQuitMessage(0);
            ExitProcess(0);
            break;
    }


    // I can't put this in the switch since WM_TASKBAR_CREATED isn't constant
    if (msg == WM_TASKBAR_CREATED) {
        for (i = 0; i < MAXCOUNT; i++) {
            if (list[i]) {
                AddToTray(i);
            }
        }
    }

    return DefWindowProc(hwnd, msg, wParam, lParam);
}
Beispiel #3
0
LRESULT CALLBACK HookWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
	switch (msg) {
		case WM_COMMAND:
			switch (LOWORD(wParam)) {
				case IDM_RESTORE:
					RestoreWindowFromTray(_hwndForMenu);
					break;
				case IDM_CLOSE:
					CloseWindowFromTray(_hwndForMenu);
					break;
				case IDM_ABOUT:
					DialogBox(_hInstance, MAKEINTRESOURCE(IDD_ABOUT), _hwndHook, (DLGPROC)AboutDlgProc);
					break;
				case IDM_EXIT:
					SendMessage(_hwndHook, WM_DESTROY, 0, 0);
					break;
			}
			break;
		case WM_ADDTRAY:
			MinimizeWindowToTray((HWND)lParam);
			break;
		case WM_REMTRAY:
			RestoreWindowFromTray((HWND)lParam);
			break;
		case WM_REFRTRAY:
			RefreshWindowInTray((HWND)lParam);
			break;
		case WM_TRAYCMD:
			switch ((UINT)lParam) {
				case NIN_SELECT:
					RestoreWindowFromTray(_hwndItems[wParam]);
					break;
				case WM_CONTEXTMENU:
					_hwndForMenu = _hwndItems[wParam];
					ExecuteMenu();
					break;
				case WM_MOUSEMOVE:
					RefreshWindowInTray(_hwndItems[wParam]);
					break;
			}
			break;
		case WM_DESTROY:
			for (int i = 0; i < MAXTRAYITEMS; i++) {
				if (_hwndItems[i]) {
					RestoreWindowFromTray(_hwndItems[i]);
				}
			}
			UnRegisterHook();
			FreeLibrary(_hLib);
			PostQuitMessage(0);
			break;
	}

	if (msg == WM_TASKBAR_CREATED) {
		for (int i = 0; i < MAXTRAYITEMS; i++) {
			if (_hwndItems[i]) {
				AddToTray(i);
			}
		}
	}

	return DefWindowProc(hwnd, msg, wParam, lParam);
}