Нужно из журнала событий Безопсаность винды загружать события входа и выхода в LIstView. Но так как написал я это происходит очень медленно. Может кто поможет!
Я это сделал так:
/// <summary>
/// Поиск сообщения выхода пользователя
/// </summary>
/// <param name="index">Номер события</param>
/// <param name="user">Имя пользователя</param>
/// <returns></returns>
private string findLogOut(int index, string user)
{
EventLog evLog = new EventLog("Security");
EventLogEntryCollection evLogCol = evLog.Entries;
string[] userSpl;
int numEnt = evLogCol.Count;
for(int i = 0; i < numEnt; i++)
{
if(evLogCol[i].UserName != "")
{
if(evLogCol[i].UserName != null)
{
userSpl = evLogCol[i].UserName.Split('\\');
if(userSpl[1] == user)
{
if(evLogCol[i].EventID == 551 & evLogCol[i].Index > index)
{
return evLogCol[i].TimeGenerated.ToLongTimeString()+'|'+evLogCol[i].TimeGenerated.ToShortDateString();
}
}
}
}
else
{
}
}
return "error|error";
}
/// <summary>
/// Заполнение по дате
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
private void fillByDate(string start, string end)
{
lv_events.Items.Clear();
EventLog evLog = new EventLog("Security");
EventLogEntryCollection evLogCol = evLog.Entries;
string logOut = "";
string[] user, outTime;
int curItem = 0;
DateTime dtSt = Convert.ToDateTime(start);
DateTime dtEnd = Convert.ToDateTime(end);
int numEnt = evLogCol.Count;
for(int i = 0; i < numEnt; i++)
{
if(DateTime.Compare(dtSt,evLogCol[i].TimeGenerated.Date) >= 0)
{
if(DateTime.Compare(dtEnd, evLogCol[i].TimeGenerated.Date) <= 0)
{
if(evLogCol[i].EventID == 528)
{
lv_events.Items.Add(evLogCol[i].TimeGenerated.ToLongTimeString());
curItem = lv_events.Items.Count - 1;
lv_events.Items[curItem].SubItems.Add(evLogCol[i].TimeGenerated.ToShortDateString());
user = evLogCol[i].UserName.Split('\\');
logOut = findLogOut(evLogCol[i].Index, user[1]);
outTime = logOut.Split('|');
lv_events.Items[curItem].SubItems.Add(outTime[0].ToString());
lv_events.Items[curItem].SubItems.Add(outTime[1].ToString());
lv_events.Items[curItem].SubItems.Add(user[1]);
lv_events.Items[curItem].SubItems.Add(user[0]);
}
}
}
}
}
///ТУт ListView заполняем всеми событиями!
private void fillAll()
{
EventLog evLog = new EventLog("Security");
EventLogEntryCollection evLogCol = evLog.Entries;
string logOut = "";
string[] user = new string[2];
string[] outTime = new string[2];
int curItem = 0;
int numEnt = evLogCol.Count;
for(int i = 0; i < numEnt; i++)
{
if(evLogCol[i].EventID == 528)
{
lv_events.Items.Add(evLogCol[i].TimeGenerated.ToLongTimeString());
curItem = lv_events.Items.Count - 1;
lv_events.Items[curItem].SubItems.Add(evLogCol[i].TimeGenerated.ToShortDateString());
if(evLogCol[i].UserName != "")
{
if(evLogCol[i].UserName != null)
{
user = evLogCol[i].UserName.Split('\\');
logOut = findLogOut(evLogCol[i].Index, user[1]);
outTime = logOut.Split('|');
}
}
else
{
outTime[0] = "error";
outTime[1] = "error";
user[0] = "NULL";
user[1] = "NULL";
}
lv_events.Items[curItem].SubItems.Add(outTime[0].ToString());
lv_events.Items[curItem].SubItems.Add(outTime[1].ToString());
lv_events.Items[curItem].SubItems.Add(user[1]);
lv_events.Items[curItem].SubItems.Add(user[0]);
}
}
}
21.03.06 10:45: Перенесено модератором из '.NET' — TK