#include #include LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM); char szClassName[ ] = "RePasteURL"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; MSG messages; WNDCLASSEX wincl = {0}; wincl.hInstance = hInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.cbSize = sizeof(WNDCLASSEX); if(!RegisterClassEx(&wincl)) return 0; hwnd = CreateWindowEx(WS_EX_TOOLWINDOW, szClassName, 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, 0, 0, hInstance, 0); if(!hwnd) return(0); while(GetMessage(&messages, 0, 0, 0)) DispatchMessage(&messages); return messages.wParam; } /***********************************************************/ HANDLE hNextCB; HANDLE cbData; char buffer[2048], buffer2[2048]; char *bufptr, *buf2ptr, *cptr; LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_CREATE: hNextCB = SetClipboardViewer(hwnd); SetProcessWorkingSetSize(GetCurrentProcess(), -1, -1); break; case WM_CHANGECBCHAIN: if(hNextCB == (HWND)wParam) hNextCB = (HWND)lParam; if(hNextCB) SendMessage((HWND)hNextCB, WM_CHANGECBCHAIN, wParam, lParam); break; case WM_DRAWCLIPBOARD: if(hNextCB) SendMessage((HWND)hNextCB, WM_DRAWCLIPBOARD, (WPARAM)0, (LPARAM)0); if(IsClipboardFormatAvailable(CF_TEXT) && (GetKeyState(VK_SHIFT) & 0X7000) && !(GetKeyState(VK_DELETE) & 0X7000)) { ZeroMemory((void *)buffer, 2048); ZeroMemory((void *)buffer2, 2048); if(OpenClipboard(0)) { cbData = GetClipboardData(CF_TEXT); if(cbData) { cptr = (char *)GlobalLock(cbData); if(cptr) { strncpy(buffer, cptr, 2047); GlobalUnlock(cbData); CloseClipboard(); bufptr = buffer; buf2ptr = buffer2; while(*bufptr != '\0') { while((*bufptr == '\r') || (*bufptr == '\n') || (*bufptr == ' ')) bufptr++; *buf2ptr++ = *bufptr++; } ShellExecute(0, "open", buffer2, 0, 0, SW_SHOW); } else CloseClipboard(); } SetProcessWorkingSetSize(GetCurrentProcess(), -1, -1); } } break; case WM_CLOSE: ChangeClipboardChain(hwnd, (HWND)hNextCB); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }