-
Startup v Delphi
vopred chcem podakovat jedikovy za prispevok k mojmu orvemu prblemu, =>jedik, pomohlo az na mensi rozdiel, ze komp ani nevyplo, ani neresetlo, ale iba Logofflo, neviem ci je Xp OS alebo cim...ale aj tak velky THX. A mam tu este jeden problem, ako sa da spravit v delphi, ze ked spustim projekt(exac) tak sa narve do startupu, iste to poznate hlavne z Kalendara, raz sa tam hodi a pri kazdom starte sa spusti n apar sekund... ma napadla iba jedna vec ale moc jej neverim, to ze je mozne ze sa len v kode zapise nejaky Path (cesta) resp. path kt. smeruje k startupu napr. :c:\Documents and Settings\Administrator\Start Menu\Programs\Startup a ze tam vytvori link toho exaca. Je mozne ze sa to da urobit takto? a ak ano tak nejako upresnit... vopred dik
-
Ja myslim ze nejlepsi je si to zapsat do registru.
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
A tam pridas novou retezcovou promennou a hodnota je cesta k tvemu programu...
-
Hoj,
k tvojemu 1. problému
sice jsem moc nestudoval co je na fóru, ale předpokládam, že tvuj program nemá privilegia vypnout pc, takže je potřebuješ změnit (níže - návod jsem našel kdysi někde na živě)
k 2. problému je fakt nejlepší zadat hodnotu do registrů, nejlepší je na to použít komponentu minireg, kterou sem kdysi našel, nemá sice takové možnosti jako TRegistry, ale zabere v programu MNOHEM míň místa a líp se ovládá (hodil jsem ji zatim na muj web: http://www.smitka.org/minireg.pas)
procedurka, která by to všechno měla udělat:
Kód:
procedure down();
var
hToken, hProcess: THandle;
tp, prev_tp: TTokenPrivileges;
Len, Flags: DWORD;
begin
//zápis do registrů pomocí miniregu
minireg.RegSetString(HKEY_CURRENT_USER,'Software\Microsoft\Windows\CurrentVersion\Run\mujprog','c:\project1.exe')
//změna privilegií
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, GetCurrentProcessID);
try
if not OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken) then Exit;
finally
CloseHandle(hProcess);
end;
try
if not LookupPrivilegeValue('', 'SeShutdownPrivilege',tp.Privileges[0].Luid) then Exit;
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(hToken, False, tp, SizeOf(prev_tp),prev_tp, Len) then Exit;
finally
CloseHandle(hToken);
end;
end;
//privilegia změněna, pokud bylo potřeba
//reboot
ExitWindowsEx(EWX_REBOOT, 0);
end;
Snad ti to pomůže
-
nj, ide to s tym co si napisal, s mensimi upravami to bude presne to co potrebujem 8-) 8-)
thx all kto poradil...
-
Jedna z jinech diskuzí mi připoměla, že restart jde ještě jednodušejc pomocí příkazovýho řádku, to se pak nemusí měnit privilegia procesu :-)
Kód:
shellexecute(0,nil,'shutdown','-r',nil,0);
Jen pro pořádek, aby to tu bylo komplet...