Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Shady3000rf
2 / 2 / 0
Регистрация: 17.09.2010
Сообщений: 38
#1

Отслеживание одного процесса (модифицировать код)

20.10.2012, 12:26. Просмотров 598. Ответов 0
Метки нет (Все метки)

Всем доброго времени суток!

Не могли бы подсказать, как отредактировать код:

Кликните здесь для просмотра всего текста
vb.net
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
Imports System.Management
Imports System.Threading
Public Class Form1
    Dim watcherCreate As New ManagementEventWatcher
    Dim tExpectationCreation As Thread
    Dim StopWatchers As Boolean = False
 
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 
        Try
            tExpectationCreation = New Thread(AddressOf ExpectationCreation)
            tExpectationCreation.Start()
        Catch ex As Exception
            MsgBox(ex.Message & ":   " & ex.StackTrace)
        End Try
    End Sub
 
    Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        StopWatchers = True
    End Sub
 
    Private Sub ExpectationCreation()
        Dim query As New WqlEventQuery( _
        "__InstanceCreationEvent", _
        New TimeSpan(0, 0, 1), _
        "TargetInstance isa ""Win32_Process""")
        watcherCreate.Query = query
        watcherCreate.Options.Timeout = New TimeSpan(0, 0, 1)
        Dim e As ManagementBaseObject
        Application.DoEvents()
        Do
            Try
                e = watcherCreate.WaitForNextEvent()
                If Not StopWatchers Then
                    Dim sPath As String
                    Dim sName As String
                    sName = CType(e("TargetInstance"),  _
                            ManagementBaseObject)("Name")
                    sPath = CType(e("TargetInstance"),  _
                            ManagementBaseObject)("ExecutablePath")
                    MsgBox("Created process: " & sPath & "\" & sName, MsgBoxStyle.SystemModal)
                End If
                watcherCreate.Stop()
            Catch ex As ManagementException
                If ex.ErrorCode = ManagementStatus.Timedout Then
                    If StopWatchers Then
                        watcherCreate.Stop()
                    End If
                End If
            End Try
        Loop While Not StopWatchers
        watcherCreate.Stop()
    End Sub
End Class


Лазил по форумам, mdsn и т.п. но ни чего нужного не нашёл...
А именно я хочу сделать так, что бы отслеживался один процесс, т.к. этот код оповещает о всех запускающихся процессах.
Единственное что я нашёл, что возможно надо использовать, но я не знаю как, а именно TargetInstance.Name = "notepad.exe"

Если не трудно и вообще такое возможно, могли бы подсказать? Буду признателен =)

Просто хочется именно так сделать в своей программе... Просто, мне кажется, будет так удобней, нежели использовать таймер и вставлять этот код:
Кликните здесь для просмотра всего текста

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Class Form1
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Proc() As Process
        Dim ModuleName, ProcName As String
        ModuleName = "notepad.exe"
        ProcName = System.IO.Path.GetFileNameWithoutExtension(ModuleName)
        Proc = Process.GetProcessesByName(ProcName)
        If Proc.Length > 0 Then
            MsgBox("есть такой процесс")
        Else
            MsgBox("нет такого процесса")
            Application.Exit()
        End If
    End Sub
End Classс


Добавлено через 12 часов 45 минут
Немного разобрался, но не могу понять, где зацикливается, т.е. после запуска процесса сообщение продолжает вылетать...

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

vb.net
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
Imports System.Management
Imports System.Threading
Public Class Form1
    Dim watcherCreate As New ManagementEventWatcher
    Dim tExpectationCreation As Thread
    Dim StopWatchers As Boolean = False
    Dim nameOfProcess As String = "notepad.exe"
 
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 
        Try
            tExpectationCreation = New Thread(AddressOf ExpectationCreation)
            tExpectationCreation.Start()
        Catch ex As Exception
            MsgBox(ex.Message & ":   " & ex.StackTrace)
        End Try
    End Sub
 
    Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        StopWatchers = True
    End Sub
 
    Private Sub ExpectationCreation()
        Dim query As New WqlEventQuery( _
        "__InstanceCreationEvent", _
        New TimeSpan(0, 0, 1), _
        "TargetInstance isa ""Win32_Process""")
 
        Dim watcher As New ManagementEventWatcher(query)
        Dim e As ManagementBaseObject = watcher.WaitForNextEvent()
 
        watcherCreate.Query = query
        watcherCreate.Options.Timeout = New TimeSpan(0, 0, 1)
        Application.DoEvents()
 
        Do
            Try
                Dim NameProc As String = CType(e("TargetInstance"), ManagementBaseObject)("Name")
                If NameProc = nameOfProcess Then
 
                    MsgBox("Created process")
                    watcherCreate.Stop()
                End If
 
            Catch ex As ManagementException
                If ex.ErrorCode = ManagementStatus.Timedout Then
                    If StopWatchers Then
                        watcherCreate.Stop()
                    End If
                End If
 
            End Try
        Loop While Not StopWatchers
        watcherCreate.Stop()
    End Sub
End Class


Пользовался этим: Ссылка удалена
 Комментарий модератора 
Правило 5.8:Запрещено публиковать ссылки на другие форумы, а также их пропаганда.

Добавлено через 9 минут
Ивиняюсь за флуд, разобрался, можно удалять или закрывать тему.
 Комментарий модератора 
Правило 3.4:Избегайте ... "кричащего" выделения текста

Может кому пригодится, вот код:

vb.net
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
Imports System.Management
Imports System.Threading
Public Class Form1
    Dim watcherCreate As New ManagementEventWatcher
    Dim tExpectationCreation As Thread
    Dim StopWatchers As Boolean = False
    Dim nameOfProcess As String = "notepad.exe"
 
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 
        Try
            tExpectationCreation = New Thread(AddressOf ExpectationCreation)
            tExpectationCreation.Start()
        Catch ex As Exception
            MsgBox(ex.Message & ":   " & ex.StackTrace)
        End Try
    End Sub
 
    Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        StopWatchers = True
    End Sub
 
    Private Sub ExpectationCreation()
        Dim query As New WqlEventQuery( _
        "__InstanceCreationEvent", _
        New TimeSpan(0, 0, 1), _
        "TargetInstance isa ""Win32_Process""")
 
        watcherCreate.Query = query
        watcherCreate.Options.Timeout = New TimeSpan(0, 0, 1)
 
        Dim e As ManagementBaseObject
 
        Application.DoEvents()
 
        Do
            Try
                e = watcherCreate.WaitForNextEvent()
                Dim NameProc As String = CType(e("TargetInstance"), ManagementBaseObject)("Name")
                If NameProc = nameOfProcess Then
 
                    MsgBox("Created process")
                    watcherCreate.Stop()
                End If
 
            Catch ex As ManagementException
                If ex.ErrorCode = ManagementStatus.Timedout Then
                    If StopWatchers Then
                        watcherCreate.Stop()
                    End If
                End If
 
            End Try
        Loop While Not StopWatchers
        watcherCreate.Stop()
    End Sub
End Class

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2012, 12:26
Ответы с готовыми решениями:

Модифицировать код для решение системы нелинейных уравнение методом ньютона для 2x2 матрицы
На просторах интернета нашел код для решение системы нелинейных уравнение...

Как копировать код из одного проекта в другой наиболее безболезненно для работоспособности
Есть проект с Form1.vb(чую дело в структуре кода...но не понимаю) Приведу...

Отслеживание процесса
Всем привет! Помогите, пожалуйста! Задача такая: после запуска программы, она...

Отслеживание завершения процесса
Подскажите как реализовать задачу ? 1. Отследить завершение процесса (по имени...

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2012, 12:26

Отслеживание процесса (delphi 7)
Доброго времени суток. У меня возникла небольшая проблема. Запускаю со своей...

Отслеживание начатого процесса
Я запускаю через своё приложение внешнее. По закрытии которого нужно выполнить...

Отслеживание состояния запущенного процесса
Здравствуйте. запускаю кнопкой выполнение программы: protected void...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru