Советы пользователям Delphi и C++Builder
f65d50f6

Вывод информации о приложении на заставке


Если запустить какое-либо из приложений MS Office 97, на появляющейся при загрузке приложения заставке можно увидеть не только сведения о самом приложении, но также и регистрационный номер и фамилию пользователя. Как известно, эти сведения вводятся пользователем в процессе установки приложения, и в настоящее время принято хранить подобные сведения в реестре Windows. Если создать дистрибутив приложения с помощью наиболее часто используемого в нашей стране для этой цели средства InstallShield (или с помощью InstallShield Express, входящего в состав старших версий Delphi и C++Builder), в реестре Windows появится раздел, похожий на представленный на рис.3:

Рис. 3. Раздел реестра, создаваемый программой установки

В данном случае приложение MyApp версии 1.0 создано компанией Splash Screen Company, и при его установке были введены серийный номер 176-99027, а также имя пользователя и имя компании, в которой данный пользователь работает.

Если инсталляционное приложение создано не с помощью InstallShield, а с помощью иных средств (например, написано на Delphi или C++Builder), наименование раздела и ключей реестра могут отличаться от приведенных выше, но в любом случае они должны быть Вам известны.

Модифицируем нашу заставку так, чтобы на ней отображались содержащиеся в реестре имя пользователя и серийный номер. С этой целью добавим на созданную ранее форму две метки.

Рис. 4. Форма заставки после внесения изменений

Создадим обработчик события, связанный с созданием формы. В случае Delphi он имеет следующий вид:

procedure TForm2.FormCreate(Sender: TObject); var key,ser,usr:string; Reg:TRegistry; begin try Reg:=TRegistry.Create; key:='SOFTWARE\Splash Screen Company\MyApp\1.0'; Reg.Rootkey:= HKEY_LOCAL_MACHINE; Reg.OpenKey(key,false); usr:=Reg.ReadString('Name'); ser:=Reg.ReadString('Serial'); Label2.Caption:='Пользователь: '+usr; Label3.Caption:='Серийный номер: '+ser; Reg.CloseKey; Reg.Destroy; except Label2.Caption:='Unregistered user'; Label3.Caption:='Please register'; end; end;


При этом в секции uses модуля, связанного с формой, следует сослаться на модуль registry.
Для С++Builder обработчик этого события выглядит так:
void __fastcall TForm1::FormCreate(TObject *Sender) {TRegistry *Reg; try { Reg=new TRegistry; Reg->RootKey=HKEY_LOCAL_MACHINE; AnsiString key="SOFTWARE\\Splash Screen Company\\MyApp\\1.0"; Reg->OpenKey(key,false); AnsiString usr=Reg->ReadString("Name"); AnsiString ser=Reg->ReadString("Serial"); Label2->Caption="Пользователь: "+usr; Label3->Caption="Серийный номер: "+ser; Reg->CloseKey(); Reg->Free(); } catch (...) { Label2->Caption="Unregistered user "; Label3->Caption="Please register "; } }
Естественно, в начале текста модуля следует вставить строку:
#include <registry.hpp>
Обратите внимание: в С++ и Pascal форматы строк, содержащих имена разделов реестра, разные.
В результате наша заставка на этапе выполнения в случае наличия в реестре соответствующего раздела приобретет следующий вид:

Рис. 5. Заставка с именем пользователя и серийным номером на этапе выполнения
Если же в реестре нет такого раздела, вместо имени пользователя и серийного номера булет выводиться сообщение о том, что пользователь не зарегистрирован.
Отметим, что при желании можно добавить в этот обработчик события код, анализирующий серийный номер и в случае, если он не удовлетворяет каким-либо заранее заданным требованиям, прекратить выполнение приложения (или запустить его демонстрационную версию).

Содержание раздела