LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { if (msg == WM_TRAY) { if (lParam == WM_LBUTTONDOWN) { HookMouse(); } else if (lParam == WM_MBUTTONDOWN) { Sleep(3000); HookMouse(); } else if (lParam == WM_RBUTTONDOWN) { ShowContextMenu(hwnd); } } else if (msg == WM_TASKBARCREATED) { tray_added = 0; UpdateTray(); } else if (msg == WM_COMMAND) { int wmId = LOWORD(wParam), wmEvent = HIWORD(wParam); if (wmId == SWM_FIND) { HookMouse(); } else if (wmId == SWM_FINDDELAY) { Sleep(3000); HookMouse(); } else if (wmId == SWM_FINDALL) { FindAllWnds(); } else if (wmId == SWM_ABOUT) { MessageBox(NULL, l10n->about, l10n->about_title, MB_ICONINFORMATION|MB_OK); } else if (wmId == SWM_EXIT) { DestroyWindow(hwnd); } } else if (msg == WM_DESTROY) { showerror = 0; UnhookMouse(); RemoveTray(); PostQuitMessage(0); return 0; } else if (msg == WM_LBUTTONDOWN || msg == WM_MBUTTONDOWN || msg == WM_RBUTTONDOWN) { // Hide the window if clicked on, this might happen if it wasn't hidden by the hooks for some reason ShowWindow(hwnd, SW_HIDE); // Since we take away the cursor, make sure the mouse is unhooked UnhookMouse(); } return DefWindowProc(hwnd, msg, wParam, lParam); }
// Entry point int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow) { g_hinst = hInst; // Look for previous instance HWND previnst = FindWindow(APP_NAME, NULL); if (previnst != NULL) { SendMessage(previnst, WM_COMMAND, SWM_FIND, 0); return 0; } // Create window WNDCLASSEX wnd = {sizeof(WNDCLASSEX), 0, WindowProc, 0, 0, hInst, NULL, NULL, (HBRUSH)(COLOR_WINDOW+1), NULL, APP_NAME, NULL}; wnd.hCursor = LoadImage(hInst, L"find", IMAGE_CURSOR, 0, 0, LR_DEFAULTCOLOR); RegisterClassEx(&wnd); g_hwnd = CreateWindowEx(WS_EX_TOOLWINDOW|WS_EX_TOPMOST|WS_EX_LAYERED, wnd.lpszClassName, APP_NAME, WS_POPUP, 0, 0, 0, 0, NULL, NULL, hInst, NULL); SetLayeredWindowAttributes(g_hwnd, 0, 1, LWA_ALPHA); // Almost transparent // Tray icon InitTray(); UpdateTray(); // Hook mouse if ((GetAsyncKeyState(VK_SHIFT)&0x8000)) { HookMouse(); } // Message loop MSG msg; while (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { if (msg == WM_TRAY) { if (lParam == WM_LBUTTONDOWN || lParam == WM_LBUTTONDBLCLK) { ToggleState(); } else if (lParam == WM_MBUTTONDOWN) { if ((GetAsyncKeyState(VK_SHIFT)&0x8000)) { ShellExecute(NULL, L"open", inipath, NULL, NULL, SW_SHOWNORMAL); } else { HookMouse(); } } else if (lParam == WM_RBUTTONUP) { ShowContextMenu(hwnd); } } else if (msg == WM_UPDATESETTINGS) { wchar_t txt[10]; // TimerCheck KillTimer(g_hwnd, CHECKTIMER); GetPrivateProfileString(L"General", L"TimerCheck", L"0", txt, ARRAY_SIZE(txt), inipath); if (_wtoi(txt)) { SetTimer(g_hwnd, CHECKTIMER, CHECKINTERVAL, NULL); } } else if (msg == WM_TASKBARCREATED) { tray_added = 0; UpdateTray(); } else if (msg == WM_COMMAND) { int wmId=LOWORD(wParam), wmEvent=HIWORD(wParam); if (wmId == SWM_TOGGLE) { ToggleState(); } else if (wmId == SWM_ELEVATE) { wchar_t path[MAX_PATH]; GetModuleFileName(NULL, path, ARRAY_SIZE(path)); int ret = (INT_PTR) ShellExecute(NULL, L"runas", path, NULL, NULL, SW_SHOWNORMAL); if (ret > 32) { DestroyWindow(hwnd); } } else if (wmId == SWM_AUTOSTART_ON) { SetAutostart(1, 0); } else if (wmId == SWM_AUTOSTART_OFF) { SetAutostart(0, 0); } else if (wmId == SWM_AUTOSTART_ELEVATE_ON) { SetAutostart(1, 1); } else if (wmId == SWM_AUTOSTART_ELEVATE_OFF) { SetAutostart(1, 0); } else if (wmId == SWM_TIMERCHECK_ON) { WritePrivateProfileString(L"General", L"TimerCheck", L"1", inipath); SendMessage(g_hwnd, WM_UPDATESETTINGS, 0, 0); } else if (wmId == SWM_TIMERCHECK_OFF) { WritePrivateProfileString(L"General", L"TimerCheck", L"0", inipath); SendMessage(g_hwnd, WM_UPDATESETTINGS, 0, 0); } else if (wmId == SWM_WEBSITE) { OpenUrl(APP_URL); } else if (wmId == SWM_XKILL) { HookMouse(); } else if (wmId == SWM_EXIT) { DestroyWindow(hwnd); } } else if (msg == WM_DESTROY) { showerror = 0; UnhookKeyboard(); UnhookMouse(); RemoveTray(); PostQuitMessage(0); } else if (msg == WM_LBUTTONDOWN || msg == WM_MBUTTONDOWN || msg == WM_RBUTTONDOWN) { // Hide the window if clicked on, this might happen if it wasn't hidden by the hooks for some reason ShowWindow(hwnd, SW_HIDE); // Since we take away the skull, make sure we can't kill anything UnhookMouse(); } else if (msg == WM_TIMER) { if (wParam == CHECKTIMER && ENABLED()) { if (GetAsyncKeyState(VK_LCONTROL)&0x8000 && GetAsyncKeyState(VK_LMENU)&0x8000 && GetAsyncKeyState(VK_F4)&0x8000) { // Get hwnd of foreground window HWND hwnd = GetForegroundWindow(); if (hwnd == NULL) { return DefWindowProc(hwnd, msg, wParam, lParam); } // Kill it! Kill(hwnd); } else { // Reset when the user has released the keys killing = 0; } } } return DefWindowProc(hwnd, msg, wParam, lParam); }
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION) { int vkey = ((PKBDLLHOOKSTRUCT)lParam)->vkCode; if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) { // Check for Ctrl+Alt+F4 if (vkey == VK_LCONTROL) { ctrl = 1; } else if (vkey == VK_LMENU) { alt = 1; } else if (ctrl && alt && vkey == VK_F4) { // Double check that Ctrl and Alt are being pressed. // This prevents a faulty kill if we didn't received the keyup for these keys. if (!(GetAsyncKeyState(VK_LCONTROL)&0x8000)) { ctrl = 0; return CallNextHookEx(NULL, nCode, wParam, lParam); } else if (!(GetAsyncKeyState(VK_LMENU)&0x8000)) { alt = 0; return CallNextHookEx(NULL, nCode, wParam, lParam); } // Get hwnd of foreground window HWND hwnd = GetForegroundWindow(); if (hwnd == NULL) { return CallNextHookEx(NULL, nCode, wParam, lParam); } // Kill it! Kill(hwnd); // Prevent this keypress from being propagated return 1; } // Check for [the windows key]+F4 else if (vkey == VK_LWIN) { win = 1; } else if (win && vkey == VK_F4) { // Double check that the windows button is being pressed if (!(GetAsyncKeyState(VK_LWIN)&0x8000)) { win = 0; return CallNextHookEx(NULL, nCode, wParam, lParam); } // Hook mouse HookMouse(); // Prevent this keypress from being propagated return 1; } else if (vkey == VK_ESCAPE && mousehook) { // Unhook mouse UnhookMouse(); // Prevent this keypress from being propagated return 1; } } else if (wParam == WM_KEYUP || wParam == WM_SYSKEYUP) { killing = 0; if (vkey == VK_LCONTROL) { ctrl = 0; } else if (vkey == VK_LMENU) { alt = 0; } else if (vkey == VK_LWIN) { win = 0; } } } return CallNextHookEx(NULL, nCode, wParam, lParam); }