Расчеты времени простоя системы Windows и общая продолжительность простоя в коде С#?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Расчеты времени простоя системы Windows и общая продолжительность простоя в коде С#?

Сообщение Anonymous »

Разработано Windows-приложение для отслеживания активности пользователей. необходимо подсчитать, сколько времени пользователь не использовал систему и сколько времени использовала система для работы с использованием приложения C#. Я использую код, но не получил правильного значения времени простоя и продолжительности. Может кто-нибудь помочь мне, как решить эту проблему.

Код: Выделить всё

       public class clsAttendance
{
int _IdleCount = 0;

[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

public clsAttendance()
{
_clsData = new clsDataConnection();
}

public uint GetIdleTime()
{
LASTINPUTINFO lastInPut = new LASTINPUTINFO();
lastInPut.cbSize =
(uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut);
GetLastInputInfo(ref lastInPut);

return ((uint)Environment.TickCount - lastInPut.dwTime);
}

public uint GetLastInputTime()
{
uint idleTime = 0;
LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
lastInputInfo.cbSize = (uint)Marshal.SizeOf(lastInputInfo);
lastInputInfo.dwTime = 0;

uint envTicks = (uint)Environment.TickCount;

if (GetLastInputInfo(ref lastInputInfo))
{
uint lastInputTick = lastInputInfo.dwTime;

idleTime = envTicks - lastInputTick;
}

return ((idleTime > 0) ? (idleTime / 1000) : 0);
}

}

internal struct LASTINPUTINFO
{
public uint cbSize;

public uint dwTime;
}

private void Form1_Load(object sender, EventArgs e)
{
a = new Timer();
a.Tick += A_Tick;
a.Interval = 10 * 60 * 1000;
a.Start();

}

private void A_Tick(object sender, EventArgs e)
{

ExceptionLogger.WriteErrorLog($"Current time: {DateTimeOffset.Now}");

ExceptionLogger.WriteErrorLog($"Last input time without timespan: {  clsSystemIdle.GetLastInputTime()}");

ExceptionLogger.WriteErrorLog($"Idle time without timespan: {_clsAtt.GetIdleTime()}");

ExceptionLogger.WriteErrorLog(Message: $"Last Input TimeSpan Minutes : {TimeSpan.FromMilliseconds(clsSystemIdle.GetLastInputTime())}");

ExceptionLogger.WriteErrorLog(Message: $"Idle TimeSpan Minutes : {TimeSpan.FromMilliseconds(_clsAtt.GetIdleTime())}");

}
Последние 40 минут не использовались клавиатура и мышь, затем возвращен результат ниже:
Текущее время: 04.03.2022, 13:49:59 +05:30
Время последнего ввода без временного интервала: 125
Время простоя без временного интервала: 125266
Время последнего ввода: 00:00:00.1250000
Время простоя: 00:02:05.3440000
Текущее время: 04.03.2022 13:59:59 +05:30
Время последнего ввода без временного интервала: 22
Время простоя без временного интервала: 22203
TimeSpan последнего ввода: 00:00:00.0220000
TimeSpan простоя: 00:00:22.2810000
Текущее время: 04.03.2022 14:09:59 +05:30
Время последнего ввода без временного интервала: 101
Время простоя без временного интервала: 101329
Время последнего ввода: 00:00:00.1010000
Время простоя: 00:01:41.4380000
Текущее время: 04.03.2022 14:19:59 +05:30
Время последнего ввода без временного интервала: 3
Время простоя без временного интервала: 3172
TimeSpan последнего ввода: 00:00:00.0030000
Idle TimeSpan: 00:00:03.1720000
Здесь я хочу последние 40 минут простоя системы, но как получить 40 значение минут из приведенных выше возвращаемых значений и распечатать файл журнала исключений. Подскажите пожалуйста, как решить эту задачу.

Подробнее здесь: https://stackoverflow.com/questions/713 ... in-c-sharp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»