Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2012, 20:16   #1
KrityKris
Новичок
Джуниор
 
Регистрация: 14.10.2012
Сообщений: 2
Вопрос Время работы процессов

Собственно сабж, есть список процессов, нужно узнать время начала работы и время завершения каждого процесса.
Список процессов получаю через System.Diagnostics. Методов связанных со временем не нашёл.
KrityKris вне форума Ответить с цитированием
Старый 15.10.2012, 00:30   #2
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

GetProcessTimes
coNsept вне форума Ответить с цитированием
Старый 01.11.2012, 18:20   #3
KrityKris
Новичок
Джуниор
 
Регистрация: 14.10.2012
Сообщений: 2
По умолчанию

coNsept, спасибо. Повозился с WinAPI. Получилось отловить начало работы процесса, но не получается отловить завершения работы процесса. Сделал сначала так: получаю id процесса, по id получаю дескриптор процесса. После этого вызываю GetProcessTimes и вывожу всё на экран.

PHP код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;//Для вызова библиотеки WinAPI
using System.Diagnostics;

namespace 
ConsoleApplication1
{
    class 
Program
    
{
        static 
void Main(string[] args)
        {
            
Process[] processes;
            
System.Runtime.InteropServices.FILETIME ftCreationftExitftKernelftUser;
            
//Получить список запущенных процессов
            
processes Process.GetProcesses();

            foreach (
Process elem in processes)
            {
                
IntPtr ip System.Diagnostics.Process.GetProcessById(elem.Id).Handle;
                
Console.WriteLine(GetProcessTimes(ipout ftCreationout ftExitout ftKernelout ftUser));
                
Console.WriteLine("Creation {0}"FiletimeToDateTime(ftCreation));
                
Console.WriteLine("Exit {0}"FiletimeToDateTime(ftExit));
                
Console.WriteLine("Kernel {0}"FiletimeToDateTime(ftKernel));
                
Console.WriteLine("User {0}"FiletimeToDateTime(ftUser));
            }
            
Console.ReadLine();
        }

        [
DllImport("kernel32.dll")]
        static 
extern bool GetProcessTimes(IntPtr hProcess,
            
out System.Runtime.InteropServices.FILETIME lpCreationTime,
            
out System.Runtime.InteropServices.FILETIME lpExitTime,
            
out System.Runtime.InteropServices.FILETIME lpKernelTime,
            
out System.Runtime.InteropServices.FILETIME lpUserTime);

        public static 
DateTime FiletimeToDateTime(System.Runtime.InteropServices.FILETIME fileTime)
        {
            
long hFT2 = (((long)fileTime.dwHighDateTime) << 32) + fileTime.dwLowDateTime;
            return 
DateTime.FromFileTimeUtc(hFT2);
        }
    }

Но получить ID завершённых процессов не могу. Да и похоже нет смысла. Попробовал создать блокнот, узнал его ID. Закрыл блокнот.указал ID закрытого блокнота и запустил GetProcessTimes. Вылетело с ошибкой - указанный ID не найден.
Как отловить закрытие процесса?
KrityKris вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Завершение работы и время в C++ Дэнис Помощь студентам 9 27.02.2012 23:38
Время работы компьютера artemavd Общие вопросы Delphi 10 01.03.2010 22:40
Время работы программы Magist Компоненты Delphi 5 24.10.2009 20:52
Переформулирую вопрос про время процессов student_63 Win Api 7 14.04.2008 10:34
Время работы сортировок Боня Помощь студентам 1 10.02.2007 17:53