Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: TerminateProcess Добавлено: 08.11.08 18:09  

Автор вопроса:  Victor
Подскажите, пожалуйста, новичку (VB Net 2008 Express), как правильно найти и убить некоторый мешающий процесс, если я знаю имя программы ... хочу поубирать из памяти всякие грабилки экрана (например, Screenshooter.exe)

прошерстил форум, нашел несколько тем затрагивающих этот вопрос, но так чтоб скопировать и заработалоЮ к сожалению не нашел...

Заранее спасибо всем, кто соберется ответить!

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 vbnetka



Вопросов: 3
Ответов: 37
 Профиль | | #1 Добавлено: 08.11.08 19:32
Например так:
Process.GetProcessesByName("screenshooter";).GetValue(0).Kill()
вместо 0 в getvalue процесс по счету, имеющий такое же имя..

Ответить

Номер ответа: 2
Автор ответа:
 vbnetka



Вопросов: 3
Ответов: 37
 Профиль | | #2 Добавлено: 08.11.08 19:34
P.S.: вместо смайла только скобку поставьте )
и еще, код написан на 2005-ый, надеюсь и в 2008-ом сработает

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 08.11.08 20:20
Process.GetProcessesByName("screenshooter".GetValue(0).Kill()

А если не найдено ни одного процесса, то получишь исключение!
Не мешало бы проверить количество найденных процессов в массиве.. Но в целом идея верна.

вот как то так.. С#
  1.  
  2.             string[] processNames = new string[] { "notepad", "iexplore" };
  3.             foreach (string processName in processNames)
  4.             {
  5.                 Process[] processes = Process.GetProcessesByName(processName);
  6.                 foreach (Process process in processes)
  7.                 {
  8.                     try
  9.                     {
  10.                         if (!process.HasExited) process.Kill();//process.CloseMainWindow()
  11.                     }
  12.                     catch (Exception ex)
  13.                     {
  14.                         Console.WriteLine(ex.Message);
  15.                     }
  16.                 }
  17.             }

Ответить

Номер ответа: 4
Автор ответа:
 vbnetka



Вопросов: 3
Ответов: 37
 Профиль | | #4 Добавлено: 08.11.08 20:26
да, но тогда не легче просто проверить length?
  1. If Process.GetProcessesByName("sight").Length > 0 Then
  2.                 For nc As Integer = 0 To Process.GetProcessesByName("sight").Length - 1
  3.                     Process.GetProcessesByName("sight").GetValue(nc).Kill()
  4.                 Next
  5.             End If

Ответить

Номер ответа: 5
Автор ответа:
 vbnetka



Вопросов: 3
Ответов: 37
 Профиль | | #5 Добавлено: 08.11.08 20:29
естественно, взяв Process.GetProcessesByName("sight";) за какую-то переменную

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 08.11.08 20:37
да, но тогда не легче просто проверить length?

А зачем? Зачем нам еще узнавать длину массива? GetProcessesByName вернуть null не может, он может просто вернуть пустой массив. Цикл foreach просто переберет содержимое массива и все.. причем без всяких лишних проверок на длину, а если он будет пустой, то и цикл ни разу не выполнится.. Так что узнавать длину массива и получать сылку на элемент массива по индексу в данном случае бессмысленно..

Ответить

Номер ответа: 7
Автор ответа:
 Victor



Вопросов: 1
Ответов: 1
 Профиль | | #7 Добавлено: 09.11.08 04:10
Огромное всем спасибо! Все работает отлично :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам