Dokładnie chodzi o kawałek kodu który w OnCreate Formy sprawdziłby czy uruchomienie nastąpiło z autostartu
do autostartu dopisujesz jako parametr "autorun" np i potem sprawdzasz czy
ParamStr(1)='autorun'. user może dopisać jako parametr "autorun" i wtedy program pomyśli że został uruchomiony z autorunu ale nie ma chyba innego sposobu :(
Ewentualnie można sprawdzić, czy w katalogu 'autostart' jest skrót do naszego programu i czas działania Windows nie jest większy niż powiedzmy minuta.
Oczywiście ten (ani żaden) inny sposób nie da odpowiedzi na zadane pytanie w 100%, ale można założyć, że margines błędu będzie mały.
A może sprawdzić czy program jest w autostarcie i po prostu zapisać fakt uruchomienia np 'byl uruchomiony' a przy przy zamykaniu zapisać 'zero uruchomien'. Coś takiego miał chyba na myśli Adamo. Ale jak się zawiesi albo prąd wyłączą to na nic. Chyba trzeba będzie sprawdzić na kilka sposobów.
Poprawcie mnie jeżeli się mylę ale rozwiązanie jest bardzo proste i opiera się się fakcie iż podczas startu systemu GetCurrentDir daje scieżkę katalogu Windowsa:
- Zapisać w rejestrze podczas instalacji programu scieżkę naszego programu - prog_path
- Zakładamy, że nikt nie będzie instalował programu w katalogu systemowym (to jest możliwe? - jeżeli jest to zabronić takiej możliwości)
- w OnCreate Formy:
if GetCurrentDir<>prog_path then 'program jest uruchamiany z autostartu'
Poprawcie mnie jeżeli się mylę ale rozwiązanie jest bardzo proste i opiera się się fakcie iż podczas startu systemu GetCurrentDir daje scieżkę katalogu Windowsa:
- Zapisać w rejestrze podczas instalacji programu scieżkę naszego programu - prog_path
- Zakładamy, że nikt nie będzie instalował programu w katalogu systemowym (to jest możliwe? - jeżeli jest to zabronić takiej możliwości)
- w OnCreate Formy:
if GetCurrentDir<>prog_path then 'program jest uruchamiany z autostartu'
zauwazyles ze skroty maja podana sciezke gdzie program ma zaczac. i ta sciezka zazwyczaj jest taka sama jak sciazka do programu.
ale jeśli program jest uruchamiany z rejestru to nie podaje się ścieżki zaczęcia programu więc możliwe że startuje pod windowsem, ale to żadne zabezpiecznie bo każdy może uruchomić program tak żeby ścieżka GetCurrentDir wskazywała Windows.
Startuje pod Windowsem - sprawdzałem. Tylko nie bardzo rozumiem jak uruchomić program żeby GetCurrentDir wskazywał katalog Windowsa?
normalnie, np: tworzysz skrót i w "folder roboczy" wpisujesz "c:\windows" albo wchodzisz "command" w konsolę dosa idziesz "cd" do windows'a i wpisujesz całą ścieżkę do programu np: "c:\progra~1\borland\delphi7\projects\project1.exe" i też będzie CurrentDir na windows'a
Ludzie, sprawdzajcie czasem swoje rady! Wstawiłem w OnShow Formy ShowMessage(GetCurrentDir) - to była zawsze ścieżka programu bez względu na to jak i skąd odpalony został program (pomijając autostart) !!!
to ty sprawdzaj co piszesz bo teraz sprawdziłem to (chociaż i tak byłem pewny że jest tak jak mówiłem) i się jakoś nie zdziwiłem kiedy w obu przypadkach podanych wcześniej otrzymałem "c:\windows"
Jeżeli masz rację, to przepraszam, ale co tu jest w końcu grane? Przecież nie jestem ślepy, może to od Windowsa zależy - ja sprawdzałem pod Win98
Chylę czoło i przepraszam, tak się zasugerowałem tym rozwiązaniem, że zapomniałem, że wstawiłem u siebie SetCurrentDir(sciezka_mojego_prog) a testowalem na tym właśnie programie