Третий час ночи, в окно с улицы тускло светит одинокий фонарь, оставляя блик на вашем мониторе. А Вы, надежно устроившись на любимом стуле, приросшем к полу, общаетесь с любимым домашним животным ПК, временами вяло волоча мышь по коврику… Но внезапно возникает необходимость вставить диск в Ваш CD. Но ведь это такое сложное физическое упражнение (тем более в три часа ночи :-))… Что же делать?!
Ну что ж, можно попробовать решить проблему хотя бы отчасти заставить CD-ROM открыться (а потом, соответственно, и закрыться) с помощью мыши. Нет, для этого нам не понадобится привязывать шнурок к мышке и к лотку CD-ROM’а, достаточно будет написать маленькую чудесную программку. В этот момент заядлые интернетчики наверняка скривились или ухмыльнулись мол, подобную софтину можно без особого труда скачать! Да-да, уважаемые инетовцы, вы абсолютно правы, но какое счастье написать эдакую прогу самому, а впоследствии все глюки и ошибки программы сваливать не на кого-то, а на себя (то есть, на меня :-)). Если я вас хоть немного убедил, то идем дальше.
Предлагаю писать на Borland Delphi 5, так как это, пожалуй, самая распространенная и понятная среда визуальной разработки приложений (это всего лишь мое скромное мнение :-)). Отмечу, что если вам ближе C++, то вы без особого труда можете переписать нашу программу в Borland Builder 5, изменив некоторые нюансы. Сразу скажу, что нам понадобится библиотека компонентов RX-Lib, которая по праву признана одной из лучших; она вам может пригодиться в дальнейшем еще неоднократно. Скачать ее можно здесь: http://www.rxlib.ru/arh/Comp/rxlib275.zip(1.2 Мб). Все вопросы по установке библиотеки вы найдете в текстовых файлах скачанного пакета (здесь проблем возникнуть не должно :-)).
И вот вы открыли Delphi. У вас перед глазами новая, еще невинная форма (Form1), на которую необходимо положить следующие компоненты (Рис. 1) из Палитры:
PopupMenu на вкладке Standard;
ImageList на вкладке Win32;
RxTrayIcon на вкладке RX Tools (этот компонент нам и нужен был из RX-Lib).
Теперь необходимо установить некоторые свойства наших компонентов (они располагаются на вкладке Properties в окне Object Inspector). Двойным щелчком по PopupMenu1 открываем редактор менюшек, где добавляем два новых пункта Exit и CD (Рис. 2).
Сейчас нам понадобится две иконки размером 1616, которые будут сменяться в трее в зависимости от состояния CD (открыт/закрыт). Вы можете взять стандартные иконки, устанавливаемые вместе с Delphi, или порыться в закромах своего HDD (в этом вам может значительно помочь IconToy, как раз для этого предназначенный), или же нарисовать самому (страшное занятие не рекомендую :-)). Если иконки обнаружились, тогда кликаем два раза по ImageList1 и появившемся окне добавляем (Add) наши иконки (Рис. 3). Кстати, лучше вначале поставить иконку закрытого CD, а потом уже открытого, чтобы не изменять текст программы.
И наконец, меняем свойства компонента RxTrayIcon1: В свойстве PopupMenu пишем PopupMenu1, а в свойстве Hint всплывающую подсказку, которая будет ужасать пользователя, если тот задержит мышь над нашей прогой :-).
Остались детали написать текст программы :-). Далее я буду приводить тексты модулей, а измененные участки комментировать.
Жмем Ctrl+F12 и выбираем главный модуль проекта, куда втискиваем следующие три строки (как я уже сказал, они отмечены комментариями):
Настоятельно рекомендую на этой стадии не запускать наше приложение, так как оно будет напоминать приведение его нигде не будет видно :-). Но если Вы любитель паро-нормальных явлений :-), тогда советую в окне Delphi нажать Ctrl+F2 это поможет обнаружить невидимку.
Главный модуль изменен надлежащим образом, а теперь в окне редактора выбираем вкладку Unit1 и производим следующий апгрейт:
Как вы уже догадались, основная функция открытия и закрытия лотка это API-функция mciSendString из модуля MMSystem, которая просит систему открыть первый по умолчанию аудиодиск. Так как аудиодиском может являться любой CD-привод, то она просто открывает или закрывает CD-ROM. Чтобы открывать не первый CD, а тот, который вы указали сами, необходимо строить свою процедуру, также использующую API-функции. Если вас заинтересовал этот вопрос, то советую скачать русский help по API-функциям, который лежит по адресу http://nikolayam.narod.ru/api_help.zip(290 Кб).
Процедуры, реагирующие на события (клик по иконке в трее и т.д.) мы уже написали, теперь было бы не лишним их связать между собой. Для этого возвращаемся к Object Inspector’у, открываем вкладку Events и в выпадающем списке выбираем объект, указывая событие:
объект Form1, событие OnCreate устанавливаем в FormCreate;
объект CD1, событие OnClick в CD1Click;
объект Exit1, событие OnClick в Exit1Click.
объект RxTrayIcon1, событие OnClick в RxTrayIcon1Click.
Самое легкое позади :-), теперь закрываем глаза, нажимаем F9 и молимся. Если все прошло гладко, тогда можете не ругать меня, если же выскочила ошибка, то сначала проверьте текст :-). После запуска (надеюсь, он свершился) в трее появится иконка нашей, пардон, Вашей программы (Рис. 4), и если Вы кликнете по ней, то… «Сидюк, откройся!»
Готовый экзешник можно кинуть в автозагрузку. Вот мы и убили двух зайцев создали сами программу и облегчили себе жизнь, хотя бы такой мелочью :-).