// Hooks LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION) { if (wParam == WM_LBUTTONDOWN && find) { POINT pt = ((PMSLLHOOKSTRUCT)lParam)->pt; // Make sure cursorwnd isn't in the way ShowWindow(g_hwnd, SW_HIDE); // Print window info POINT *p_pt = malloc(sizeof(pt)); *p_pt = pt; CreateThread(NULL, 0, FindWnd, p_pt, 0, NULL); // Unhook mouse UnhookMouse(); // Prevent mousedown from propagating return 1; } else if (wParam == WM_RBUTTONDOWN) { // Disable mouse DisableMouse(); // Prevent mousedown from propagating return 1; } else if (wParam == WM_RBUTTONUP) { // Unhook mouse UnhookMouse(); // Prevent mouseup from propagating return 1; } } return CallNextHookEx(NULL, nCode, wParam, lParam); }
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); }
int UnhookKeyboard() { if (!keyhook) { // Keyboard not hooked return 1; } // Remove keyboard hook if (UnhookWindowsHookEx(keyhook) == 0) { #ifdef DEBUG Error(L"UnhookWindowsHookEx(keyhook)", L"Could not unhook keyboard. Try restarting "APP_NAME".", GetLastError()); #else if (showerror) { MessageBox(NULL, l10n.unhook_error, APP_NAME, MB_ICONINFORMATION|MB_OK|MB_TOPMOST|MB_SETFOREGROUND); } #endif } // Remove mouse hook (it probably isn't hooked, but just in case) UnhookMouse(); // Success keyhook = NULL; UpdateTray(); return 0; }
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION) { if (wParam == WM_LBUTTONDOWN && superkill) { POINT pt = ((PMSLLHOOKSTRUCT)lParam)->pt; // Make sure the cursor window isn't in the way ShowWindow(g_hwnd, SW_HIDE); // Get hwnd HWND hwnd = WindowFromPoint(pt); if (hwnd == NULL) { #ifdef DEBUG Error(L"WindowFromPoint()", L"LowLevelMouseProc()", GetLastError()); #endif return CallNextHookEx(NULL, nCode, wParam, lParam); } hwnd = GetAncestor(hwnd, GA_ROOT); // Kill it! Kill(hwnd); // Unhook mouse UnhookMouse(); // Prevent mousedown from propagating return 1; } else if (wParam == WM_RBUTTONDOWN) { // Disable mouse DisableMouse(); // Prevent mousedown from propagating return 1; } else if (wParam == WM_RBUTTONUP) { // Unhook mouse UnhookMouse(); // Prevent mouseup from propagating return 1; } } return CallNextHookEx(NULL, nCode, wParam, lParam); }
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); }