Думаю, все ещё помнят такое замечетельное изобретение, как часы с кукушкой, описанные в цитате с БашОрга ( http://www.bash.org.ru/ )
x0: зобацал часы с кукушкой на серваке
x0: в cron.hourly пешу скрыптKUKU=`/bin/date +%I`
while [ $KUKU -gt 0 ]; do
eject /dev/cdrom
cat /root/xxx/kuku.au > /dev/dsp
eject -t /dev/cdrom
KUKU=$((KUKU-1))
donex0: ночальнег в полдень зашел и окуел
x0: сцуко спасская биг тауэр
Проблема этих часов заключалась только в одном — они были созданы для Linux-систем, и пользователи Windows не могли похвастаться таким-вот изобретением у себя дома. От нечего делать, я решил реализовать эту же идею под Windows и разместить здесь все исходники.
Программка реализована стопроцентно просто. Она запускается, впадает в спячку до наступления времени хх:59:59, после чего судорожно начинает считать миллисекунды, и ровно в хх:00:00 хх-раз вызывает функцию выпуска-вставки cd-rom’а. После этого программка вновь засыпает в ожидании лучших времён. Использование памяти — незначительно, загрузка процессора — нулевая. Если прописать это чудо в автозагрузку, то будет просто замечательно …)
Для тех, кто искал, каким образом можно управлять впуском-выпуском сидюшника:
Функция, с помощью которой можно выдвинуть и задвинуть лоток CD-ROM’а — mciSendString() . Она объявлена в mmsystem, поэтому не забудьте дописывать #include <mmsystem.h> в проекте.
Строки, отвечающие за открытие и закрытие лотка: «set cdaudio door open» и «set cdaudio door closed».
Подробнее смотрите в исходном коде программы …
Для интересующихся, вот собственно исходный код программульки:
#include <windows.h> #include <mmsystem.h> #include "resource.h" void kuku(int kukus) { LPCTSTR command_door_open = "set cdaudio door open"; LPCTSTR command_door_close = "set cdaudio door closed"; for (int i = 0; i < kukus; i++) { mciSendString(command_door_open, 0, 0, 0); // open tray PlaySound("KuKu", 0, SND_RESOURCE | SND_ASYNC); // play sound mciSendString(command_door_close, 0, 0, 0); // close tray } } int __stdcall WinMain(HINSTANCE hModule, HINSTANCE, LPSTR , int) { SYSTEMTIME the_now; int time_to_sleep; while (1) { GetSystemTime(&the_now); if (the_now.wMinute == 0) { kuku(the_now.wHour); Sleep(3580000); } else if (the_now.wMinute == 59) { if (the_now.wSecond < 55) { Sleep(5000); } else { Sleep(250); } } else { time_to_sleep = (59 - the_now.wMinute) * 60; Sleep(time_to_sleep); } } return 0; }
Это всё! А можно и ещё меньше сделать, при желании …
Дополнительно, я публикую все материалы по этой программке, думаю, по названиям будет не сложно разобраться, что есть что …
- kuku-src.zip — исходные коды программы для C++
- kuku-exe.zip — сама программка, уже скомпилированная
Звуки часов с кукушкой kuku.au и kuku.wav
У меня часто пытаются отыскать хорошие звуки часов с кукушкой. Специально для всех страждущих:
Надеюсь, это будет полезно)
Если кому-то это было полезно, очень рад) Если же у кого есть критика, дополнения или идеи — рад буду выслушать)
Скомпилировано в Visual Studio 2008 по лицензии ФЭТ МГУ им.Н.П.Огарёва.