U?życie procedury przy starcie systemu

0

Czy moze mi ktoś napisać jaki błąd popełniam pisząc po implentation i {$R *.dfm} taką procedure:
{wykrycie systemu}
procedure sprawdz_czy_xp();
Reg := TRegistry.Create;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
try
Reg.OpenKeyReadOnly('Software\Microsoft\Windows\CurrentVersion');
JakiSys:=Reg1.ReadString('ProductName');
except
Reg.OpenKeyReadOnly('Software\Microsoft\WindowsNT\CurrentVersion');
JakiSys:=Reg1.ReadString('ProductName');
end;
finally
Reg.Free;
end;
if JakiSys='Microsoft Windows XP' then
begin
ShowMessage('Program jest niekompatybilny z Windows XP!');
Application.Terminate;
end;
end;

a następnie wstawiajac po application.run; takie odwołanie:
sprawdz_czy_xp();
Procedura ma sie uruchamiać im wcześniej tym lepiej i odpowiednio postępować.

Za pomoc z góry dziekuje :)

0

Chyba pomyliles Pascala z C++ :-)
Jak deklarujesz w pascalu procedure. ktora nie wymaga zadnych parametrow to piszesz tak:

procedure sprawdz_czy_xp; // bez ()

a jak wywolujesz to: sprawdz_czy_xp;

Nawiasy sa w C++ :-)

0

Ja to pisze w Delphi ;)

0

Wiem, ze piszesz w Delphi dlatego napisalem, ze nie ma tam czegos takigo "()"
Ja bym to napisal tak:

procedure sprawdz_czy_xp;
var
Reg := TRegistry.Create;

begin
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion');

if (Reg.ValueExists('ProductName'))and
(Reg.ReadString('ProductName') = 'Microsoft Windows XP') then
begin
ShowMessage('Program jest niekompatybilny z Windows XP!');
Application.Terminate;
end;

finally
Reg.CloseKey;
Reg.Free;
end;

end;

Nie wiem czy to bedzie poprawnie bo pisze to na szybko (wlasnie koncze lekcje i wychodze)
Tak czy siak cos w podobiw byloby chyba wystarczajace :)
Pozdrawiam!

0

Delphi zostało specjalnie przystosowane do programistów piszących w różnych językach np. PHP i Delphi, stąd zarówno Funkcja; jak i Funkcja(); będzie dobre.

0

Ktos, jak juz napisałes ze nie ma roznicy to wiesz moze jaki ja błąd popełniam ?? Bo niezaleznie czy bedzie () czy nic to nie działa.

0

Nie wiem skad tam sie wzielo Reg1 skoro deklarowales Reg.
Napisz cos wiecej, tzn co sie dzieje jakie bledy sie pojawiaja.
Aha... no i kluczyk rejestru powinno sie zamknac poprzez Reg.CloseKey (chociaz to pewnie nie rozaiwrze problemu).

0

Jak juz wszytsko sie niby wykonuje i przechdzi do linijli po: application.run gdzie mam napisane: sprawdz_czy_xp(); to pisze ze undeclared identifier "sprawdź czy XP"

0

Jedno pytanie: po co męczysz się ze sprawdzaniem w rejestrze jaki to system skoro jest do tego odpowiednia funkcja WinAPI?
http://4programmers.net/view_faq.php?id=64

0

<font color="green">...undeclared identifier "sprawdź czy XP"</span>

procedure sprawdz_czy_xp musisz zadeklarować w sekcji public lub private :-)

0

Droyobates bo on ma na winNT i 2k działać tylko na XP ma nie działać

0

Dobra, już wiem. Z twojej wypowiedzi wywnioskowałem że procedure uruchamiasz w Project Source, więc musisz dodać deklarację procedurki do sekcji interface (niekoniecznie do public!!) tzn. wytłumacze łopatologicznie :): Pod deklaracjami klas, typów itp w interface dajesz coś takiego, zeby to wygladalo jakos taK:

procedure Sprawdz_czy_XP;

implementation

procedure Sprawdz_czy_XP;
begin
//polecenia wlasciwe dla procedurki
end;

oczywiscie mozesz dodac to do public klasy TForm1 i startowac później przez TForm1.Sprawdz_czy_XP;

1 użytkowników online, w tym zalogowanych: 0, gości: 1