ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

01.03.2009, 00:43
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
Close button killer
Прелюдия:
Я всегда выключаю комп в спящий режим. Как следствие, набирается много всяких программ, вкладок в опере и тп. И часто случается так, что при случайно нажатии несколько раз в правом верхнем углу экрана убивается и то, что убивать бы не хотелось. Это побудило меня накодить такую мини-программу.
Мануал:
Запускаем прогу, и кликаем по окну, на котором мы хотим убрать крестик, удерживая ctrl и shift.
Программа завершается через 10 секунд сама.
ctrl+shift+Q также её отключает.
Откомпилено (~3кб):
http://slil.ru/27008900
Сорцы:
unclose.dll :
Код:
#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
Код:
#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 за пару ценных советов по студии и тест!
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
Последний раз редактировалось desTiny; 01.03.2009 в 18:29..
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|