Скрин-сэйвер «Нюхач» Николай «GorluM» Андреев Хакер, номер #077, стр. 077-112-4 Помнится, я обещал сделать цветной вывод. Это всего одна строка. Функция SetConsoleTextAttribute установит для консоли, указанной в первом ее параметре, текущий цвет вывода. К примеру, если я хочу, чтобы текст был ярко зеленым я должен написать: SetConsoleTextAttribute(hStdout, FOREGROUND_GREEN|FOREGROUND_INTENSITY); Префикс FOREGROUND, означает, что мы меняем цвет текста. Если захотим поменять цвет фона, напишем вместо этого префикса BACKGROUND. Список всех цветов и опций можно взять в файле wincon.h. Самое наглядное будет – раскрасить пакеты в зависимости от протокола, описанного в заголовке пакета. Для того чтобы его получить, надо сначала сообщить нашему компилятору, что указатель на буфер со ВСЕМ пакетом - это указатель на структуру IPHeader, т.е. заголовок IP-пакета. IPHeader* hdr = (IPHeader *)Buffer; В этой структуре член iph_protocol – это как раз то, что мы ищем. В зависимости от того, будет ли он равен IPPROTO_TCP (TCP-протокол), IPPROTO_UDP (UDP-протокол), IPPROTO_ICMP или IPPROTO_IGMP, мы будем выводить заголовки пакетов красным, зеленым, синим или бордовым цветами. После вывода очередного пакета надо делать небольшую паузу функцией Sleep, чтобы при необходимости пакет можно было успеть прочесть. [движения мышки] Чуть не забыл о самом главном. Наша программа ведь должна отрубаться, если вдруг мышь двинется, а то иначе какой это скрин-сэйвер? Следить за состоянием мышки, в принципе, можно с помощью глобального хука, который устанавливается с помощью функции SetWindowsHookEx, но как по мне – так это маразм. Лишнюю DLL придется писать, да и вообще геморроя много. Значительно проще при запуске запомнить текущие координаты курсора с помощью GetCursorPos, а потом раз в какое-то время в отдельной нити проверять с помощью этой же функции, не шелохнулась ли мышь. DWORD WINAPI CheckPOS (LPVOID pParam) { while (true) { Sleep(500); LPPOINT pTest1 = (LPPOINT)pParam; POINT pTest2; GetCursorPos(&pTest2); if (pTest1->x != pTest2.x) { CloseHandle(hMutex); ExitProcess(0); } } return 0; } Вот эту функцию надо запустить в отдельной нити с помощью CreateThread, передав ей в параметре указатель на структуру с текущими координатами курсора. После этого, любое, даже самое маленькое перемещение мышки отрубит нашу программу. Конечно, надо было бы и клавиши обрабатывать, мол, нажмет – отрублюсь. Но, лень! Поэтому, если тебе понравилась идея подобного хранителя экрана, и ты разобрался во всех премудростях его разработки, у тебя есть шанс помочь мне и улучшить это создание извращенной программисткой мысли. [code over] В общей сложности получится примерно то, что аккуратно лежит на диске вместе с другими исходниками из рубрики Кодинг. Скопируй получившуюся программу в windows\system32 с расширением *.scr, залезь в настройки экрана и укажи там наше детище. Жди несколько минут и можешь любоваться новым хакерским хранителем экрана. На этой радостной ноте я убегаю пить сок. Удачного компилирования, пока. |