Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 12.09.2008, 06:27   #1
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
Репутация: 26
По умолчанию Сделать программу Logger

У меня есть такая задача, сделать программу Logger, сбросить его в локальную сеть с доменом, и если кто нибудь его запустит при это ничего не должно быть, но программа должна сохранить Log в понятный формат, который можно открыть например блокнотом, Формат данных - log с IP-адресом и именем пользователя, запустившего программу.
rainbow вне форума   Ответить с цитированием
Старый 12.09.2008, 11:07   #2
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
Репутация: 335
По умолчанию

program Logger;

//{$APPTYPE CONSOLE}

uses
Windows, SysUtils, Classes, Winsock;

function GetCurrentUserName: string;
const
cnMaxUserNameLen = 254;
var
sUserName: string;
dwUserNameLen: DWORD;
begin
dwUserNameLen := cnMaxUserNameLen - 1;
SetLength(sUserName, cnMaxUserNameLen);
GetUserName(PChar(sUserName), dwUserNameLen);
SetLength(sUserName, dwUserNameLen);
Result := sUserName;
end;

var
wVerReq: WORD;
wsaData: TWSAData;
ip: pchar;
host: PHostEnt;
c: array[0..128] of char;
log: TStringList;
begin
Log:=TStringList.Create;
wVerReq := MAKEWORD(1, 1);
WSAStartup(wVerReq, wsaData);
GetHostName(@c, 128);
host := GetHostByName(@c);
ip := iNet_ntoa(PInAddr(host^.h_addr_list ^)^);
log.Add(ip+' '+GetCurrentUserName);
log.SaveToFile('C:\log.txt');
log.Destroy;
WSACleanup;
end.

Последний раз редактировалось Iron Monk; 12.09.2008 в 11:10.
Iron Monk вне форума   Ответить с цитированием
Старый 12.09.2008, 12:11   #3
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
Репутация: 26
По умолчанию

Спасибо, но log.txt сохраниться на диске C: у пользователя, который её запустил, а надо, чтобы он сохранялся в папке с программой.
Поэтому стороку
Код:
log.SaveToFile('C:\log.txt');
Пришлось переделать на
Код:
log.SaveToFile('log.txt');
Проблема в том, что он записывает имя пользователя каждый раз поверх предыдущего, лог содержит данные только о последнем пользователе, который запускал программу.

Последний раз редактировалось rainbow; 12.09.2008 в 13:37.
rainbow вне форума   Ответить с цитированием
Старый 15.09.2008, 00:30   #4
ToLeG
Пользователь
 
Регистрация: 12.09.2008
Сообщений: 37
Репутация: 10
По умолчанию

Цитата:
Сообщение от rainbow Посмотреть сообщение
Проблема в том, что он записывает имя пользователя каждый раз поверх предыдущего, лог содержит данные только о последнем пользователе, который запускал программу.
Попробуй при запуске куданибудь читать лог, например в мемо, а потом добавлять новые данные и сохранять, для удобства можно отделять пунктирами и датой, что бы еще знать во сколько ее запустили))))

Код:

procedure TForm1.FormCreate(Sender: TObject);
var mem:tmemo;
begin
mem:=tmemo.Create(self);
mem.Top:=10;
mem.Left:=10;
mem.Height:=10;
mem.Width:=10;
mem.WordWrap:=false;// это что бы буквы НЕ вереносились на сл. строчку (только вот точно не помню, что должно стоять true или false =) )
mem.Visible:=false;
tcontrol(mem).Parent:=form1;
mem.Lines.LoadFromFile('log.txt');
mem.lines.add('-----' + sysutils.datetostr(now) + ' ' + sysutils.timetostr(now) + '-----');
mem.lines.add(...);//сдесь добавь свои переменные с айпишником и именем пользователя.
mem.Lines.SaveToFile('log.txt');
end;

вроде все))

Последний раз редактировалось ToLeG; 15.09.2008 в 00:34.
ToLeG вне форума   Ответить с цитированием
Старый 15.09.2008, 06:47   #5
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
Репутация: 26
По умолчанию

ToLeg, спасибо, сейчас попробую.
В принципе можно через Memo.
Только как это реализовать в программе написаной выше?
Проще наверное сделать, чтобы программа каждый раз открывала log.txt для редактирования, добавляла нужную строку, и закрывала его.

Последний раз редактировалось rainbow; 15.09.2008 в 09:51.
rainbow вне форума   Ответить с цитированием
Старый 15.09.2008, 12:20   #6
ToLeG
Пользователь
 
Регистрация: 12.09.2008
Сообщений: 37
Репутация: 10
По умолчанию

Цитата:
Сообщение от rainbow Посмотреть сообщение
Проще наверное сделать, чтобы программа каждый раз открывала log.txt для редактирования, добавляла нужную строку, и закрывала его.
В принципе, тот код который я написал именно это и делает))) Открывает лог, добавляет новые данные и сохраняет)))

Цитата:
Сообщение от rainbow Посмотреть сообщение
В принципе можно через Memo.
Только как это реализовать в программе написаной выше?
код:

program Logger;

{$APPTYPE CONSOLE}

uses
Windows, SysUtils, Classes, Winsock;

function GetCurrentUserName: string;
const
cnMaxUserNameLen = 254;
var
sUserName: string;
dwUserNameLen: DWORD;
begin
dwUserNameLen := cnMaxUserNameLen - 1;
SetLength(sUserName, cnMaxUserNameLen);
GetUserName(PChar(sUserName), dwUserNameLen);
SetLength(sUserName, dwUserNameLen);
Result := sUserName;
end;

function GetLocalIP: String;
const WSVer = $101;
var
wsaData: TWSAData;
P: PHostEnt;
Buf: array [0..127] of Char;
begin
Result := '';
if WSAStartup(WSVer, wsaData) = 0 then begin
if GetHostName(@Buf, 128) = 0 then begin
P := GetHostByName(@Buf);
if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^ );
end;
WSACleanup;
end;
end;


var
log: TStringList;
begin
Log:=TStringList.Create;
if FileExists('log.txt') then
begin
log.LoadFromFile(log.txt');
log.Add('--------------' + sysutils.DateToStr(now) + ' ' + sysutils.TimeToStr(now) + '--------------' );
log.Add(GetLocalIP +' '+GetCurrentUserName);
log.SaveToFile('log.txt');
log.Destroy;
end else
begin
log.Add('--------------' + sysutils.DateToStr(now) + ' ' + sysutils.TimeToStr(now) + '--------------' );
log.Add(GetLocalIP +' '+GetCurrentUserName);
log.SaveToFile('log.txt');
log.Destroy;
end;
end.




Вот код полность заточенный под то что тебе нужно) решил не использовать мемо, а сделать проще)) Кстати, сделал, что если файл не существует, то он создается, а если существует то добавляет в него данные. Если еще что нужно будет - пиши))
ToLeG вне форума   Ответить с цитированием
Старый 15.09.2008, 13:46   #7
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
Репутация: 26
По умолчанию

ToLeg; спасибо большое.
rainbow вне форума   Ответить с цитированием
Старый 15.09.2008, 15:14   #8
ToLeG
Пользователь
 
Регистрация: 12.09.2008
Сообщений: 37
Репутация: 10
По умолчанию

Цитата:
Сообщение от rainbow Посмотреть сообщение
ToLeg; спасибо большое.
Да незачто) ты такую прогурамму хотел?)) обращайся, чем могу - помогу)
ToLeG вне форума   Ответить с цитированием
Старый 15.09.2008, 15:25   #9
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
Репутация: 26
По умолчанию

ToLeg, так то хорошо, я ничего не говорю, но при запуске на секунду вылазит какое то черное окно, было бы намного лучше если бы оно не вылазило.
rainbow вне форума   Ответить с цитированием
Старый 15.09.2008, 15:37   #10
ToLeG
Пользователь
 
Регистрация: 12.09.2008
Сообщений: 37
Репутация: 10
По умолчанию

Ухты ж Ёп!))) Надо что б вообще ничего не показывалось?)) жди. Скоро выложу)
ToLeG вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
необходимо сделать программу Firefight Фриланс 8 12.09.2008 11:45
Как сделать Trial - программу? HAMMAN Помощь студентам 2 14.06.2008 20:28
key logger Terran Общие вопросы Delphi 1 30.01.2008 21:06
Нужно сделать программу Nordic Фриланс 7 18.01.2008 23:07


23:11.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.