Прелюдия: Я всегда выключаю комп в спящий режим. Как следствие, набирается много всяких программ, вкладок в опере и тп. И часто случается так, что при случайно нажатии несколько раз в правом верхнем углу экрана убивается и то, что убивать бы не хотелось. Это побудило меня накодить такую мини-программу. Мануал: Запускаем прогу, и кликаем по окну, на котором мы хотим убрать крестик, удерживая ctrl и shift. Программа завершается через 10 секунд сама. ctrl+shift+Q также её отключает. Откомпилено (~3кб): http://slil.ru/27008900 Сорцы: unclose.dll : Code: #pragma comment(linker, "/MERGE:.data=.text /ENTRY:DllMain /MERGE:.rdata=.text /ALIGN:512") #define Export EXTERN_C __declspec(dllexport) #include "windows.h" #pragma section("hk",read,write,shared) Export __declspec(allocate("hk")) HHOOK SysHook = NULL; __declspec(allocate("hk")) BOOL off = false; Export LRESULT CALLBACK Hook(int nCode, WPARAM wParam, LPARAM lParam){ if (nCode < 0 || off) return CallNextHookEx(SysHook, nCode, wParam, lParam); MSG* msg = (MSG*)lParam; if (msg->message == WM_LBUTTONDOWN){ if (msg->wParam & (MK_CONTROL | MK_SHIFT)){ MessageBeep(-1); HWND Handle = msg->hwnd, par; while (par = GetParent(Handle)) Handle = par; DeleteMenu(GetSystemMenu(Handle, 0), SC_CLOSE, MF_BYCOMMAND); SendMessage(Handle, WM_PAINT, 0, 0); return 1; } } if (msg->message == WM_KEYDOWN){ if (msg->wParam == 81 && GetKeyState(VK_CONTROL)<0 && GetKeyState(VK_SHIFT)<0){ MessageBeep(-1); off = 1; UnhookWindowsHookEx(SysHook); FreeLibrary(GetModuleHandle(NULL)); return 1; } } return CallNextHookEx(SysHook, nCode, wParam, lParam); } BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } main.cpp Code: #include "windows.h" #pragma comment(linker, " /MERGE:.data=.text /MERGE:.rdata=.text /ALIGN:512 /ENTRY:WinMain") #define LIBRARY "unclose.dll" wParam, LPARAM lParam); static HINSTANCE Lib = NULL; static HHOOK* SysHk = NULL; HOOKPROC HookProc = NULL; int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ Lib = LoadLibraryA(LIBRARY); if (!Lib) return -1; HookProc = (HOOKPROC) GetProcAddress(Lib, "Hook"); if (!HookProc) return -2; SysHk = (HHOOK*) GetProcAddress(Lib, "SysHook"); if (!SysHk) return -3; *SysHk = SetWindowsHookEx(WH_GETMESSAGE, HookProc, Lib, NULL); if (!*SysHk) return -4; Sleep(10000); UnhookWindowsHookEx(*SysHk); FreeLibrary(Lib); return 0; } PS ура, опера теперь не убиваема! PPS щелчок по заголовку окна не засчитывается Greetz 2 Terrific за пару ценных советов по студии и тест!