Следы
неведомых
юзвереё
^
Сергей ПАРИЖ СКИЙ
Думаю, многие из вас опасаются за свой компьютер, когда уезжают на отдых, или даже в короткое
время отсутствия на выходных, во время работы или учебы. Ведь если вы живете не в полном затворе
и уединении, то за компьютером может оказаться кто угодно. В любом случае вы должны знать, кто
и в какое время сидел на вашем рабочем месте. Сегодня мы напишем программу, которая будет
вести лог всех входов и выходов в \Л/іпс!о\л/з. Поможет все зто реализовать нам йеірбі.
К
ак вы понимаете, программа должна работать скрытно,
не показываясь никому на глаза. Первое место, откуда
надо ее убрать — это панель задач (таскбар). Для этого
зайдите в меню Project > V iew Source, вытрите весь
написанный там код и напишите вместо него следующий:
pro g ra m p r o je c t l;
uses
w indow s. Form s,
O n it l in 'O n it l. p a s ' {F o rm l};
{$R * • r e s }
v a r
E s ty le : in te g e r ;
b e g in
A p p lic a t io n . I n it ia liz e ;
E s ty le : =GetW indowLong(a p p lic a t io n . H a n d le ,
GW L_EXstyle ) ;
SetW indow Long(A p p lic a tio n .H a n d le , G W L_EX style, Es-
t y le o r WS_EX_TOOLWINDOW) ;
A p p lic a tio n .C re a te F o rm (T F o rm l, F o rm l);
A p p lic a tio n .R u n ;
end.
Затем создайте для формы событие O nC reate и напишите
там такой код:
ShowWindow(H a n d le , SW HIDE) ;
S h o w W in d o w (A p p lic a tio n . H a n d le , SW_HIDE);
Это скроет присутствие вашей программы в панели задач.
Теперь добавим нашу программу в Автозагрузку — для этого
допишите модуль R e g is try в раздел uses, а в уже созданном
событии формы O nC reate допишите:
v a r
re g : t r e g is t r y ;
p ro g : s t r in g ;
b e g in
p ro g : = A p p li c a t i o n . EXEname;
r e g : = t r e g is t r y . c r e a t e ;
r e g . rootkey:=HKEY„CURRENT_USER;
i f
re g .o p e n k e y ( '\S o ftw a r e \M ic r o s o ftW in d o w s \C u rre n tV
e r s io n \R u n '.tr u e ) th e n
b e g in
r e g . w r it e S t r in g t'T im e r ', p ro g ) ;
r e g . c lo s e k e y ;
end;
r e g .fr e e ;
Для того чтобы сделать невидимой форму, найдите событие
формы o n P a in t и напишите там строку:
fo r m l.h id e
Который час?
Эту процедуру мы будем использовать при входе и выходе
программы. Сразу объявите в разделе
v a r
переменные
tim ,
h, m, d, mO типа
S tr in g
и Д ттипа
Tsystem Tim e.
А вот код
получения времени:
g e tL o ca lT im e(tm );
i f tm .w H our<10 th e n h : = ' 0 '+ in t t o s t r (tm .w H our)
e ls e h : = in t t o s t r (tm .w H our) ;
i f tm.wMinute<10 th en m : = '0 '+ in tto s tr (tm .w M in u te )
e l s e m := in tto s tr (tm .w M inute);
i f tm.wDay<10 th en d : = 'O '+ in tto str(tm .w D a y )
e l s e d : = in ttO S tr (tm.wDay) ;
i f tm.wMonthclO th en m0: = ' 0 '+ i n t t o s t r (tm.wMOnth)
e l s e m O := in tto s tr (tm.wM onth);
Сначала мы узнаем время и заносим его в переменную
tm.
Сейчас в этой переменной много лишних и ненужных нам
данных,
т т
хранит в себе все возможные данные о дате, начиная
от года и заканчивая текущей миллисекундой. Затем мы начинаем
растасовывать нужные нам данные по переменным. В конечном
итоге мы получаем
mO
— месяц,
d
— день,
h
— часы, т — минуты.
Для того чтобы дата была удобочитаемой и не путалась с
12-часовым форматом отображения даты, к числам меньше
десяти впереди добавляется
0.
Мониторинг входа/выхор
Записывать данные мы будем в .ini-файл, так что допишите
в
u se s
модуль
i n i F i l e s ,
а в разделе
v a r
объявите еще
несколько переменных:
f l : t e x t f i l e ;
w in: T i n i F i l e ;
p a th , t e s t : s t r in g ;
i : in te g e r ;
Теперь создайте событие формы
o n A ctiv a te
и в начале
его вызовите (или напишите) процедуру получения времени.
П отом допиш ите код, который будет ф иксировать вход
пользователя в систему:
t e s t : = ' ' ; //делаем набор цифр удобочитаемым
tim : = ' Месяц: '+ т0+ 'Ч и сл о : '+ d + 'Время: '+ h + ':'+ m ;
//path будет хранить полный путь к файлу для ведения лога
p a th : = G etC u rren tD ir+ '\Tim er. i n i ' ; / /проверяем,
сущ ествует ли файл лога
i f F ile E x is ts (p a th ) = f a l s e th en b e g in //создаем л о г,
если таковой не сущ ествует
a s s i g n f i l e ( f l ,p a t h ) ;
r e w r it e ( f 1 ) ;
c l o s e f i l e ( f l ) ; // записываем начальные данные
W in := T In iF ile .C r e a te (p a th );
W in .W r ite S tr in g t'T im e r ', 'В х о д # 1 ', ' ' ) ;
W in .W rite S trin g ( 'T im e r ', 'В ы х о д # 1', ' ' ) ;
W in .F ree;
end;
W in := T In iF ile .C r e a te (p a th ); //проверяем в цикле
свободные ячейки для записи, чтобы не затер еть
существующие
fo r i : =1 to 100 do b eg in
t e s t : = W in .R ead strin g ( 't i m e r ', 'В х о д # '+ i n t t o s t r ( i ) ,
t e s t ) ; //если нашли свободную ячейку
i f t e s t = ' ' th en b e g in //Отделяем входы-выходы для
удобочитаемости
W in .W rite S trin g ( 'T im e r ', ' ------- '+ i n t t o s t r (i), --------');
//записываем заготовленную переменную с "красивым"
форматом времени
W in .W rite S trin g ( 'T im e r ', 'В х о д # '+ in t T O s t r ( i) ,t im ) ;
//прерываем цикл при найденной свободной ячейке
Ik.
О кончание на
стр.
4 2
№ 38/313 20 сентября-27 сентября 2004
предыдущая страница 38 Мой Компьютер 2004 38 читать онлайн следующая страница 40 Мой Компьютер 2004 38 читать онлайн Домой Выключить/включить текст