Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319

Отслеживание запуска процессов в реальном времени

13.07.2021, 18:52. Показов 7080. Ответов 41

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Пишу программу, которая будет отображать историю запуска/закрытия процессов ПК в реальном времени.
Как можно сделать это отслеживание не при запуске программы а на момент запуска/закрытия процесса, и как узнать имя запущенного или закрытого процесса?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.07.2021, 18:52
Ответы с готовыми решениями:

Отслеживание в реальном времени
Всё просто, есть переменная, которая инкрементится и когда она будет больше необходимого, надо произвести замену в поле, для этого,...

Отслеживание установки/удаления программ в реальном времени
здравствуйте, пишу службу для мониторинга пк, и встала задача отслеживать установку/удаление программ, в реальном времени. Вопрос вот в...

Смоделировать систему, указанную в варианте, в реальном времени (или, по желанию, и в реальном, и при помощи квантования времени
Тещины блины - Теща печет блины, укладывая их в глубокие кастрюли. Зять с отменным аппетитом эти блины из кастрюли вытаскивает и съедает....

41
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319
16.07.2021, 12:13  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от wizard41 Посмотреть сообщение
Ну а вообще - заготовьте все диалоги и фразы сразу в готовом виде
Так изначально и было, но потом пошли жалобы, что невозможно дополнить диалоги.
Основная задумка в том, чтобы пользователи могли дополнять свои диалоги и фразы к разным процессам.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
16.07.2021, 12:24
Цитата Сообщение от SAn4Es_2005 Посмотреть сообщение
Так изначально и было, но потом пошли жалобы, что невозможно дополнить диалоги.
Основная задумка в том, чтобы пользователи могли дополнять свои диалоги и фразы к разным процессам.
Ну так пусть добавляют в файл, в чем проблема?
С каждым новым процессом файл считывается заново, поэтому добавлять можно прям в процессе работы программы.
Мне просто немного не понятна связка диалог + фраза к нему, т.е. что и как выбирается и по каким критериям.

Добавлено через 2 минуты
Ну а вообще - заготовьте все диалоги и фразы сразу в готовом виде
Имеется в виду в текстовом файле прописать все возможные комбинации диалогов и фраз, затем вытаскивать их в List<>, а уже из листа тянуть одну случайную строку.
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319
16.07.2021, 12:59  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Мне просто немного не понятна связка диалог + фраза к нему, т.е. что и как выбирается и по каким критериям.
Смотрите:
Есть файл с списком диалогов к процессам.
В каждый диалог состоит из фраз(от одной до до 10).
Как это должно работать:
1. Запустили процесс chrome.exe
2. Нашли набор диалогов для этого процесса
3. Берём случайный диалог из найденого набора
4. Показываем каждую фразу из случайного диалога по очереди.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
16.07.2021, 13:10
Цитата Сообщение от SAn4Es_2005 Посмотреть сообщение
Смотрите:
Есть файл с списком диалогов к процессам.
В каждый диалог состоит из фраз(от одной до до 10).
Как это должно работать:
1. Запустили процесс chrome.exe
2. Нашли набор диалогов для этого процесса
3. Берём случайный диалог из найденого набора
4. Показываем каждую фразу из случайного диалога по очереди.
Что есть "диалог" и "фраза" из него в контексте данной задачи?
Например, отловили процесс "chrome". Показываем случайный диалог "Запущен хром!". Данный диалог состоит из двух слов. Может быть их вы относите к "фразам" ?
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319
16.07.2021, 13:29  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Может быть их вы относите к "фразам" ?
Нет.
Диалог - набор фраз. фраза - набор слов.
мне нужно выбрать случайный диалог, и показать все его фразы.
Кликните здесь для просмотра всего текста
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
16.07.2021, 14:01
Цитата Сообщение от SAn4Es_2005 Посмотреть сообщение
Нет.
Диалог - набор фраз. фраза - набор слов.
мне нужно выбрать случайный диалог, и показать все его фразы.
Хм, спрошу по другому - чем диалог отличается от фразы?
Если я правильно понял, то вы хотите конструкцию подобную этой:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[имя процесса 1]
...[диалог 1]
......[фраза 1]
......[фраза 2]
......[фраза n]
 
...[диалог 2]
......[фраза 1]
......[фраза 2]
......[фраза n]
 
...[диалог N]
......[фраза 1]
......[фраза 2]
......[фраза N]
где [Диалог] выбирается случайным образом и показываются все его вложенные фразы. Так?
Даже если этот конструктив хранить (добавлять) в текстовом файле, думаю, не все пользователи так легко и без ошибок смогут это сделать, не нарушив при этом структуру. XML для этого лучше всего подойдет.
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319
16.07.2021, 14:56  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Если я правильно понял, то вы хотите конструкцию подобную этой:
Да, верно.
Цитата Сообщение от wizard41 Посмотреть сообщение
не все пользователи так легко и без ошибок смогут это сделать
за это можно не волноватся.
Цитата Сообщение от wizard41 Посмотреть сообщение
XML для этого лучше всего подойдет.
Повторюсь - важно чтобы был именно TXT.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
16.07.2021, 15:03
Цитата Сообщение от SAn4Es_2005 Посмотреть сообщение
Да, верно.
за это можно не волноватся.

Повторюсь - важно чтобы был именно TXT.
Понятно. Будет время, набросаю один из вариантов.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
16.07.2021, 18:40
Собственно, держите:
Файл с диалогами и фразами:
Кликните здесь для просмотра всего текста

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
[chrome]
<диалог для хрома 1>
фраза 1 диалога 1 процесса chrome
фраза 2 диалога 1 процесса chrome
фраза 3 диалога 1 процесса chrome
<диалог для хрома 2>
фраза 1 диалога 2 процесса chrome
фраза 2 диалога 2 процесса chrome
фраза 3 диалога 2 процесса chrome
<диалог для хрома 3>
фраза 1 диалога 3 процесса chrome
фраза 2 диалога 3 процесса chrome
фраза 3 диалога 3 процесса chrome
<диалог для хрома 4>
фраза 1 диалога 4 процесса chrome
фраза 2 диалога 4 процесса chrome
фраза 3 диалога 4 процесса chrome
 
[opera]
<диалог для оперы 1>
фраза 1 диалога 1 процесса opera
фраза 2 диалога 1 процесса opera
фраза 3 диалога 1 процесса opera
<диалог для оперы 2>
фраза 1 диалога 2 процесса opera
фраза 2 диалога 2 процесса opera
фраза 3 диалога 2 процесса opera
<диалог для оперы 3>
фраза 1 диалога 3 процесса opera
фраза 2 диалога 3 процесса opera
фраза 3 диалога 3 процесса opera
 
[unity]
<диалог для юнити 1>
фраза 1 диалога 1 процесса unity
фраза 2 диалога 1 процесса unity
фраза 3 диалога 1 процесса unity
<диалог для юнити 2>
фраза 1 диалога 2 процесса unity
фраза 2 диалога 2 процесса unity
фраза 3 диалога 2 процесса unity
 
[aimp]
<диалог для аимпа 1>
фраза 1 диалога 1 процесса aimp
фраза 2 диалога 1 процесса aimp
фраза 3 диалога 1 процесса aimp
<диалог для аимпа 2>
фраза 1 диалога 2 процесса aimp
фраза 2 диалога 2 процесса aimp
фраза 3 диалога 2 процесса aimp
<диалог для аимпа 3>
фраза 1 диалога 3 процесса aimp
фраза 2 диалога 3 процесса aimp
фраза 3 диалога 3 процесса aimp
<диалог для аимпа 4>
фраза 1 диалога 4 процесса aimp
фраза 2 диалога 4 процесса aimp
фраза 3 диалога 4 процесса aimp

Здесь, [ххххх] - это процессы, <ххххх> - диалоги. Просто строки - это фразы.

Код c#:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
class Program
    {
 
        private class Dialogs
        {
            private string dialog;
 
            public string Dialog
            {
                get { return dialog; }
                set { dialog = value; }
            }
 
            public List<string> Phrases { get; private set; }
 
            //Конструктор
            public Dialogs()
            {
                //Инициализируем List
                Phrases = new List<string>();
            }
        }
 
 
        
        static void Main( string[] args )
        {
            string sPath = "phrases.txt";
 
            //Список объектов класса Dialogs
            //Сюда будут залетать все диалоги со своими фразами для конкретного процесса
            List<Dialogs> lst = new List<Dialogs>();
 
 
            while ( true )
            {
                Console.Write( "Proccess name: " );
 
                //Ввод имени интересующего процесса
                string proc = Console.ReadLine();
 
 
                using ( StreamReader sr = new StreamReader( sPath ) )
                {
                    string line;
 
                    //Начинаем читать файл...
                    while ( ( line = sr.ReadLine() ) != null )
                    {
 
                        //Если начало строки начинается с '[', значит это имя процесса
                        if ( line.StartsWith( "[" ) )
                        {
                            //Читаем имя процесса из файла
                            //Если имя процесса из файла совпало с текущим процессом...
                            if ( line.Trim( new char[] { '[', ']' } ) == proc )
                            {
                                //Читаем следующую строку
                                line = sr.ReadLine();
 
                                do 
                                {
                                    //Если это диалог (а мы ожидаем именно его:)
                                    if ( line.StartsWith( "<" ) )
                                    {
                                        //Создаем новый экземпляр класса Dialogs
                                        Dialogs dl = new Dialogs
                                        {
                                            //Извлекаем диалог - обрезаем символы <> и вставляем в поле Dialog
                                            Dialog = line.Trim( new char[] { '<', '>' } )
                                        };
 
                                        do
                                        {
                                            //Считываем следующую строку (фразы диалога)
                                            line = sr.ReadLine();
 
                                            //Если конец файла, начало нового диалога или другой процесс - выходим
                                            if ( 
                                                
                                                line == null 
                                                || line.StartsWith( "<" )
                                                || line.StartsWith( "[" ) 
                                                
                                                ) { break; }
 
                                            //Добавляем фразы с список фраз текущего экземпляра класса
                                            dl.Phrases.Add( line );
 
                                        }
                                        //Читаем до посинения
                                        while ( true );
 
                                        //Добавляем класс в список классов Dialogs
                                        lst.Add( dl );
                                    }
 
                                    //Если конец файла - выходим
                                    if ( line == null ) { break; }
                                }
 
                                //Читаем пока не закончатся диалоги текущего процесса
                                while ( !line.StartsWith( "[" ) );
                            }
                        }  
                    }
                }
 
 
                //Вывод всех диалогов текущего процесса с фразами
                //Для отладки... (удалить)
                for ( int i = 0; i < lst.Count; i++ )
                {
                    Console.WriteLine( "[{0}]", lst[ i ].Dialog );
 
                    for ( int j = 0; j < lst[ i ].Phrases.Count; j++ )
                    {
                        Console.WriteLine( "--> {0}", lst[ i ].Phrases[ j ] );
                    }
                }
 
 
                Console.WriteLine( "\n------Выборка случайного диалога------\n" );
 
                Random rnd = new Random();
                int n = rnd.Next( 0, lst.Count );
 
                //Выводим диалог
                Console.WriteLine( "[{0}]", lst[ n ].Dialog );
 
                //Выводим список фраз к нему
                for ( int i = 0; i < lst[ n ].Phrases.Count; i++ )
                {
                    Console.WriteLine( "--> {0}", lst[ n ].Phrases[ i ] );
                }
 
                Console.WriteLine( "\n" );
 
 
                //Чистим список классов Dialogs
                lst.Clear();
            }
        }
    }

Комментариев в коде должно быть достаточно для понимания происходящего.

Ну, и собственно результат:
https://www.cyberforum.ru/atta... 1626449917
Миниатюры
Отслеживание запуска процессов в реальном времени  
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
16.07.2021, 19:08
P.S.
Файл с диалогами и фразами я создал программно. Разумеется, названия процессов, диалогов и фраз может быть любым. Нужно лишь придерживаться следующей схемы:
[имя_процесса_1]
<диалог_1>
фраза 1
фраза 2
...
<диалог_2>
фраза 1
фраза 2
...

[имя_процесса_2]
и т.д.

Добавлено через 13 минут
P.S.S.
Обнаружил небольшой "косячок":
Обратите внимание, после строки на скриншоте
Code
1
--> фраза 3 диалога 3 процесса opera
пропечаталась еще одна пустая строка (начинается с -->).
Это произошло из-за того, что в список фраз этого диалога затесалась пустая строка из файла, следующая сразу после последней фразы.
Попробуйте самостоятельно избавится от этого бага
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
17.07.2021, 13:16
Вот вам для затравки - продвинутый вариант:

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
            string sPath = "phrases.txt";
            string[] lines;
            List<string> list = new List<string>();
            Random rnd = new Random();
 
            using ( StreamReader sr = new StreamReader( sPath ) )
            {
                lines = sr.ReadToEnd().Split( '\n' );
            }
 
            //Вечный цикл...
            while ( true )
            {
                Console.Write( "Введите имя процесса: " );
                string proc = Console.ReadLine();
 
                //Смотрим все процессы в файле и сравниваем с нашим
                //Если такой процесс нашелся, то выбираем все его диалоги и фразы в List<>
                var proccesses = lines.Select( ( v, i ) => new { i, v } ).Where( t => t.v.StartsWith( "[" ) );
                foreach ( var s in proccesses )
                {
                    if ( s.v.Trim( new char[] { '[', ']', '\r' } ) == proc )
                    {
                        var dialogs = lines.Skip( s.i + 1 ).TakeWhile( x => !x.StartsWith( "[" ) );
 
                        foreach ( var v in dialogs )
                        {
                            if ( v == "\r" ) continue; //Здесь избавляемся от той проблемы с пустой строкой, в посте выше.
                            list.Add( v );
                        }
                        break;
                    }
                }
 
 
                //Ищем индексы вхождений строк диалогов (начинаются с "<")
                var dialIdx = list.Select( ( v, i ) => new { i, v } ).Where( t => t.v.StartsWith( "<" ) );
                List<int> idx = new List<int>();
 
                //Добавляем эти индексы в список, из которого будем брать случайный элемент (диалог)
                foreach ( var s in dialIdx )
                    idx.Add( s.i );
 
                //ГПСЧ
                int rx = rnd.Next(0, idx.Count );
 
                //Если список пуст -> уходим на второй круг... (т.е. такого процесса нет)
                if ( list.Count == 0 ) continue;
 
 
                Console.WriteLine( "\n<----------Вывод случайного диалога---------->\n" );
 
                //Печатаем диалог
                var Dialog = list.Skip( idx[ rx ] ).Take(1).Select( s => s ).ToArray();
                Console.WriteLine( Dialog[ 0 ] );
 
                //Печатаем фразы к нему
                var Phrases = list.Skip( idx[ rx ] + 1 ).TakeWhile( x => !x.StartsWith( "<" ) );
                foreach ( var s in Phrases )
                    Console.WriteLine( s );
 
                Console.WriteLine();
 
                //Моем полы
                list.Clear();


Файл с диалогами тот же, что и в предыдущем посте.
Миниатюры
Отслеживание запуска процессов в реальном времени  
1
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319
17.07.2021, 13:40  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
//Вечный цикл...
            while ( true )
А можно как-то без вечного цыкла?
Я просто использую WPF, и мне нужно, чтобы текстовое поле показало фразы, и очистилось.
А с циклом оно бесконечно отображает даже в окне "вывод"
Попытка удалить while и continue сотворяет ошибку System.ArgumentOutOfRangeException при запуске процесса, который не состоит в файле:
Кликните здесь для просмотра всего текста
0
 Аватар для Kazbek17
1485 / 939 / 455
Регистрация: 06.02.2012
Сообщений: 2,870
17.07.2021, 13:54
SAn4Es_2005,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        /// <summary>
        /// Класс диалог
        /// </summary>
        public class Dialog
        {
            /// <summary>
            /// Заголовок
            /// </summary>
            public string Header { get; set; }
 
            /// <summary>
            /// список значение
            /// </summary>
            public List<string> Value { get; set; } = new List<string>();
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 /// <summary>
        /// Класс процесс
        /// </summary>
        public class DataProcess
        {
            private Dictionary<string, List<Dialog>> ProcessList = new Dictionary<string, List<Dialog>>();
            private Random rdn = new Random();
            private List<Dialog> _dialogList;
            private Dialog dialog;
            private string key;
 
            /// <summary>
            /// Получаем рандомный диалог по названию процесса
            /// </summary>
            /// <param name="NameProcess">Название процесса</param>
            /// <returns></returns>
            public string GetDialog(string NameProcess)
            {
                if (ProcessList.ContainsKey(NameProcess))
                {
                    _dialogList = ProcessList [NameProcess];
                    int num = rdn.Next(0, _dialogList.Count);
                    Dialog dlg = ProcessList [NameProcess] [num];
                    return string.Concat(dlg.Header, "\n\r", string.Join("\n\r", dlg.Value));
                }
                else
                    return string.Empty;
            }
 
            /// <summary>
            /// Загружаем файл
            /// </summary>
            /// <param name="path">Путь к файлу</param>
            public void LoadFile(string path)
            {
                IEnumerable<string> lines = File.ReadLines(path, Encoding.UTF8);
                foreach (string line in lines)
                {
                    if (line.Contains('['))
                    {
                        if (!ProcessList.ContainsKey(line))
                        {
                            key = line.Replace("[", "").Replace("]", "");
                            _dialogList = new List<Dialog>();
                            ProcessList.Add(key, _dialogList);
                        }
                    }
                    else
                    {
                        if (line.Contains('<'))
                        {
                            dialog = new Dialog
                            {
                                Header = line.Replace("<", "").Replace(">", "")
                            };
                            ProcessList [key].Add(dialog);
                        }
                        else
                        {
                            dialog.Value.Add(line);
                        }
                    }
                }
            }
        }
C#
1
2
3
4
5
6
        private void btn_Click(object sender, EventArgs e)
        {
            DataProcess _proccess = new DataProcess();
            _proccess.LoadFile("Путь к файлу по примеру выше");
            Console.WriteLine(_proccess.GetDialog("unity"));
        }
А дальше уже с процессами играйте. и подсовывайте в метод GetDialog
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319
17.07.2021, 14:47  [ТС]
Всё, я нашёл решение:
Я просто перед выводом диалога поставил проверку на пустой список:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            if (list.Count != 0)
            {
                Console.WriteLine("\n<----------Вывод случайного диалога---------->\n");
 
                //Печатаем диалог
                var Dialog = list.Skip(idx[rx]).Take(1).Select(s => s).ToArray();
                Console.WriteLine(Dialog[0]);
 
                //Печатаем фразы к нему
                var Phrases = list.Skip(idx[rx] + 1).TakeWhile(x => !x.StartsWith("<"));
                foreach (var s in Phrases)
                    Console.WriteLine(s);
 
            }
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
17.07.2021, 15:03
Цитата Сообщение от SAn4Es_2005 Посмотреть сообщение
А можно как-то без вечного цыкла?
Я просто использую WPF, и мне нужно, чтобы текстовое поле показало фразы, и очистилось.
А с циклом оно бесконечно отображает даже в окне "вывод"
Попытка удалить while и continue сотворяет ошибку System.ArgumentOutOfRangeException при запуске процесса, который не состоит в файле:
Вечный цикл здесь применен для консоли, чтобы можно было проверять все процессы, вводя их имена в консоль.
Для оконных приложений и тем более WPF концепция меняется, и там while( true ) вообще не нужен.
Если вкратце, то все что находится внутри этого цикла вы должны запихнуть в свой метод или событие.. не знаю что там у вас.
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319
17.07.2021, 15:40  [ТС]
wizard41, Вернусь к исходному вопросу(вы уж извините).
Цитата Сообщение от wizard41 Посмотреть сообщение
System.Diagnostics ---> Process
Как можно узнать что процесс запущен?
Мне нужно узнать именно процесс, а не подпроцессы(как вкладки в хроме).
Через System.Diagnostics.Process.ProcessName можно то, что мне нужно.
Но как понять, что процесс запущен?
Имя запускаемого процесса заранее предсказать невозможно
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
17.07.2021, 15:53
Цитата Сообщение от SAn4Es_2005 Посмотреть сообщение
wizard41, Вернусь к исходному вопросу(вы уж извините).

Как можно узнать что процесс запущен?
Мне нужно узнать именно процесс, а не подпроцессы(как вкладки в хроме).
Через System.Diagnostics.Process.ProcessName можно то, что мне нужно.
Но как понять, что процесс запущен?
Имя запускаемого процесса заранее предсказать невозможно
Process.GetProccesses() возвращает все запущенные в данный момент процессы. Естественно, его нужно периодически вызывать.
На счет вкладок - если есть хоть один из процессов chrome - значит процесс запущен.
Имя запускаемого процесса заранее предсказать невозможно
Вот это не совсем понятно. Что значит невозможно? И как вы собираетесь отлавливать "неизвестные" процессы?

Добавлено через 4 минуты
А по хорошему, все что связано с выяснением текущих процессов вам надо бы оформить в виде сервиса и засунуть в трей. Пусть он там сидит и мониторит процессы. При появлении "нужных" процессов - отсылает его ID, Name и прочее уже оконному приложению.
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319
17.07.2021, 15:54  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
возвращает все запущенные в данный момент процессы
Нет, это не то. Мне нужно показывать диалог именно при запуке процесса, а не просто когда процесс запущен(вдруг процесс запустят первее, чем приложение).
Цитата Сообщение от wizard41 Посмотреть сообщение
Что значит невозможно?
Программно не определить какой процесс запустится следующим.

Есть ли какое-то событие, по типу:
"Когда запустился какой-то процесс, узнать его имя и вывести диалог"
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
17.07.2021, 16:00
Цитата Сообщение от SAn4Es_2005 Посмотреть сообщение
Нет, это не то. Мне нужно показывать диалог именно при запуке процесса, а не просто когда процесс запущен(вдруг процесс запустят первее, чем приложение).

Программно не определить какой процесс запустится следующим.

Есть ли какое-то событие, по типу:
"Когда запустился какой-то процесс, узнать его имя и вывести диалог"
Мониторьте процессы каждую секунду и будет вам счастье. А вообще, как я сказал выше, вам нужна отдельная служба для этого.

Добавлено через 1 минуту
(вдруг процесс запустят первее, чем приложение)
Что-то я совсем не понял логики. На кой тогда это приложение нужно?

Добавлено через 1 минуту
Показывайте BallonTip в трее со своими фразами да и все.
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319
17.07.2021, 16:30  [ТС]
wizard41, смог отследить запуск процессов таким способом
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void WaitForProcess()
    {
        ManagementEventWatcher startWatch = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
        startWatch.EventArrived += new EventArrivedEventHandler(startWatch_EventArrived);
        startWatch.Start();
 
        ManagementEventWatcher stopWatch = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace"));
        stopWatch.EventArrived += new EventArrivedEventHandler(stopWatch_EventArrived);
        stopWatch.Start();
    }
 
    void stopWatch_EventArrived(object sender, EventArrivedEventArgs e)
    {
        stopWatch.Stop();
        Console.WriteLine("Process stopped: {0}", e.NewEvent.Properties["ProcessName"].Value);
    }
 
    void startWatch_EventArrived(object sender, EventArrivedEventArgs e)
    {
        startWatch.Stop();
        Console.WriteLine("Process started: {0}", e.NewEvent.Properties["ProcessName"].Value);
    }
Но этот способ срабатывает даже если открывается новая вкладка в хроме.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.07.2021, 16:30

Задание:Смоделировать систему, указанную в варианте, в реальном времени (или, по желанию, и в реальном, и при помощи квантования времени) и провести
Turbo pascal Универсальный магазин Рассматриваются кассовые аппараты универсама. Каждый покупатель, имеющий непустую кошелку,...

Сравнение времени запуска процессов
Как найти процессы,получить время запуска этих процессов в тиках и найти самое ранее время запуска, а если время запуска этого процесса...

Нахождение среди выполняющихся процессов имён 3-х процессов, использовавших более всего процессорного времени
Помогите выполнить задание! Нахождения среди выполняющихся процессов имен трех процессов, использовавших более всего процессорного...

отслеживание процессов
привет. интересует вопрос - можно ли на яве реализовать такую штуку, чтобы она могла найти конкретный процесс в системе и выяснить сколько...

Отслеживание запущеных процессов
Всем привет! Подскажите, как реализовать следующее: Мониторить запущенные процессы (каждые 10минут) и если процесс не запущен...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru