JavaScriptпозволяет использовать как одиночные, так и двойные кавычки. Строка должна находиться между двойных кавычек, а внутренние одиночные кавычки указывают значение атрибута. Т. е., если при написанииJavaScript-необходимо использовать дополнительные кавычки внутри двойных кавычек,находящихся в строке, они должны быть одиночные. Внутренние кавычки одиночные,внешние –двойные.
Значение innerHTMLявляется HTML-кодом, который, при помощи языка JavaScript, помещается в тег <div>. Соответственно,отображение HTML-страницы изменится.
Снова сохраняем проект,переходим в браузер, запускаем страницуindex.html, введём правильный логин и пароль.
Записываем логин –Javaи пароль –2012, нажимаем"Вход". Появилась надпись "Добро пожаловать!".
Далее загружаетсяJava-апплет,значит, ошибок в программном коде нет.Полностью программный код нашей страницы с добавленным JavaScript выглядит так:
Таким образом, при помощи языка JavaScriptможно делать любые манипуляции сHTML-кодом, со страницей, изменять её, так называемым,динамическим образом.
В реальной практике вход через логин и пароль, проверяемые изJavaScript, не используется. Логин и пароль должны проверяться на web-сервере. Мы рассмотрели этот метод, скорее, как демонстрацию использования языка JavaScript. В нашем случае логин и пароль проверяются в браузере, на клиентской машине. Такая проверка не надёжна. Если злоумышленник хочет куда-нибудь проникнуть, он сможет, при желании, отключить JavaScriptв браузере. В этом случае JavaScript вообще не будет выполняться.
Поэтому обычно когда логин и пароль вводятся в соответствующие поля, нажимается кнопка "Вход", обработка логина и пароля происходит уже на web-сервере и не средствами языка JavaScript, а средствами, например, языкаPHP, Javaили C#.Мы не использовали, так называемый серверный программный код, мы использовали HTML, CSSи JavaScript.
Таким образом, JavaScript,взаимодействуя с пользователем в браузере,выполняет некоторые вспомогательные функции. При помощи JavaScriptможно написать и компьютерную игру, работающую в браузере.Можно реализовать программу, содержащую две основные составляющие, два блока: в браузере на клиентской машине работает программный код, написанный на JavaScript, а на web-сервере работает другой программныйкод,написанный вовсе не на JavaScript, а, допустим, на языке Java.
На этом занятии мы познакомимся с реестром Windows и начнем создавать поздравительное приложение – блокировщик. Приложение – блокировщик при запуске операционной системы блокирует экран, и пользователь не может прервать или закрыть это приложение.
Для создания поздравительного блокировщика нам нужно будет познакомиться с РеестромWindows, выяснить его сновное предназначение и принцип работы.
Реестр–это большое хранилище, своего рода база данных, в которой хранятся все настройки операционной системы, информация обо всех установленных приложениях и их настройках, информация о настройках оборудования, а также о настройках пользователей, и их предпочтениях.
Сначала немного поговорим об истории появления реестра и о том, что предшествовало его появлению.
Начиная с операционной системы MS-DOS,появившейся раньше Windows, для хранения информации использовался файл CONFIG.SYS. Именно в этот файл записывались основные настройки конфигурации, загружаемые при загрузке операционной системы MS-DOS. Тогда настроек было значительно меньше, файла CONFIG.SYS вполне хватало. С выходом первых новых операционных систем,в частности Windows 3.1,для этих целей уже использовался файл WIN.NI. В него записывались настройки конфигурации операционной системы Windows.
И, наконец, с выходомWindows 95, появился реестр, используемый и сегодня. Реестр физически находится в нескольких файлах.
Откроем реестр,посмотрим, как он выглядит. Для этого воспользуемся командой regedit, открывающей редактор по работе с реестром. Нажимаем на кнопку "Пуск"и выбираем команду "Выполнить". Если эта команда отсутствует в списке(см. рис.6.1), необходимо при помощи настройки отобразить её в списке.
Рис. 6.1
Для этого в правой части окна нажимаем правую клавишу мыши(см. рис. 6.2), нажимаем на"Свойства".
Рис. 6.2
Сверху выбираем закладку "Меню "Пуск"(см. рис.6.3).
Рис. 6.3
Здесь мы нажимаем кнопку"Настроить"(см. рис.6.4):
Рис. 6.4
Теперь переходим на закладку "Дополнительно"(см. рис. 6.5).
Рис. 6.5
Здесь присутствует список того, что отображается в меню"Пуск". Пролистываем этот список и находим команду "Выполнить". Устанавливаем галочку (см. рис. 6.6), нажимаем "ОК", ещё раз "ОК".
Рис. 6.6
Появилась команда"Выполнить". Для операционной системы Windows 7эта настройка производится похожим образом.
Если данная команда отображается по умолчанию, её сразу нужно запустить (см. рис. 6.7):
Рис. 6.7
Здесь необходимо ввести команду, запускающую редактор реестра,команду regedit.Набираем regedit(см. рис. 6.8),нажимаем клавишу Enter, открывается редактор реестра.
Рис. 6.8
Редактор реестра представляет из себя два окна (см. рис. 6.9).
Рис. 6.9
В левой части находятся,так называемые, главные ветви реестра, или глобальные ветви. Эти ветви являются корневыми, они неизменны. Их нельзя ни удалять, ни модернизировать.Охарактеризуем вкратце корневые ветви. Мы видим пять корневых ветвей реестра.
Первая ветвь: HKEY_CLASSES_ROOT.
В этой ветви реестра прописаны расширения файлов, используемые в операционной системе, также прописано соответствие, какие приложения могут открывать какие типы файлов; представлены настройки некоторых приложений.
Вторая ветвь –HKEY_CURRENT_USER.
В ней содержатся настройки текущего пользователя.
Третья ветвь: HKEY_LOCAL_MACHINE.
Эта ветвь объемна, она содержит много информации. Здесь находится информация по всем настройкам, связанным с компьютером.
Четвёртая ветвь – HKEY_USERS.
В ней содержатся предпочтения пользователей.
И, наконец, пятая ветвьHKEY_CURRENT_CONFIG.
Содержит настроечную информацию об оборудовании.
Реестр представляет собой древовидную структуру, напоминающую файловую систему: если открыть глобальную ветвь реестра, можно увидеть список папок,напоминающих директории файловой системы.Эти папки называются ветвями реестра. Они не являются корневыми, их можно изменять,переименовывать, удалять или добавлять новые.
При вхождении в каждую новую ветвь, мы продвигаемся дальше по древовидной структуре. Архитектура здесь такая же, как у файловой системы.
В глобальной ветви реестра по умолчанию отображается пять ветвей, всего в реестре их семь. Две ветви не отображаются в редакторе реестра, т. к.предназначены для несколько иных целей, но они доступны из языка программированияJava.
Редактор реестра позволяет работать с реестром в качестве администратора, менять настройки.
Вносить изменения в реестр можно также из программного кода из языка Java:добавлять ветви реестра, удалять их,переименовывать, делать другие манипуляции.
Основной функционал реестра–это ветви реестра.
Если зайти глубже,открыв очередную ветвь, можно увидеть, что ветви реестра содержат вложенную информацию, называемую параметры реестра.
В списке ветвей внутриCurrentVersion находим ветвь Run.
Для того чтобы получить доступ к какой-то ветви, нужно знать к ней путь. Путь к ветви реестра Runзаписывается следующим образом:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run.
Ветви реестра здесь разделяются точно так же, как папки файловой системы при указании пути к файлу.
Таким образом, ветвь можно ассоциировать с директорией файловой системы. Внутри каждой ветви находится, так называемые, параметры(см. рис. 6.10).
Рис. 6.10
Если продолжать аналогию с файловой системой, параметры можно сравнить с файлами. В каждой папке,т.е. в каждой ветви реестра находятся параметры, напоминающие файлы.
В каждой ветви реестра по умолчанию обязательно присутствует один, самый верхний, параметр, ему значение не присвоено. Остальные параметры могут либо отсутствовать (как и файлы внутри папки), либо присутствовать в разных количествах, могут быть разных типов.
Мы открыли эту ветвь реестра (см. рис. 6.11), т.к. именно в ней прописывается,список приложений, автоматически загружаемых при старте операционной системы.
Рис. 6.11
Мы находимся в глобальной ветви HKEY_LOCAL_MACHINE,следовательно, загрузка будет происходить для всех пользователей этого компьютера.
Сейчас в списке четыре программы, они будут автоматически загружаться при старте Windows(см.рис. 6.12).
Рис. 6.12
Что представляет собой параметр? Параметр состоит из трёх составляющих:
1. Имя параметра. В некоторых случаях имя параметра может быть любым, иногда ему присваивается определённое значение.
2. Тип параметра. Типы параметров напоминают типы переменных языка Java, они могут быть числовыми, или, например,строкового типа –типа stringиз языка Java. В данном случае, REG_SZ–строковый тип (см. рис.6.13).
Рис. 6.13
3. Значение параметра– полный путь к программе, запускаемой при старте операционной системы. (см.рис. 6.14).
Рис. 6.14
Таким образом, в редакторе реестра можно добавить новый параметр и указать путь к программе, нужной для автоматической загрузки.
Так мы и сделаем, когда будем создавать блокировщик Windows. Именно в эту ветвь реестра пропишем путь к окончательному варианту запускаемого Java-архива. Тогда, при старте операционной системы, запуск блокировщика будет происходить автоматически. Пользователь не увидит свой привычный рабочий стол, он будет автоматически прикрываться блокировщиком.
Как мы уже знаем, реестр–это большое хранилище, в котором можно менять различные настройки. Настройки можно менять как из редактора реестра, так и из языка Java.
Например, при помощи реестра можно отключить USB-накопители. После перезагрузки операционной системы USB-накопители тогда станут недоступны.
Если пользователь отключит все ярлыки рабочего стола, при загрузке он будет видеть пустой рабочий стол.
Если, например,отключить пользователю возможность выключения операционной системы, у него будет отсутствовать соответствующаякнопка в панели "Пуск"и в Диспетчере задач.
Можно, при желании,поменять фон, появляющийся по умолчанию.Как правило, по умолчанию он белый, можно сделать его, скажем, красным. Фон некоторых окон, в том числе и сайтов, может стать красным и в браузере, если на сайтах не было сделано специальной установки конкретно цвета.
Для того чтобы пользоваться реестром Windows, достаточно иметь по нему справочное руководство. Это может быть справочник по реестру Windows, другая литература, некоторую информацию можно получить в Интернете.
Для того чтобы сделать в реестре дополнительную настройку,достаточно знать, в какой именно ветви необходимо изменить параметры, отвечающие за нужную настройку.
В нашем случае,параметры отвечают за путь к программам,которые должны запускаться автоматически.К реестру Windowsмы ещё вернёмся, а сейчас перейдём к созданию приложения "БлокировщикWindows".
Закроем редактор реестра и откроем студию разработки Eclipse. Здесь мы начнём создавать приложение для блокированияWindows.
Приложение будет поздравительным, дружелюбным к пользователю. Мы выведем поздравление и предложим пользователю ввести имя для отключения блокировщика.
Привычным способом создадим новый проект: нажимаем Файл–Создать проект Java,называем lesson18,нажимаем кнопку "Готово". В списке появляется папка с проектом.Наводим мышку на эту папку, нажимаем правую клавишу, выбираем Создать–Класс, указываем имяprogи ставим галочку public static voidmain, чтобы автоматически создался метод mainдля запуска приложения.
Комментарии,появившиеся по умолчанию, можно удалить, в них нет необходимости. В файле prog.javaмы создадим блокировщик.
Перед написанием программного кода определимся с постановкой задачи. На компьютере пользователя при запуске открывается окно блокировщика. При этом должны выполняться следующие условия:
1. Окно должно занимать весь экран,тогда пользователь не сможет получить доступ к другим окнам и снять блокировщик.Таким образом, ширина и высота окна должны быть обязательно равны текущему разрешению экрана. Допустим, если разрешение 800х600, соответственно, и окно должно быть именно 800х600,тогда на любом компьютере оно всегда будет занимать полный размер экрана. Поэтому ширину и высоту окна мы будем настраивать по разрешению экрана, установленному пользователем. Будем его определять из языка Java, и эти характеристики используем для настройки окна.
2. Окно не должно содержать верхнюю панель с кнопками для возможности закрытия окна (крестик вверху справа). Если мы оставим эти кнопки, пользователь сможет крестиком закрыть окно. Нужно, чтобы окно невозможно было закрыть, не введя имени,поэтому будем выводить окно без верхней панели, отображающей, в том числе, и название самого окна. В этом случае окно всегда будет занимать полностью весь экран, перекрывать нижнюю панель, где обозначена кнопка "Пуск", а также закладки со всеми открытыми приложениями.
3. Окно должно быть всегда поверх других окон, иначе пользователь сможет вызвать другое приложение и сбросить наше окно, например, при помощи Диспетчера задач.Поэтому, после запуска нашего приложения,будем запускать таймер, срабатывающий,например, 100 раз в секунду. Таймер обеспечит постоянное нахождение окна блокировщика поверх других окон. Если пользователь попытается вызвать, например, Диспетчер задач, окно блокировщика будет сразу же переноситься наверх и перекрывать окно Диспетчера задач. Это действие должно происходить постоянно. Поместим его в таймер, начинающий работать сразу же при запуске приложения.
4. Пользователь не должен иметь возможности закрыть приложение при помощи клавиш Alt+F4. (Alt+F4–комбинация клавиш для закрытия приложений, используемая вWindowsвместо крестика). Таким образом, при попытке пользователя закрыть приложение при помощи клавиш Alt+F4, мы будем вызывать метод, вновь отображающий окно блокировщика, т. е.вместо закрытия, окно будет воспроизводить себя ещё раз.
Этих мер достаточно,чтобы пользователь смог убрать блокировочное окно только после выполнения предоставленного ему условия, в нашем случае –введя имя пользователя.
Итак, создадим приложение блокировщик.
Сначала реализуем сам интерфейс окна: создадим окно с нужными размерами, поместим на него нужные поздравительные надписи, текстовое поле и кнопку для того, чтобы пользователь мог на неё нажать при вводе имени.
Затем создадим основные настройки: окно должно соответствовать по размерам ширине и высоте экрана и по умолчанию находиться поверх других окон.
И, наконец, выведем это окно на экран, протестируем, закроется оно или нет при вводе имени.
На этом основывается первая часть приложения –в ней пока не будут реализованы защитные действия от сброса окна. Эти действия мы добавим в приложение на следующем занятии и пропишем приложение в реестр, тогда при загрузке операционной системы пользователь будет видеть блокировщик.
Приступим к написанию программного кода. Сначала, при помощи команды import,подключим три уже знакомые нам библиотеки.
Напомним, что javax.swing.* -библиотека, отвечающая за работу с окнами.Для создания окна типа JFrame, необходимо подключить эту библиотеку.
Далее, подключаем вторую библиотеку java.awt.*-библиотеку,добавляющие некоторые возможности по работе с окнами и графикой.
И наконец, библиотекаjava.awt.event.* (Event– событие). Эта библиотека необходима для работы с обработчиками событий, таких, например, как работа таймера или обработка события при закрытии окна. В процессе работы с окном постоянно происходят какие-то события,третья библиотека нужна для возможности их обработки.
// Подключение библиотек
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
// Главный класс программы
public class prog {
// Метод запуска приложения
public static void main(String[] args) {
}
}
Библиотеки подключены,начнём писать основное приложение.Создадим объект на основании класса,который реализуем ниже.
// Подключение библиотек
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
// Главный класс программы
public class prog {
// Метод запуска приложения
public static void main(String[] args) {
// Создание объекта окна
okno myOkno = new okno();
}
}
В приложении будут два класса –первый уже присутствует, он имеет наименование progи запускает программное исполнение.
Второй класс будет реализовывать блокировочное окно. Назовём его okno.
Таким образом,добавленная строка создаст объект типаokno. Это объект,который будет создаваться на основании класса, реализуемого ниже (строки выделены жирным шрифтом):
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
// Главный класс программы
public class prog {
// Метод запуска приложения
public static void main(String[] args) {
// Создание объекта окна
okno myOkno = new okno();
}
}
// Класса окна наследуется от JFrame
class okno extends JFrame
{
}
Мы создали класс, в нём будет реализовываться окно. Класс наследуется от JFrame. Таким образом, после наследования сам класс уже становится окном. Он получает все возможности, доступные для окна Windows. А в методе mainсразу создается объект на основании этого класса. Его тип совпадает с именем класса okno, это название переменной, отвечающей за окно. Название переменной может быть и другим. И, наконец,в правой части создается само окно,отображаемое на экране. Необходимо прописать все настройки, связанные с окном.Далее весь программный код мы будем записывать в классе okno.Сначала определим название переменных.
Первая переменнаяrTimer, тип переменной –Timer. С Timerмы уже знакомы,неоднократно его использовали. В данном случае, Timerнеобходим для постоянного перемещёния окна блокировщика поверх других окон.Timerбудет производить эту операцию многократно,запускаться он будет при старте приложения.
Следующая переменнаяtext, текстовое поле,находящееся на окне. Тип текстового поляJTextAria. Данное текстовое поле –имя, вводимое пользователем,которое будет проверяться, прежде чем снимется окно блокировщика.
И, наконец, последняя переменная flagExit. Переменная логического типа boolean. Эта переменная будет отвечать за следующее: до тех пор,пока переменная равна false(ложь),пользователь не сможет закрыть окно, оно снова будет выводиться на экран. Если же пользователь в текстовое поле вводит имя правильно, эта переменная меняется на true (истина), пользователь сможет закрыть окно. Таким образом, эта переменная даёт возможность закрыть окно только тогда, когда пользователь правильно ввел своё имя.
// Переменная таймер
private Timer rTimer;
// Переменная текстовое поле
// для ввода-вывода
private JTextArea text;
// Переменная, признак того,
// что окно можно закрыть
private boolean flagExit=false;
Теперь реализуем метод под названием setWindow_. Метод setWindow_будет вызываться в момент создания окна. Этот метод создаёт окно, задаёт его размеры, его основные настройки и отображает окно на экране. Некоторые команды, используемые внутри этого метода,нам уже знакомы.
Давайте подробно рассмотрим программный код этого метода.Первые три строки метода необходимы для того, чтобы задать окну именно ту ширину и высоту, которые является разрешением экрана. Допустим, разрешение экрана800х600,размеры окна устанавливаются 800х600.
// Две строки для определения текущего
// разрешения экрана пользователя
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension dm = tk.getScreenSize();
// Задание размеров окна, чтобы оно
// закрыло полностью весь экран
setBounds(0,0,dm.width,dm.height);
Команда setBoundsотвечает за установку угловой точки окна, за его ширину и высоту.
В нашем случае угловую точку обязательно установим 0–ноль, чтобы окно начиналось с верхнего левого угла, т.е.экран закрывался полностью.
Характеристики –ширина и высота–именно те,которые являются текущим разрешением экрана.
Эти строки, как раз и отвечают за определение этого разрешения.
Для возможности определить текущее разрешение экрана,воспользуемся классом Toolkit.
На основании этого класса создаём переменную, указываем её имя, оно может быть любым. И, используя команду getDefaultToolkit(), получаем текущие настройки.Текущие настройки позволяют определить ширину и высоту экрана, установленные у пользователя.
Dimension dm = tk.getScreenSize();
Эта строка позволяет из этих настроек получить конкретную,интересующую нас настройку при помощи команды getScreenSize.get–получить, Screen–экран, Size–размер, т. е.,получить размеры экрана.
После того, как размеры экрана получены, они помещаются в переменную под названием dm, тип переменнойDimension.
Dimension–тип,представляющий собой разрешение. Он имеет две основные характеристики –ширина и высота.Обращаясь к этой переменной под названиемdmчерез оператор точка (.) , можно получить widthи height–ширину и высоту экрана. В зависимости от разрешения экрана эти значения будут разными, и они всегда будут соответствовать установленным у пользователя.
Таким образом, строка с методом setBoundsсоздаcт окно нужного размера.
Эту часть программного кода стоит сохранить в списке рецептов программирования и, при необходимости получить размеры экрана, заданные у пользователя, воспользоваться этими строками программного кода.
Следующие две строки программного кода устанавливают минимальный и максимальный размер окна:
// Установка минимального возможного
// размера окна - размер экрана
this.setMinimumSize(dm);
// Установка максимального возможного
// размера окна - размер экрана
this.setMaximumSize(dm);
Пользователь не должен менять размеры окна. Если обычное окноWindowsможно менять по ширине и высоте, в нашем случае мы не даём пользователю возможности при помощи команд setMinimumSize, и setMaximumSize установить минимальный и максимальный размер. Этим методам мы передаём в виде параметра значение переменной dm, представляющей текущее разрешение экрана.
Таким образом, если размер окна 800х600, то минимальный и максимальный размеры будут так же устанавливаться800х600.
Перед вызовом методов было использовано слово this ("этот"). Слово thisговорит о том, что идёт обращение к объекту, создаваемому на основании этого класса. В данном случае,это окно. Словоthisговорит об обращении именно к этому окну,характеристики устанавливаются именно ему.
Слово thisпо умолчанию можно не использовать. Но оно часто дает удобное восприятие, программист понимает, что речь идет именно об этом объекте, внутри класса которого он находится.
Таким образом, все команды, представленные в выделенном блоке, могут быть записаны как с словомthis, так и без него.