Exemple #1
0
// 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);
}
Exemple #2
0
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);
}
Exemple #3
0
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;
}
Exemple #4
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);
}
Exemple #5
0
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);
}
Exemple #6
0
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);
}