Пожалуйста исправьте мои ошибки.
При запуске программы, она запускается, но пишет ошибку!!!
Я начал работать в Delphi только позавчера, поэтому много не знаю!!! Ошибка:
Проект Project2.exe вызвал исключение класса EAccessViolation с сообщением 'Access violation at address 00000000. Read of address 00000000'. Процесс остановлен. Используйте Шаг или Запуск для продолжения.
Мой код:
Code
var
reg:TRegistry;
data : integer;
time : integer;
datadata : integer;
timetime : integer;
datacomp : integer;
timecomp : integer;
hToken: THandle;
tkp: TTokenPrivileges;
ReturnLength: Cardinal;
Begin
ShowWindow(Handle,SW_HIDE);
ShowWindow(Application.Handle,SW_HIDE);
reg:=TRegIniFile.Create;
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('Software\Comp-OFF\Time', false);
data:=StrToint(reg.ReadString('data-off'));
time:=StrToint(reg.ReadString('time-off'));
reg.CloseKey;
reg.Free;
datacomp := StrToint(FormatDateTime('yyyymmdd',now));
timecomp := StrToint(FormatDateTime('hhmm',now));
datadata := data - datacomp;
timetime := time - timecomp;
if datadata > 0 then
if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
TOKEN_QUERY, hToken) then
begin
LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength) then
ExitWindowsEx(EWX_ShutDown,0);// Выключение
end;
if datadata = 0 then
if timetime > 0 then
if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
TOKEN_QUERY, hToken) then
begin
LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength) then
ExitWindowsEx(EWX_ShutDown,0);// Выключение
end;
if datadata = 0 then
if timetime = 0 then
if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
TOKEN_QUERY, hToken) then
begin
LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength) then
ExitWindowsEx(EWX_ShutDown,0);// Выключение
end;
if datadata = 0 then
if timetime < 0 then
reg:=TRegIniFile.Create;
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('Software\Comp-OFF\Time', false);
reg.DeleteValue('data-off');
reg.DeleteValue('time-off');
reg.CloseKey;
reg.Free;
reg:=TRegIniFile.Create;
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', false);
reg.DeleteValue('Comp-OFF');
reg.CloseKey;
reg.Free;
Form1.Close;
if datadata < 0 then
reg:=TRegIniFile.Create;
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('Software\Comp-OFF\Time', false);
reg.DeleteValue('data-off');
reg.DeleteValue('time-off');
reg.CloseKey;
reg.Free;
reg:=TRegIniFile.Create;
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', false);
reg.DeleteValue('Comp-OFF');
reg.CloseKey;
reg.Free;
Form1.Close;
end;
Я хочу, чтоб прога прочитала данные с реестра и отняла от них дату и время!
Если данные с реестра (Дата) - дата > 0, то выкл. комп
Если данные с реестра (Дата) - дата = 0, то
Если данные с реестра (Время) - время > 0, то выкл. комп
Если данные с реестра (Дата) - дата = 0, то
Если данные с реестра (Время) - время = 0, то выкл. комп
Если данные с реестра (Дата) - дата = 0, то
Если данные с реестра (Время) - время < 0, то удаление данных с реестра + удаление с автозапуска + выход с программы
Если данные с реестра (Дата) - дата < 0, то удаление данных с реестра + удаление с автозапуска + выход с программы
Пожалуйста, помогите!!! Я хочу закончить программу к новому году, а он уже через 11 часов!!!