data ostatniego uzycia aplikacji

0

w winxp w 'dodaj/usun programy' znajduje sie informacja o tym kiedy aplikacja byla ostatni raz uzyta - jak mozna to sprawdzic? gdzie takie informacje sa zapisane?

0

U mnie to zwykło kłamać przynajmniej w połowie przypadków - ale sądzę, że Windows próbuje sprawdzać atrybut Last Access głównego pliku programu.

0

W takim wypadku jak z tego kozystac? Tzn wiem ze jest to sr.FindData.ftLastAccessTime ale nie wiem jak to w stringa przezucic! Typ to _FILENAME i nie wiem co zrobic zebym mogl to odczytac jako date lub jako stringa!! :-(

0

nie _FILENAME tylko _FILEDATA :)

0

kurw... :-[ tam jest naturalnie _FILETIME - wielkie sorki! jezeli jest tam moze przypadkiem ktos kto moze poprawic to to niech zmieni tam juz w pierszej czesci te bledne informacje a te dwa posty niech wykasuje - bede wdzieczny :p

0

Poczytaj o Windowsowej funkcji FileTimeToDosDateTime - dajesz jej parametr _FILETIME, a otrzymujesz dwa słowa (16-bitowe), których znaczenie jest dokładnie podane:

lpFatDate
Points to a variable to receive the MS-DOS date. The date is a packed 16-bit value with the following format:

Bits Contents
0-4 Day of the month (1-31)
5-8 Month (1 = January, 2 = February, etc.)
9-15 Year offset from 1980 (add 1980 to get actual year)

lpFatTime

Points to a variable to receive the MS-DOS time. The time is a packed 16-bit value with the following format:

Bits Contents
0-4 Second divided by 2
5-10 Minute (0-59)
11-15 Hour (0-23 on a 24-hour clock)

0

Poszperalem i przypadkiem znalazlem cos takiego:

procedure TForm1.Button1Click(Sender: TObject);
var
  Data_Old: TFileTime;
  Data_New: TSystemTime;
begin
    {...}    
    Data_Old := sr.FindData.ftLastAccessTime;
    FileTimeToSystemTime(Data_Old, Data_New);
    Label1.Caption:='Ostatni dostęp: '+
                     IntToStr(Data_New.wDay)+
                     '.'+
                     IntToStr(Data_New.wMonth)+
                     '.'+
                     IntToStr(Data_New.wYear);
  end;
end;

To poprawnie konwertuje date ALE niestety wynik jest nastepujacy: np. 2.8.2003. Jak sie do tego doda jeszcze godzine to w ogole jest cos takiego 2.8.2003 81 zamiast np. 02.08.2003 0801. Jak to zmienic? Wiem ze najprosciej byloby sprawdzac to w taki sposob:

if Data_New.wDay<10 then
Label1.Caption:=Label1.Caption+'0'+inttostr(Data_New.wDay)
else
Label1.Caption:=Label1.Caption+inttostr(Data_New.wDay);

Ale to poroniony pomysl bo na kazdy plik trzeba sprawdzic ok 5 elementow a jezeli chce sie przeanalizowac setki plikow to takie cos potwornie obciaza system. Czy to jedyny sposob na przekonwertowanie tej daty? A moze jakis inny pomysl? Tam niestety nie ma konkretnej daty - jedynie da sie odczytac rok, miesiac, dzien, dzien tygodnia, godzine, minute, sekunde, milisekunde. Kojarzy mi sie ze jest jakas procedura ktora by sobie z tym poradzila ale nie pamietam jaka...

0

Jak mnie to denerwuje! :-[ Zawsze uswiadamiam sobie (lub przypominam sobie - tak jak w tym wypadku) jak rozwiazac problem kiedy juz zadam pytanie na forum!! :-[ Odpowiedz jak to zrobic:

EncodeDate(M.wYear, M.wMonth, M.wDay))+
' '+
TimeToStr(EncodeTime(M.wHour, M.wMinute, M.wSecond, M.wSecond))

Owszem - wiem ze jest funkcja EncodeDateTime() ale ona u mnie nie chce dzialac :( Nie wiem czemu!

Mysle ze to koniec problemow zwiazanych z tym watkiem! :-)
[cya]

PS. IKARI - OGROMNE dzieki za pomoc :)

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