Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==WindhawkMod==
- // @id desktop-marquee-fade-v26
- // @name Desktop Marquee Fade (Async)
- // @description Add a smooth, modern fade effect to your desktop selection
- // @version 26.0.1
- // @author angel_lov
- // @include explorer.exe
- // @compilerOptions -luser32 -lgdi32
- // ==/WindhawkMod==
- #define NOMINMAX
- #include <windows.h>
- #include <windhawk_api.h>
- #include <thread>
- #include <commctrl.h>
- #pragma comment(lib, "user32.lib")
- #pragma comment(lib, "gdi32.lib")
- #pragma comment(lib, "comctl32.lib")
- HWND g_hOverlayWnd = NULL;
- HHOOK g_hMouseHook = NULL;
- POINT g_dragStart = { 0 };
- bool g_isDragging = false;
- HBRUSH g_hBrush = NULL;
- HPEN g_hPen = NULL;
- #define START_ALPHA 60
- LRESULT CALLBACK OverlayWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
- static int s_alpha = 0;
- switch (msg) {
- case WM_USER + 1: {
- KillTimer(hwnd, 1);
- RECT* prc = (RECT*)lParam;
- SetWindowPos(hwnd, HWND_TOPMOST, prc->left, prc->top,
- prc->right - prc->left, prc->bottom - prc->top,
- SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOREDRAW);
- ShowWindow(hwnd, SW_SHOWNA);
- s_alpha = START_ALPHA;
- SetLayeredWindowAttributes(hwnd, 0, (BYTE)s_alpha, LWA_ALPHA);
- RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
- delete prc;
- SetTimer(hwnd, 1, 30, NULL);
- return 0;
- }
- case WM_TIMER: {
- s_alpha -= 8;
- if (s_alpha <= 0) {
- KillTimer(hwnd, 1);
- s_alpha = 0;
- ShowWindow(hwnd, SW_HIDE);
- } else {
- SetLayeredWindowAttributes(hwnd, 0, (BYTE)s_alpha, LWA_ALPHA);
- }
- return 0;
- }
- case WM_PAINT: {
- PAINTSTRUCT ps;
- HDC hdc = BeginPaint(hwnd, &ps);
- RECT rc;
- GetClientRect(hwnd, &rc);
- int radius = 4;
- HBRUSH hOldBrush = (HBRUSH)SelectObject(hdc, g_hBrush);
- HPEN hOldPen = (HPEN)SelectObject(hdc, g_hPen);
- RoundRect(hdc, 0, 0, rc.right, rc.bottom, radius, radius);
- SelectObject(hdc, hOldPen);
- SelectObject(hdc, hOldBrush);
- EndPaint(hwnd, &ps);
- return 0;
- }
- case WM_ERASEBKGND: return 1;
- }
- return DefWindowProc(hwnd, msg, wParam, lParam);
- }
- LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
- if (nCode == HC_ACTION) {
- MSLLHOOKSTRUCT* pMouse = (MSLLHOOKSTRUCT*)lParam;
- if (wParam == WM_LBUTTONDOWN) {
- HWND hWndUnder = WindowFromPoint(pMouse->pt);
- wchar_t className[256];
- GetClassNameW(hWndUnder, className, 256);
- if (wcscmp(className, L"SysListView32") == 0) {
- LVHITTESTINFO hit = {0};
- hit.pt = pMouse->pt;
- ScreenToClient(hWndUnder, &hit.pt);
- int nItem = (int)SendMessageW(hWndUnder, LVM_HITTEST, 0, (LPARAM)&hit);
- if (nItem == -1) { // hit on empty space
- g_dragStart = pMouse->pt;
- g_isDragging = true;
- } else {
- g_isDragging = false; // hit on icon
- }
- } else {
- g_isDragging = false;
- }
- }
- else if (wParam == WM_LBUTTONUP && g_isDragging) {
- g_isDragging = false;
- int w = (pMouse->pt.x > g_dragStart.x ? pMouse->pt.x - g_dragStart.x : g_dragStart.x - pMouse->pt.x);
- int h = (pMouse->pt.y > g_dragStart.y ? pMouse->pt.y - g_dragStart.y : g_dragStart.y - pMouse->pt.y);
- if (w > 10 && h > 10) {
- int left = (g_dragStart.x < pMouse->pt.x ? g_dragStart.x : pMouse->pt.x);
- int top = (g_dragStart.y < pMouse->pt.y ? g_dragStart.y : pMouse->pt.y);
- RECT* prc = new RECT{ left, top, left + w, top + h };
- PostMessageW(g_hOverlayWnd, WM_USER + 1, 0, (LPARAM)prc);
- }
- }
- }
- return CallNextHookEx(g_hMouseHook, nCode, wParam, lParam);
- }
- BOOL Wh_ModInit() {
- std::thread([]() {
- g_hBrush = CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT));
- g_hPen = CreatePen(PS_SOLID, 1, GetSysColor(COLOR_HIGHLIGHT));
- WNDCLASSW wc = {0};
- wc.lpfnWndProc = OverlayWndProc;
- wc.hInstance = GetModuleHandle(NULL);
- wc.lpszClassName = L"FadeMarqueeClass";
- wc.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH);
- RegisterClassW(&wc);
- g_hOverlayWnd = CreateWindowExW(WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW | WS_EX_TOPMOST | WS_EX_NOACTIVATE,
- wc.lpszClassName, NULL, WS_POPUP, 0, 0, 0, 0, NULL, NULL, wc.hInstance, NULL);
- ShowWindow(g_hOverlayWnd, SW_HIDE);
- g_hMouseHook = SetWindowsHookExW(WH_MOUSE_LL, MouseHookProc, GetModuleHandle(NULL), 0);
- MSG msg;
- while (GetMessage(&msg, NULL, 0, 0)) DispatchMessage(&msg);
- if (g_hMouseHook) UnhookWindowsHookEx(g_hMouseHook);
- }).detach();
- return TRUE;
- }
- void Wh_ModUninit() {
- PostMessageW(g_hOverlayWnd, WM_QUIT, 0, 0);
- if (g_hBrush) DeleteObject(g_hBrush);
- if (g_hPen) DeleteObject(g_hPen);
- }
Advertisement
Add Comment
Please, Sign In to add comment