Docsity
Docsity

Подготовься к экзаменам
Подготовься к экзаменам

Учись благодаря многочисленным ресурсам, которые есть на Docsity


Получи баллы для скачивания
Получи баллы для скачивания

Заработай баллы, помогая другим студентам, или приобретай их по тарифом Премиум


Руководства и советы
Руководства и советы

Настройка Windows по средствам системного реестра курсовая 2010 по информатике , Дипломная из Информатика

Настройка Windows по средствам системного реестра курсовая 2010 по информатике

Вид: Дипломная

2016/2017

Загружен 12.04.2017

refbank3742
refbank3742 🇷🇺

5

(1)

10 документы

1 / 62

Toggle sidebar

Сопутствующие документы


Частичный предварительный просмотр текста

Скачай Настройка Windows по средствам системного реестра курсовая 2010 по информатике и еще Дипломная в формате PDF Информатика только на Docsity! Оглавление Введение Постановка задачи 1. Анализ предметной области 1.1 Описание API-функций работы с реестром 1.2 Описание API-функций работы с потоками 2. Описание программной реализации 2.1 Описание структуры программы 2.1.1 Диаграмма взаимодействия модулей 2.1.2 Описание структуры модулей 2.2 Функции модуля MiniReg 2.3 Функции основного модуля (Unit1) 3. Программная реализация 3.1 Модуль работы с реестром (MiniReg) 3.2 Основной модуль программы (Unit1) Интерфейс программы Заключение Используемая литература Введение Данный курсовой проект рассказывает о возможностях настройки, одной из наиболее распространенных, на сегодняшний день, операционных систем Windows®, поставляемой Американской корпорацией Microsoft®. Windows® - это мульти задачная операционная система для рабочих станций PC (Personal Computer). Основной идеей, которой является организация взаимодействия пользователя одновременно с несколькими приложениями и прозрачная работа с аппаратными средствами. Но это тема уже другого курсового проекта, а сейчас речь пойдет о возможностях настройки операционной системы Microsoft® Windows® при помощи, так называемого, системного реестра. О том, что же такое системный реестр и с чем его едят речь пойдет в разделе анализа предметной области. Здесь будет рассказано что представляет из себя системный реестр (далее просто реестр), и почему Microsoft рекомендует хранить сторонним фирмам хранить настройки своих программ в реестре операционной системы (далее ОС), а не в INI-файлах. Как можно использовать системный реестр, чтобы изменить настройки ОС "под себя" и ускорить или оптимизировать её работу на примере (который я назвал MiniTweaker), будет вкратце изложено в разделе постановки задачи. Описание примера и алгоритмы его работы будет сделано в разделе анализа поставленной задачи. О программной реализации MiniTweaker-а пойдет речь в разделе описания программной реализации, а его исходный текст можно найти в соответствующем разделе (исходный текст программы). Подведение итогов, анализ полноты решения задачи курсового проекта и возможностях использования его данных в других "жизненных" задачах рассказывается в заключении. чтение и запись можно выполнять в одном потоке, но для разных круп настроек. 1. Анализ предметной области Системный реестр Windows – это общедоступная база данных, хранящая индивидуальную для каждого компьютера настроечную информацию, используемую программным обеспечением и самой системой. Данные в реестре упорядочены в древовидные структуры, состоящие из узлов, которые в терминологии Windows называются ключами. Каждый ключ имеет один родительский ключ, один или несколько дочерних ключей и ноль или несколько параметров типа имя_параметра =значение. Исключение представляют корневые ключи (они не имеют родителей) и дочерние ключи низшего уровня (они не имеют дочерних ключей). По умолчанию несистемное ПО регистрирует свою информацию в корневом ключе с именем HKEY_CURRENT_USER. Получить доступ к реестру можно написав в командной строке ("ПУСК > "Выполнить") слово "RegEdit" - при этом запуститься программа для редактирования реестра. Окно этой программы поделено на две части. В левой (более узкой панели) показана древовидная структура ключей. Сами установки называются параметрами, находящимися в правой панели. Каждый параметр имеет своё имя, значение и тип. Параметры бывают строкового типа, двоичного и типа DWORD. Их очень много, но их назначение зависит от того, в каком ключе находится той или иной параметр. Ключи делятся между шестью основными разделами: • HKEY_CLASSES_ROOT – Содержит информацию об OLE, операциях перетаскивания (drag-and-drop - с англ. перетащить-и-отпустить) и ярлыках. В данном разделе можно так же указать программы, запускаемые при активизации файлов определённого типа. Данный раздел является псевдонимом для ветви HKEY_LOCAL_MACHINE\Software\Classes • HKEY_CURRENT_USER – Содержит индивидуальные установки для каждого пользователя, зарегистрированного в системе. Данный раздел является псевдонимом для ветви HKEY_USERS • HKEY_LOCAL_MACHINE – Содержит аппаратные и программные установки, необходимые для функционирования оборудования и программ. Данный раздел так же хранит конфигурацию Windows. • HKEY_USERS – Содержит установки пользователей и соответствующие конфигурационные данные, такие как цвет окна, расположение элементов на рабочем столе, обои, заставки. • HKEY_CURRENT_CONFIG – Содержит информацию о текущем аппаратном профиле. Если вы не используете аппаратные профили, данный раздел содержит установки Windows по умолчанию. • HKEY_DYN_DATA – В отличие от других разделов, которые хранят статистические данные (неизменяющиеся во время сеанса), данный раздел содержит указатели на динамические данные (постоянно изменяющиеся во время работы компьютера). Windows использует данный раздел для отслеживания профилей оборудования plug-and-play, статистики по производительности и драйверов виртуальных устройств VxD. Все данные системного реестра заключаются в двух файлах, находящихся в директории Windows - это System.dat и User.dat. Работа с реестром при помощи её же средств осуществляется с помощью ряда API-функций специально предназначенных для этого. Ниже приведен их краткий список и описание. 1.1 Описание API-функций работы с реестром Создать подраздел в реестре: RegCreateKey (Key:HKey; SubKey: PChar; var Result: HKey): Longint; • Key - указывает на "корневой" раздел реестра, в Delphi1 доступен только один - HKEY_CLASSES_ROOT, а в Delphi3 - все. • SubKey - имя раздела - строится по принципу пути к файлу в DOS (пример subkey1\subkey2\ ...). Если такой раздел уже существует, то он открывается. • lpValueName - буфер для названия значения • lpcbValueName - размер lpValueName • lpReserved должно быть всегда 0 • lpType - буфер для названия типа (int) • lpData - буфер для данных • lpcbData-размер для lpData Примечание: При каждой новом вызове функции после предыдущего нужно заново переназначить lpcbValueName. { lpcbValueName = sizeof(lpValueName) } 1.2 Описание API-функций работы с потоками Создать потока: function CreateThread( lpThreadAttributes: Pointer; // Указатель на атрибуты защиты потока dwStackSize: LongWord; // Размер стека, в байтах lpStartAddress: TThreadFunc; // Указатель на функцию потока lpParameter: Pointer; // Атрибут для нового потока dwCreationFlags: LongWord; // Флаги создания var lpThreadId: LongWord // Указатель на возвращаемый // идентификатор потока ): Integer; Создание отдельного потока выполнения: function BeginThread( SecurityAttributes: Pointer;// Указатель на атрибуты защиты потока StackSize: LongWord; // Размер стека, в байтах ThreadFunc: TThreadFunc;// Указатель на функцию потока Parameter: Pointer;// Артибуты потока CreationFlags: LongWord;// Флаги создания var ThreadId: Cardinal// Указатель идентификатор потока ): Integer; Завершение выполнения потока: procedure EndThread(ExitCode: Integer); завершает поток с указанным ExitCode Немедленное прекращение выполнения потока: TerminateThread( hThered: Cardinal;// Указатель на завершаемый поток dwExitCode: Cardinal// флаги выхода ); Атрибуты защиты потока: • CREATE_SUSPENDED – Поток создается в приостановленном состоянии и не выполняется, пока Windows API функция ResumeThread не будет вызвано. Если этот флаг не включен, новый поток начинает выполняться сразу при создании. • STACK_SIZE_PARAM_IS_A_RESERVATION – Параметр StackSize определяет размер стека для потока. Если этот флаг не включен, новый поток назначен заданный компоновщиком по умолчанию размер стека. 2. Описание программной реализации 2.1 Описание структуры программы 2.1.1 Диаграмма взаимодействия модулей Программа реализована на 2х модулях, один из которых базируясь на API-функциях Windows осуществляет взаимодействие с системным реестром, а второй предоставляет информацию пользователю о текущих значениях предопределенных параметров, и заносит сделанные пользователем изменения параметров в системный реестр. Вот как это выглядит: Вызов функция 2.1.2 Описание структуры модулей Модуль MiniReg не несет функциональной нагрузки, все функции описанные в нем являются лишь надстройками над WinAPI для упрощения их использования. Описание функций модуля можно найти в разделе "Функции модуля MiniReg". Посему следует отметить линейность структуры модуля и его функций, поэтому описание взаимодействия функций в модуле нет (все взаимодействия осуществляются через параметры), поэтому структуру модуля я не привожу. Модуль Unit1 является модулем главной (и единственной) формы приложения. Тем не менее все элементы относящиеся к форме не несут функциональной нагрузки, относящейся к решения поставленной задачи и лишь выполняют вспомогательные функции (например: выбор изображения для установки его в качестве фонового, или сохранение текущего фонового изображения в произвольном графическом файле). Все функции возложены на три потока, соответствующих трем основным вкладкам. В функции 6..b Назначение: Получение ключа Name ветви корня RootKey текстового значения Value, и возврат true, в случае успешного получения данных. 6..c Входные параметры: RootKey, Name 6..d Выходные параметры: Value 7. Функция RegGetMultiString: 7..a Заголовок: function RegGetMultiString (RootKey: HKEY; Name: String; var Value: Cardinal): boolean; 7..b Назначение: Получения ключа Name ветви корня RootKey много строкового значения Value, и возврат true, в случае успешного получения данных. 7..c Входные параметры: RootKey, Name 7..d Выходные параметры: Value 8. Функция RegGetDWORD: 8..a Заголовок: function RegGetDWORD (RootKey: HKEY; Name: String; var Value: Cardinal): boolean; 8..b Назначение: Получение ключа Name ветви корня RootKey целочисленного значения Value, и возврат true, в случае успешного получения данных. 8..c Входные параметры: RootKey, Name 8..d Выходные параметры: Value 9. Функция RegGetBinary: 9..a Заголовок: function RegGetBinary (RootKey: HKEY; Name: String; var Value: String): boolean; 9..b Назначение: Получение ключа Name ветви корня RootKey бинарного значения Value в строковой форма, и возврат true, в случае успешного получения данных. 9..c Входные параметры: RootKey, Name 9..d Выходные параметры: Value 10. Функция RegGetValueType: 10..a Заголовок: function RegGetValueType (RootKey: HKEY; Name: String; var Value: Cardinal): boolean; 10..b Назначение: Получение типа ключа Name ветви корня RootKey в Value, и возврат true, в случае его существования. 10..c Входные параметры: RootKey, Name 10..d Выходные параметры: Value 11. Функция : 11..a Заголовок: function RegSetDWORD(RootKey: HKEY; Name: String; Value: Cardinal): boolean; 11..b Назначение: Установка ключа Name ветви корня RootKey целочисленного значения Value, и возврат true, в случае успеха. 11..c Входные параметры: RootKey, Name, Value 11..d Выходные параметры: - 12. Функция RegKeyExists: 12..a Заголовок: function RegKeyExists (RootKey: HKEY; Name: String): boolean; 12..b Назначение: Проверка сущуствования ключа Name ветви корня RootKey и возврат рузультата. 12..c Входные параметры: RootKey, Name 12..d Выходные параметры: - 13. Функция RegDelValue: 13..a Заголовок: function RegDelValue (RootKey: HKEY; Name: String): boolean; 13..b Назначение: Удаление ключа Name ветви корня RootKey и возврат результата выполнения операции. 13..c Входные параметры: RootKey, Name 13..d Выходные параметры: - 14. Функция RegAddKey: 14..a Заголовок: function RegAddKey (RootKey: HKEY; Name: String): boolean; 14..b Назначение: Создание нового ключа Name ветви корня RootKey и возврат результата выполнения операции. 14..c Входные параметры: RootKey, Name 14..d Выходные параметры: - 15. Функция RegDelKey: 15..a Заголовок: function RegDelKey (RootKey: HKEY; Name: String): boolean; 15..b Назначение: Удаление улюча Name ветви корня RootKey и возврат результата выполнения операции. 15..c Входные параметры: RootKey, Name 15..d Выходные параметры: - 16. Функция RegConnect: 16..a Заголовок: function RegConnect (MachineName: String; RootKey: HKEY; var RemoteKey: HKEY): boolean; 16..b Назначение: Подключение к реестру машины с именем MachineName, и чтение с неё корня RootKey в RemoteKey, с возвратам флага успешного выполнения операции. 16..c Входные параметры: MachineName, RootKey 16..d Выходные параметры: RemoteKey 17. Функция RegDisconnect: 17..a Заголовок: function RegDisconnect(RemoteKey: HKEY): boolean; 17..b Назначение: Отключение от удаленного корневого ключа (освобождение удаленного ключа RemoteKey), и возврат флага успешного выполнения операции. 17..c Входные параметры: RemoteKey 17..d Выходные параметры: - 18. Функция RegEnumKeys: 18..a Заголовок: function RegEnumKeys (RootKey: HKEY; Name: String; var KeyList: String): boolean; 3. Программная реализация 3.1 Модуль работы с реестром (MiniReg) unit MiniReg; interface uses Windows; function RegSetString(RootKey: HKEY; Name: String; Value: String): boolean; function RegSetMultiString (RootKey: HKEY; Name: String; Value: String): boolean; function RegSetExpandString (RootKey: HKEY; Name: String; Value: String): boolean; function RegSetDWORD (RootKey: HKEY; Name: String; Value: Cardinal): boolean; function RegSetBinary (RootKey: HKEY; Name: String; Value: Array of Byte): boolean; function RegGetString (RootKey: HKEY; Name: String; Var Value: String): boolean; function RegGetMultiString (RootKey: HKEY; Name: String; Var Value: String): boolean; unction RegGetExpandString (RootKey: HKEY; Name: String; Var Value: String): boolean; function RegGetDWORD (RootKey: HKEY; Name: String; Var Value: Cardinal): boolean; function RegGetBinary (RootKey: HKEY; Name: String; Var Value: String): boolean; function RegGetValueType (RootKey: HKEY; Name: String; var Value: Cardinal): boolean; function RegValueExists (RootKey: HKEY; Name: String): boolean; function RegKeyExists (RootKey: HKEY; Name: String): boolean; function RegDelValue(RootKey: HKEY; Name: String): boolean; function RegAddKey(RootKey: HKEY; Name: String): boolean; function RegDelKey(RootKey: HKEY; Name: String): boolean; function RegConnect (MachineName: String; RootKey: HKEY; var RemoteKey: HKEY): boolean; function RegDisconnect (RemoteKey: HKEY): boolean; function RegEnumKeys (RootKey: HKEY; Name: String; var KeyList: String): boolean; function RegEnumValues (RootKey: HKEY; Name: String; var ValueList: String): boolean; implementation function LastPos(Needle: Char; Haystack: String): integer; begin for Result := Length(Haystack) downto 1 do if Haystack[Result] = Needle then Break; end; function RegConnect (MachineName: String; RootKey: HKEY; var RemoteKey: HKEY): boolean; begin Result:= (RegConnectRegistry (PChar(MachineName), RootKey, RemoteKey) = ERROR_SUCCESS); end; function RegDisconnect (RemoteKey: HKEY): boolean; begin Result := (RegCloseKey (RemoteKey) = ERROR_SUCCESS); end; function RegSetValue(RootKey: HKEY; Name: String; ValType: Cardinal; PVal: Pointer; ValSize: Cardinal): boolean; Var SubKey: String; n: integer; dispo: DWORD; hTemp: HKEY; begin Result := False; n := LastPos('\', Name); if n>0 then begin SubKey := Copy(Name, 1, n - 1); if RegCreateKeyEx(RootKey, PChar(SubKey), 0, nil, REG_OPTION_NON_VOLATILE, KEY_WRITE, nil, hTemp, @dispo) = ERROR_SUCCESS then begin SubKey := Copy(Name, n + 1, Length(Name) - n); Result := (RegSetValueEx (hTemp, PChar(SubKey), 0, ValType, PVal, ValSize) = ERROR_SUCCESS); RegCloseKey(hTemp); end; end; end; function RegGetValue(RootKey: HKEY; Name: String; ValType: Cardinal; var PVal: Pointer; var ValSize: Cardinal): boolean; var SubKey: String; n: integer; MyValType: DWORD; hTemp: HKEY; Buf: Pointer; BufSize: Cardinal; begin Result := False; n := LastPos('\', Name); if n>0 then begin SubKey := Copy(Name, 1, n - 1); if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_READ, hTemp) = ERROR_SUCCESS then begin SubKey := Copy(Name, n + 1, Length(Name) - n); if RegQueryValueEx(hTemp, PChar(SubKey), nil, @MyValType, nil, @BufSize) = ERROR_SUCCESS then begin GetMem(Buf, BufSize); if RegQueryValueEx(hTemp, PChar(SubKey), nil, @MyValType, Buf, @BufSize) = ERROR_SUCCESS then begin if ValType = MyValType then begin PVal := Buf; ValSize := BufSize; Result := True; end else begin FreeMem(Buf); end; end else begin FreeMem(Buf); end; end; RegCloseKey(hTemp); end; end; end; function RegSetString(RootKey: HKEY; Name: String; Value: String): boolean; begin CopyMemory(@Value[1], Buf, BufSize); FreeMem(Buf); Result := True; end; end; function RegValueExists (RootKey: HKEY; Name: String): boolean; var SubKey: String; n: integer; hTemp: HKEY; begin Result := False; n := LastPos('\', Name); if n>0 then begin SubKey := Copy(Name, 1, n - 1); if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_READ, hTemp) = ERROR_SUCCESS then begin SubKey := Copy(Name, n + 1, Length(Name) - n); Result := (RegQueryValueEx (hTemp, PChar(SubKey), nil, nil, nil, nil) = ERROR_SUCCESS); RegCloseKey(hTemp); end; end; end; function RegGetValueType (RootKey: HKEY; Name: String; var Value: Cardinal): boolean; var SubKey: String; n: integer; hTemp: HKEY; ValType: Cardinal; begin Result := False; Value := REG_NONE; n := LastPos('\', Name); if n>0 then begin SubKey := Copy(Name, 1, n - 1); if (RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_READ, hTemp) = ERROR_SUCCESS) then begin SubKey := Copy(Name, n + 1, Length(Name) - n); Result := (RegQueryValueEx (hTemp, PChar(SubKey), nil, @ValType, nil, nil) = ERROR_SUCCESS); if Result then Value := ValType; RegCloseKey(hTemp); end; end; end; function RegKeyExists (RootKey: HKEY; Name: String): boolean; var SubKey: String; n: integer; hTemp: HKEY; begin Result := False; n := LastPos('\', Name); if n>0 then begin SubKey := Copy(Name, 1, n - 1); if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_READ, hTemp) = ERROR_SUCCESS then begin Result := True; RegCloseKey(hTemp); end; end; end; function RegAddKey(RootKey: HKEY; Name: String): boolean; var hTemp: HKEY; begin Result := (RegCreateKey (RootKey, PChar(Name), hTemp) = ERROR_SUCCESS); end; function RegDelValue(RootKey: HKEY; Name: String): boolean; var SubKey: String; n: integer; hTemp: HKEY; begin Result := False; n := LastPos('\', Name); if n>0 then begin SubKey := Copy(Name, 1, n - 1); if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_WRITE, hTemp) = ERROR_SUCCESS then begin SubKey := Copy(Name, n + 1, Length(Name) - n); Result := (RegDeleteValue (hTemp, PChar(SubKey)) = ERROR_SUCCESS); RegCloseKey(hTemp); end; end; end; function RegDelKey(RootKey: HKEY; Name: String): boolean; var SubKey: String; n: integer; hTemp: HKEY; begin Result := False; n := LastPos('\', Name); if n>0 then begin SubKey := Copy(Name, 1, n - 1); if RegOpenKeyEx(RootKey, PChar(SubKey), 0, KEY_WRITE, hTemp) = ERROR_SUCCESS then begin SubKey := Copy(Name, n + 1, Length(Name) - n); Result := (RegDeleteKey (hTemp, PChar(SubKey)) = ERROR_SUCCESS); RegCloseKey(hTemp); end; end; end; function RegEnum(RootKey: HKEY; Name: String; var ResultList: String; const DoKeys: Boolean): boolean; var i: integer; iRes: integer; s: String; hTemp: HKEY; Buf: Pointer; BufSize: Cardinal; begin Result := False; ResultList := ''; if RegOpenKeyEx(RootKey, PChar(Name), 0, KEY_READ, hTemp) = ERROR_SUCCESS then begin Result := True; BufSize := 1024; GetMem(buf, BufSize); i := 0; iRes := ERROR_SUCCESS; while iRes = ERROR_SUCCESS do begin BufSize := 1024; if DoKeys then iRes := RegEnumKeyEx (hTemp, i, buf, BufSize, nil, nil, nil, nil) else iRes := RegEnumValue(hTemp, i, buf, BufSize, nil, nil, nil, nil); if iRes = ERROR_SUCCESS then begin SetLength(s, BufSize); CopyMemory(@s[1], buf, BufSize); if ResultList = '' then ResultList := s Else ResultList := Concat (ResultList, #13#10,s); inc(i); end; end; FreeMem(buf); RegCloseKey(hTemp); end; end; function RegEnumValues (RootKey: HKEY; Name: String; var ValueList: String): boolean; ShutdownReasonUI: String = 'Software\Policies\Microsoft \Windows NT\' +'Reliability \ShutdownReasonUI'; NoLowDiskSpaceChecks: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Policies\Explorer \NoLowDiskSpaceChecks'; MinAnimate: String = 'Control Panel\Desktop \WindowMetrics\MinAnimate'; SeparateProcess: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Explorer\Advanced \SeparateProcess'; AutoRestartShell: String = 'SOFTWARE\Microsoft \Windows NT\CurrentVersion\' +'Winlogon\AutoRestartShell'; IsShortcut: String = 'SOFTWARE\Classes\lnkfile \IsShortcut'; LinkImg: String = 'Software\Microsoft\Windows \CurrentVersion\Explorer\link'; NoSaveSettings: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Policies\Explorer \NoSaveSettings'; DragFullWindows: String = 'Control Panel\Desktop \DragFullWindows'; EnableBalloonTips: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Explorer\Advanced \EnableBalloonTips'; TaskbarGlomming: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Explorer\Advanced \TaskbarGlomming'; TaskbarGroupSize: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Explorer\Advanced \TaskbarGroupSize'; NoRecentDocsHistory: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Policies\Explorer \NoRecentDocsHistory'; Start_AutoCascade: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Explorer\Advanced \Start_AutoCascade'; NoCommonGroups: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Policies\Explorer \NoCommonGroups'; StartMenuScrollPrograms: String = 'Software\Microsoft\Windows\' +'CurrentVersion\Explorer \Advanced\StartMenuScrollPrograms'; IntelliMenus: String = 'Software \Microsoft\Windows\' +'CurrentVersion\Explorer \Advanced\IntelliMenus'; Start_LargeIcons: String = 'Software\Microsoft\Windows\' +'CurrentVersion\Explorer \Advanced\Start_LargeIcons'; StartMenuChange: String = 'Software\Microsoft\Windows\' +'CurrentVersion\Explorer \Advanced\StartMenuChange'; CodePage: String = 'SYSTEM\CurrentControlSet \Control\Nls\CodePage\'; DosKeybCodes: String = 'SYSTEM\CurrentControlSet \Control\Keyboard Layout\' +'DosKeybCodes\00000409'; AutoEndTasks: String = 'Control Panel\Desktop\AutoEndTasks'; AutoRunCD: String = 'SYSTEM\CurrentControlSet \Services\Cdrom\AutoRun'; DontDisplayLastUserName: String = 'SOFTWARE\Microsoft \Windows\CurrentVersion\' +'Policies\System \dontdisplaylastusername'; DisableStatusMessages: String = 'SOFTWARE\Microsoft \Windows\CurrentVersion\' +'Policies\System \DisableStatusMessages'; VerboseStatus: String = 'SOFTWARE\Microsoft \Windows\CurrentVersion\Policies\' +'System\verbosestatus'; Hotkey: String = '.DEFAULT \Keyboard Layout\Toggle\Hotkey'; InitialKeyboardIndicators: String = '.DEFAULT\Control Panel \Keyboard\' +'InitialKeyboardIndicators'; DisableTaskMgr: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Policies\System \DisableTaskMgr'; DisableRegistryTools: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Policies\System \DisableRegistryTools'; NoLogOff: String = 'Software\Microsoft\Windows \CurrentVersion\Policies\' +'Explorer\NoLogOff'; NoClose: String = 'Software\Microsoft\Windows \CurrentVersion\Policies\' +'Explorer\NoClose'; NoControlPanel: String = 'Software\Microsoft\Windows \CurrentVersion\Policies\' +'Explorer\NoControlPanel'; NoDispCPL: String = 'Software\Microsoft\Windows \CurrentVersion\Policies\' +'System\NoDispCPL'; DisableCMD: String = 'Software\Policies\Microsoft \Windows\System\DisableCMD'; LanmanServer: String = 'SYSTEM\CurrentControlSet \Services\LanmanServer\Parameters\'; RestrictAnonymous: String = 'SYSTEM\CurrentControlSet \Control\Lsa\RestrictAnonymous'; NoViewContextMenu: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Policies\Explorer \NoViewContextMenu'; NoFileMenu: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Policies\Explorer \NoFileMenu'; NoShellSearchButton: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Policies\Explorer \NoShellSearchButton'; NoSetTaskbar: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Policies\Explorer \NoSetTaskbar'; NoChangeStartMenu: String = 'Software\Microsoft\Windows \CurrentVersion\' +'Policies\Explorer \NoChangeStartMenu'; NoFind: String = 'Software \Microsoft\Windows\CurrentVersion\' +'Policies\Explorer\NoFind'; CheckBox57: TCheckBox; CheckBox58: TCheckBox; CheckBox59: TCheckBox; CheckBox60: TCheckBox; CheckBox61: TCheckBox; CheckBox62: TCheckBox; CheckBox63: TCheckBox; CheckBox21: TCheckBox; Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; Image8: TImage; Image9: TImage; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Bevel1: TBevel; Bevel2: TBevel; Bevel3: TBevel; Bevel4: TBevel; Bevel5: TBevel; Bevel6: TBevel; Bevel7: TBevel; Bevel8: TBevel; Bevel9: TBevel; Label11: TLabel; Label10: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Bevel10: TBevel; Bevel11: TBevel; Bevel12: TBevel; Bevel13: TBevel; Bevel14: TBevel; Bevel15: TBevel; Bevel16: TBevel; Bevel17: TBevel; Panel1: TPanel; Image10: TImage; Button1: TButton; Button2: TButton; Button3: TButton; OpenPictureDialog1: TOpenPictureDialog; SavePictureDialog1: TSavePictureDialog; procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure CheckBox33Click (Sender: TObject); procedure CheckBox21Click (Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); private th1,th2,th3: Cardinal; h1,h2,h3: Integer; fstart: Boolean; end; procedure Execute1; procedure Execute2; procedure Execute3; var Form1: TForm1; implementation uses MiniReg; {$R *.dfm} procedure Execute1; var f: Boolean; d,d1,d2: DWORD; s,s1,s2: String; a1,a0: array of Byte; begin SetLength(a1,1); SetLength (a0,1); a1[0] := 1; a0[0] := 0; while true do begin f := (Form1.PageControl1.ActivePageIndex <> 0); if f or (Form1.PageControl2.ActivePageIndex <>0) or Form1.fstart then begin RegGetDWORD (HKEY_LOCAL_MACHINE, ClearPageFileAtShutdown, d); Form1.CheckBox1.Checked := (d > 0); d := 0; RegGetString (HKEY_LOCAL_MACHINE, DebugDrWatsonAuto, s); Form1.CheckBox2.Checked := (s <> '') and (s = '0'); RegGetDWORD (HKEY_LOCAL_MACHINE, AlwaysUnloadDLL, d); Form1.CheckBox3.Checked := (d > 0); d := 0; RegGetDWORD (HKEY_CURRENT_USER, NoInstrumentation, d); Form1.CheckBox4.Checked := (d > 0); d := 0; RegGetString (HKEY_LOCAL_MACHINE, DefaultSeparateVDM, s); Form1.CheckBox5.Checked := (s = 'yes'); RegGetDWORD (HKEY_LOCAL_MACHINE, DoReport, d1); RegGetDWORD (HKEY_LOCAL_MACHINE, ShowUI, d2); Form1.CheckBox6.Checked := (d1 = 0) or (d2 = 0); RegGetString (HKEY_LOCAL_MACHINE, BootOptimizeFunction, s); Form1.CheckBox8.Checked := (s <> '')and(s = 'Y'); RegGetDWORD (HKEY_CURRENT_USER, ConsoleQuickEdit, d); Form1.CheckBox9.Checked := (d > 0); d := 0; end else begin if Form1.CheckBox1.Checked then RegSetDWORD (HKEY_LOCAL_MACHINE, ClearPageFileAtShutdown, 1) else RegSetDWORD (HKEY_LOCAL_MACHINE, ClearPageFileAtShutdown, 0); if Form1.CheckBox2.Checked then RegSetString (HKEY_LOCAL_MACHINE, DebugDrWatsonAuto, '0') else RegSetString (HKEY_LOCAL_MACHINE, DebugDrWatsonAuto, '1'); if Form1.CheckBox3.Checked then RegSetDWORD (HKEY_LOCAL_MACHINE, AlwaysUnloadDLL, 1) else RegSetDWORD (HKEY_LOCAL_MACHINE, AlwaysUnloadDLL, 0); if Form1.CheckBox4.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoInstrumentation, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoInstrumentation, 0); if Form1.CheckBox5.Checked then RegSetString (HKEY_LOCAL_MACHINE, RegSetBinary (HKEY_CURRENT_USER, LinkImg, a0) else RegSetBinary (HKEY_CURRENT_USER, LinkImg, a1); if Form1.CheckBox18.Checked then RegSetBinary (HKEY_CURRENT_USER, NoSaveSettings, a1) else RegSetBinary (HKEY_CURRENT_USER, NoSaveSettings, a0); if Form1.CheckBox19.Checked then RegSetString (HKEY_CURRENT_USER, DragFullWindows, '1') else RegSetString (HKEY_CURRENT_USER, DragFullWindows, '0'); end; if f or (Form1.PageControl2.ActivePageIndex <>2) or Form1.fstart then begin RegGetDWORD (HKEY_CURRENT_USER, EnableBalloonTips, d); Form1.CheckBox22.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, TaskbarGlomming, d); Form1.CheckBox21.Checked := (d > 0); Form1.ComboBox1.Enabled := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, TaskbarGroupSize, d); Form1.ComboBox1.ItemIndex : = Integer(d); RegGetDWORD (HKEY_CURRENT_USER, NoRecentDocsHistory, d); Form1.CheckBox20.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, Start_AutoCascade, d); Form1.CheckBox23.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, NoCommonGroups, d); Form1.CheckBox24.Checked := (d > 0); RegGetString (HKEY_CURRENT_USER, StartMenuScrollPrograms, s); Form1.CheckBox25.Checked := (s <> '') and (s = 'YES'); RegGetDWORD (HKEY_CURRENT_USER, IntelliMenus, d); Form1.CheckBox26.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, StartMenuChange, d); Form1.CheckBox28.Checked := (d > 0); end else begin if Form1.CheckBox22.Checked then RegSetDWORD (HKEY_CURRENT_USER, EnableBalloonTips, 1) else RegSetDWORD (HKEY_CURRENT_USER, EnableBalloonTips, 0); if Form1.CheckBox21.Checked then RegSetDWORD (HKEY_CURRENT_USER, TaskbarGlomming, 1) else RegSetDWORD (HKEY_CURRENT_USER, TaskbarGlomming, 0); RegSetDWORD (HKEY_CURRENT_USER, TaskbarGroupSize, DWORD (Form1.ComboBox1.ItemIndex)); if Form1.CheckBox20.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoRecentDocsHistory, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoRecentDocsHistory, 0); if Form1.CheckBox23.Checked then RegSetDWORD (HKEY_CURRENT_USER, Start_AutoCascade, 1) else RegSetDWORD (HKEY_CURRENT_USER, Start_AutoCascade, 0); if Form1.CheckBox24.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoCommonGroups, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoCommonGroups, 0); if Form1.CheckBox25.Checked then RegSetString (HKEY_CURRENT_USER, StartMenuScrollPrograms, 'YES') else RegSetString (HKEY_CURRENT_USER, StartMenuScrollPrograms, 'NO'); if Form1.CheckBox26.Checked then RegSetDWORD (HKEY_CURRENT_USER, IntelliMenus, 1) else RegSetDWORD (HKEY_CURRENT_USER, IntelliMenus, 0); if Form1.CheckBox28.Checked then RegSetDWORD (HKEY_CURRENT_USER, StartMenuChange, 1) else RegSetDWORD (HKEY_CURRENT_USER, StartMenuChange, 0); end; if f or (Form1.PageControl2.ActivePageIndex <>3) or Form1.fstart then begin RegGetString (HKEY_LOCAL_MACHINE, CodePage+'1250', s1); RegGetString (HKEY_LOCAL_MACHINE, CodePage+'1252', s2); Form1.CheckBox29.Checked := (s1 = 'c_1251.nls') and (s2 = 'c_1251.nls'); RegGetString (HKEY_LOCAL_MACHINE, DosKeybCodes, s); Form1.CheckBox30.Checked := (s = 'ru'); RegGetString (HKEY_CURRENT_USER, AutoEndTasks, s); Form1.CheckBox31.Checked := (s <> '') and (s = '1'); RegGetDWORD (HKEY_LOCAL_MACHINE, AutoRunCD, d); Form1.CheckBox37.Checked := (d = 0); end else begin while true do begin f := (Form1.PageControl1.ActivePageIndex <> 1); if f or (Form1.PageControl4.ActivePageIndex <>0) or Form1.fstart then begin RegGetDWORD (HKEY_CURRENT_USER, DisableTaskMgr, d); Form1.CheckBox38.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, DisableRegistryTools, d); Form1.CheckBox39.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, NoLogOff, d); Form1.CheckBox40.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, NoClose, d); Form1.CheckBox41.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, NoControlPanel, d); Form1.CheckBox42.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, NoDispCPL, d); Form1.CheckBox43.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, DisableCMD, d); Form1.ComboBox2.ItemIndex := Integer(d); d1 := 5; d2 := 5; RegGetDWORD (HKEY_LOCAL_MACHINE, RestrictAnonymous, d); Form1.CheckBox46.Checked := (d > 0); end else begin if Form1.CheckBox38.Checked then RegSetDWORD (HKEY_CURRENT_USER, DisableTaskMgr, 1) else RegSetDWORD (HKEY_CURRENT_USER, DisableTaskMgr, 0); if Form1.CheckBox39.Checked then RegSetDWORD (HKEY_CURRENT_USER, DisableRegistryTools, 1) else RegSetDWORD (HKEY_CURRENT_USER, DisableRegistryTools, 0); if Form1.CheckBox40.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoLogOff, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoLogOff, 0); if Form1.CheckBox41.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoClose, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoClose, 0); if Form1.CheckBox42.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoControlPanel, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoControlPanel, 0); if Form1.CheckBox43.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoDispCPL, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoDispCPL, 0); RegSetDWORD (HKEY_CURRENT_USER, DisableCMD, DWORD (Form1.ComboBox2.ItemIndex)); if Form1.CheckBox46.Checked then RegSetDWORD (HKEY_LOCAL_MACHINE, RestrictAnonymous, 1) else RegSetDWORD (HKEY_LOCAL_MACHINE, RestrictAnonymous, 0); end; if f or (Form1.PageControl4.ActivePageIndex <>1) or Form1.fstart then begin RegGetDWORD (HKEY_CURRENT_USER, NoViewContextMenu, d); Form1.CheckBox47.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, NoFileMenu, d); Form1.CheckBox48.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, NoShellSearchButton, d); Form1.CheckBox49.Checked := (d > 0); end else begin if Form1.CheckBox47.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoViewContextMenu, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoViewContextMenu, 0); if Form1.CheckBox48.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoFileMenu, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoFileMenu, 0); if Form1.CheckBox49.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoShellSearchButton, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoShellSearchButton, 0); end; if f or (Form1.PageControl4.ActivePageIndex <>2) or Form1.fstart then begin RegGetDWORD (HKEY_CURRENT_USER, NoSetTaskbar, d); Form1.CheckBox50.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, NoChangeStartMenu, d); Form1.CheckBox51.Checked := (d > 0); RegGetDWORD (HKEY_CURRENT_USER, NoFind, d); Form1.CheckBox52.Checked := (d > 0); Form1.CheckBox63.Checked := (d > 0); end else begin if Form1.CheckBox57.Checked then RegSetDWORD (HKEY_CURRENT_USER, PaintDesktopVersion, 1) else RegSetDWORD (HKEY_CURRENT_USER, PaintDesktopVersion, 0); if Form1.CheckBox58.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoDesktop, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoDesktop, 0); if Form1.CheckBox59.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoActiveDesktop, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoActiveDesktop, 0); if Form1.CheckBox60.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoDispBackgroundPage, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoDispBackgroundPage, 0); if Form1.CheckBox61.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoDispScrSavPage, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoDispScrSavPage, 0); if Form1.CheckBox62.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoDispSettingsPage, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoDispSettingsPage, 0); if Form1.CheckBox63.Checked then RegSetDWORD (HKEY_CURRENT_USER, NoDispAppearancePage, 1) else RegSetDWORD (HKEY_CURRENT_USER, NoDispAppearancePage, 0); end; Sleep(1000); end; end; procedure IncEdit1; begin Execute1; end; procedure IncEdit2; begin Execute2; end; procedure IncEdit3; begin Execute3; end; procedure TForm1.CheckBox33Click(Sender: TObject); begin CheckBox34.Enabled := not CheckBox33.Checked; end; procedure TForm1.CheckBox21Click(Sender: TObject); begin ComboBox1.Enabled := CheckBox21.Checked; end; procedure TForm1.FormShow (Sender: TObject); begin fstart := true; Form1.PageControl1.ActivePageIndex : = 2; Form1.PageControl2.ActivePageIndex : = 4; h1 := BeginThread(nil, 1024, @incedit1, nil, 1, th1); h2 := BeginThread(nil, 1024, @incedit2, nil, 2, th2); h3 := BeginThread(nil, 1024, @incedit3, nil, 3, th3); Form1.PageControl2.ActivePag eIndex := 0; Form1.PageControl1.ActivePageIndex : = 0; Sleep(1000); Button3Click(Sender); fstart := false; end; procedure TForm1.FormClose (Sender: TObject; var Action: TCloseAction); begin TerminateThread(h1, 0); TerminateThread(h2, 0); TerminateThread(h3, 0); end; procedure TForm1.Button2Click (Sender: TObject); var s: String; begin if OpenPictureDialog1.Execute then begin s := OpenPictureDialog1.FileName; RegSetString (HKEY_CURRENT_USER, Wallpaper, s); RegSetString (HKEY_CURRENT_USER, TileWallpaper, '0'); SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE) ; Screen.Realign; Button3Click(Sender); end; end; procedure TForm1.Button3Click (Sender: TObject); var s: String; begin RegGetString (HKEY_CURRENT_USER, Wallpaper, s); if FileExists(s) then Image10.Picture.LoadFromFile (s); end; procedure TForm1.Button1Click (Sender: TObject); begin if Image10.Picture.GetNamePath<>'' then if SavePictureDialog1.Execute then Image10.Picture.SaveToFile (SavePictureDialog1.FileName); end; end. использовать стандартное средство отладки приложений, что позволяет существенно ускорить работу системы и отключить окно навязчивые окна с сообщением об ошибки приложения (в большинстве случаев). "Автоматически выгружать неиспользуемые библиотеки" - параметр, включение которого заставляет систему не хранить в памяти библиотеки которые давно не использовались, это позволяет несколько освободить память, особенно когда необходимо много приложений использовать одновременно, но может привести к несколько нестабильной работе системы. "Отключить слежение Windows за пользователем" - отключает ведение системой журнала часто запускаемых приложений, открытых приложений и т.д. "Не отсылать в Microsoft отчеты об ошибках" - отключает появление запроса на отправку отчета об ошибке программы или системы её разработчикам, т.к. это иногда нервирует, а при отладке своего приложения просто выводит из себя. Опция "Оптимизировать системные файлы при загрузке" заставляет системы дефрагментировать системные файлы (не использующиеся в данный момент) как на жестком диске так и в ОП, но только при загрузке системы, что может привести к замедлению её загрузки, но ускорит её дальнейшую работу. И наконец, последний параметр данной вкладки "Использовать быстрое редактирование в командной строке" позволяет использовать кнопки мыши для копирования и вставки (без контекстного меню – оно все равно будет недоступно!). Вкладка "Проводник" предназначена для настройки параметров системной службы "Explorer" ("Проводник"). Т.к. в Windows Проводник является и графической оболочкой и программой навигации по файловой системе, то следует уточнить, что здесь представлены параметры для Проводника как графической оболочки. Опция "Отключить сообщения о недостатке свободного места" в принципе приведена здесь больше для систем под управлением Windows 2000 и более ранних, т.к. именно они боле используются на ПК с жесткими дисками малого объема. "Анимация при сворачивании и разворачивании окон" уставлена в системе по умолчанию и делает интерфейс более красочным, но требует несколько боле ресурсов для оболочки, отключение этой опции позволяет выделить больше процессорного времени и памяти на действительно необходимы цели (актуально для слабых машин). "Запуск окна Проводника в отдельном процессе", позволяет сделать работу системы более стабильной за счет того что окна Проводника работают не в отдельных потоках, а в отдельных процессах и при "зависании" одного окна весь Рабочий стол с другими окнами Проводника не будет закрываться. Параметр "Автоматически перезагружать проводник при ошибках" заставляет следить за стабильной работой проводника, и если он не отвечает на запросы системы – перезагружать его, это может спасти от длительных зависаний системы по причинам связанных с работой оболочки или Проводников. "Не добавлять "Ярлык для…" у новых ярлыков" говорит само за себя – имя ярлыка будет то же что и объекта на который он ссылается. "Отключить автозапись состояния окон Проводника" говорит системе о том, что не надо сохранять размеры и положение последнего окна проводника для использования их при следующем запуске Проводника. "Отображать содержимое окна при перетаскивании" заставляет систему при перемещении окна динамически изменять положение перетаскиваемого она, а не отображать рамку окна до завершения перетаскивания (отключение опции актуально для слабых машин). Вкладка "Панель задач и меню Пуск" служит для изменения некоторых параметров соответствующих элементов. Опция "Показывать всплывающие подсказки" разрешает системе выводить "подсказки" для элементов меню Пуск и Панели задач. При помощи опции "Группировать сходные кнопки на панели задач" позволяет высвободить место для отображения кнопок новых окон благодаря группировки окон с одного приложения в кнопку с раскрывающимся списком. А список уточнения этого параметра может помочь настроить эту функцию пользователю под себя. Параметр "Не вести историю открытых документов" заставит систему очистить список недавно открытых документов в меню Пуск и не больше не запретит его пополнение. Опция "Раскрывать меню при наведении и задержке указателя" позволит открывать подпункты меню Пуск просто наведением указателя на него, при этом клик уже не нужен будет, хотя и не запрещен (включено по умолчанию). "Не показывать общие ярлыки (All Users)" разрешит отображение в меню Пуск только ярлыком текущего пользователя (для каждого пользователя задается отдельно). "Использовать прокрутку меню пуск" по умолчанию выключено, для отображения меню в несколько рядов дабы показать все его пункты, а с прокруткой меню будет иметь одну колонку и кнопки прокрутки, в случае если не пунктов больше чем на одну колонку (возможно актуально для ПК с мониторами малого разрешения или по индивидуальному вкусу). "Использование сокращенного меню" скроет те пункты меню, что давно использовались, до нажатия кнопок прокрутки (рекомендуется использовать с предыдущим параметром, но можно и без него). "Разрешение перетаскивания объектов" позволяет помещать в меню Пуск ярлыки и файлы с рабочего стола или другого места простым перетаскиванием в нужную категорию. Вкладка "Решение проблем" может помочь исправить некоторые неприятные ситуации когда вместо русского текста отображаются всякие непонятные знаки или когда система не завершается из-за зависшего приложения. Так параметр "Использовать кодировку 1251 вместо 1252" может помочь решить помочь решить проблему с отображением русского текста в некоторых приложениях. "Переключение на русскую раскладку в DOS приложениях" позволит вводить русский текст в консольных приложениях самостоятельно не меняющих раскладку самостоятельно. Опция "Автоматически завершать зависшие приложения" может быть очень полезна, особенно при перезагрузки, т.к. она заставляет систему ждать самостоятельного завершения приложения определенное время, а затем принудительно завершать их работу считая их зависшими, это может существенно повысить скорость выключения ПК. Параметр "Отключить автозапуск компакт-дисков" запрещает автозапуск так называемых "AutoRun" приложений присутствующих на всех современных дисках с ПО (игровых, сборниках музыки для ПК и т.д.). вкладка позволяет настроить доступ к настройкам Рабочего стола, и изменить фоновое изображение. Так опция "Версия Windows на рабочем столе" заставит explorer выводить строки с версией системы по углам экрана. А вот опции "Запретить рабочий стол" и "Запретить active Desktop" не приводят к отображение новой информации, а наоборот запрещают её вывод – первая опция запрещает отображение всех значков на Рабочем стола, даже тех что относятся к текущему пользователю, а вторая запрещает использование в качестве фона Рабочего стола какого-либо изображения и/или web-страницы. Остальные параметры начинающиеся со слов "Скрыть вкладку" относятся к диалогу свойств Рабочего стола и заставляют систему скрывать одноименные вкладки этого окна. Что касается последних элементов данной вкладки, расположенных ниже последнего разделителя, то они предоставляют возможность просмотра текущего фонового изображения (даже если его отображение запрещено на рабочем столе) и его изменение, а так же возможность сохранение его в произвольном графическом файле. При этом получается информация из реестра лишь о местоположении файла изображения и его установка, само изображение уже читается из файла. Заключение Теперь подведем итоги. В Курсовом проекте были использованы API- функции работы с реестром для работы с реестром, а так же для работы с потоками. Результат выполнения курсового проекта – приложение с тремя дочерними потоками считывающими из реестра значения параметром, распределенных по трем основным категориям (параметры системы (её основных компонент), защиты (управлении доступом к некоторым параметрам системы) и рабочего стола (управление доступа к настройкам рабочего стола и изменение некоторых параметров)), и заносящим изменения этих параметров в реестр. В состав созданного приложения входит модуль, в котором были описаны функции-надстройки над API функциями для сведения работы с ними к минимуму, и упрощению их использования. Таким образом задачу курсового проекта я считаю выполненной. Используемая литература 1.Система программирования Delphi 7. Фаронов В. 2005 г. С.-П. 2.Microsoft Windows 2000 Professional. Александров А. 2003 г. С.-П. 3.Microsoft Windows XP. Home Edition. Кокорев О. 2006 г. С.-П. 4.Delphi 7. Горман В.Н. 2005 г. М.
Docsity logo