Список запущеных приложений...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 21.07.2005 (Чт) 10:04

SAS
Для примера (мой скрипт в изысках по управлению приложениями):

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

'/********************************************************************/
'/* Имя: ListProcesses.vbs                                            */
'/* Язык: VBScript                                                    */
'/* Описание: Вывод на экран списка всех запущенных на локальной     */
'/*           рабочей станции процессов                              */
'/********************************************************************/

Dim WMI              ' //Экземпляр WMI
Dim  Process            ' //Экземпляр коллекции
dim  SQuery
Dim SList                 ' //Строка для вывода на экран
dim  WShell '
Dim Processes 'Коллекция процессов
Dim ListFile 'имя файла вывода
Dim FSO 'объект файловой системы
Dim sOwnerUser, sOwnerDomain
Dim Ret
'  //Соединяемся с WMI

Set FSO=CreateObject("Scripting.FileSystemObject")
Set WShell=CreateObject("Wscript.Shell")
set WMI=GetObject("winMgmts:")

   'Формируем текст запроса 
   SQuery="SELECT * FROM Win32_Process  WHERE Name<>'EXPLORER.EXE'"
   'Создаем коллекцию-результат запроса
   set Processes=WMI.ExecQuery(SQuery)
   'Цикл по всем элементам коллекции
   for each Process in Processes
'  //Формируем строку с именами процессов
  SList=SList & "Имя процесса: " & Process.Name & vbcrlf
'// Отобразим хендл процесса
  SList=SList & "Хендл процесса: " & Process.Handle & vbcrlf
  'Получим PID процесса (по нему мы ниже сможем через Shell.AppActivate
  'управлять приложением через SendKeys
  SList=SList & "Process ID (PID): " & Process.ProcessId & vbcrlf
  'Получим полный путь к исполняемому файлу
  SList = SList & "ExecutablePath: " & Process.ExecutablePath & vbcrlf
  'Получим имя пользователя от которого запущен процесс
  Process.GetOwner sOwnerUser,sOwnerDomain
  SList=SList & "Запущено от имени: " & sOwnerDomain & "\" & sOwnerUser & vbcrlf
  SList=SList & "- - - - - - - - - - - -" & vbcrlf
'Следующие строки показывают - имеет ли процесс хоть одно видимое окно
'  WShell.popup "Попытка активировать приложение " & vbcrlf & _
'  Process.name & vbcrlf & _
'  "(" & Process.executablepath & ")", 2
  'Если процесс имеет видимое окно - то Ret после вызова нижележащей строки
  'получит значение больше нуля. Если меньше нуля - значит процесс или не имеет окон
  'или все окна у него невидимы
  ret = WShell.AppActivate (Process.processid)
  'сделаем небольшую паузу, чтобы приложение успело активироваться.

  If Ret> 0 Then
     WScript.Sleep 1000
  '   WShell.Popup "Удачная попытка активации " & Process.name, 3
  'Else
  '   WShell.Popup "Неудачная попытка активации " & Process.name, 5
  End If
Next


'//Выводим информацию на экран
'MsgBox SList,,"Список запущенных процессов."
'// или выводим информацию в файл
Set ListFile=FSO.CreateTextFile("C:\ListProcess.txt")
ListFile.write(SList)
ListFile.close

Set ListFile=Nothing
Set FSO=Nothing
Set WMI=nothing
WScript.Quit
'/*************  Конец *********************************************/
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 22.07.2005 (Пт) 6:34

Ruslan Demidow писал(а):Для примера (мой скрипт в изысках по управлению приложениями):


Ruslan Demidow, Спасибо. Работает, но у меня еще возникло два вопроса:
1. Можно ли все таки получить заголовки окон для каждого процесса , а не только список хендлов?
2. Можно ли изменять состояние активных окон - разворачивать свернутые окна для переключения в них?

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 22.07.2005 (Пт) 6:45

Можно ли все таки получить заголовки окон для каждого процесса , а не только список хендлов?


Пользуй GetWindowText для получения надписи на окне.
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.07.2005 (Пт) 6:51

SAS писал(а):2. Можно ли изменять состояние активных окон - разворачивать свернутые окна для переключения в них?

OpenIcon
Изображение

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 22.07.2005 (Пт) 6:51

Павлов Максим писал(а):
Можно ли все таки получить заголовки окон для каждого процесса , а не только список хендлов?


Пользуй GetWindowText для получения надписи на окне.

Я бы с радостью воспользовался Вашим советом, но к сожалению это невозможно - я пишу не на vb, а на его младшем брате - vbscript, который не может анпрямую использовать функции API без какого-нибудь переходника.

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 22.07.2005 (Пт) 7:43

tyomitch писал(а):
SAS писал(а):

OpenIcon

Я бы с радостью воспользовался Вашим советом, но к сожалению это невозможно - я пишу не на vb, а на его младшем брате - vbscript, который не может анпрямую использовать функции API без какого-нибудь переходника.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.07.2005 (Пт) 7:52

SAS, в подпись эту фразу вставь :lol: :lol:
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 22.07.2005 (Пт) 12:04

SAS писал(а):
Ruslan Demidow писал(а):Для примера (мой скрипт в изысках по управлению приложениями):

Работает, но у меня еще возникло два вопроса:
1. Можно ли все таки получить заголовки окон для каждого процесса , а не только список хендлов?

Думаю, что да. Только основательно этим ещё не занимался. Есть такая штука хорошая как WMI tools (там и описания классов, объектов, зависимости и взаимосвязи отображены, свой построитель запросов для WMI, правда у меня почему-то построитель запросов не запустился). Справка по всему этому на русском языке. Рулёз в общем. :wink:
Я брал на MS-овском сайте. Сейчас ссылки под рукой нет. Но вечером из дома скину.

2. Можно ли изменять состояние активных окон - разворачивать свернутые окна для переключения в них?[/quote]
Можно. Где-то я видел уже пример кода, где перебираются все октрытые окна (именно окна) и выполняются действия над ними (например обновление по F5). Если скрестить работу по хендлам и работу с окнами - то помоему будет то что нужно тебе. Тоже вечером посмотрю - и скину сюда если найду.
Последний раз редактировалось Ruslan Demidow 22.07.2005 (Пт) 12:37, всего редактировалось 1 раз.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 22.07.2005 (Пт) 12:10

Ага. Вот нашёл: даю прямую ссылку на WMI tools (у меня работает только с IE).
URL http://download.microsoft.com/download/ ... ITools.exe
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 24.07.2005 (Вс) 21:51

Ruslan Demidow писал(а):Ага. Вот нашёл: даю прямую ссылку на WMI tools (у меня работает только с IE).
URL http://download.microsoft.com/download/ ... ITools.exe

Спасибо.

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 25.07.2005 (Пн) 0:09

Ruslan Demidow писал(а):Ага. Вот нашёл: даю прямую ссылку на WMI tools (у меня работает только с IE).
URL http://download.microsoft.com/download/ ... ITools.exe

Что-то похожее, но кажется чуть чуть более удобное, но trial я скачал с http://pjtec.com - называется WMIX, поставляется с хелпом, однако я ума не приложу как его использовать для решения моей задачи.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 25.07.2005 (Пн) 7:05

SAS писал(а):
Ruslan Demidow писал(а):Ага. Вот нашёл: даю прямую ссылку на WMI tools (у меня работает только с IE).
URL http://download.microsoft.com/download/ ... ITools.exe

Что-то похожее, но кажется чуть чуть более удобное, но trial я скачал с http://pjtec.com - называется WMIX, поставляется с хелпом, однако я ума не приложу как его использовать для решения моей задачи.

Я пробовал WMIX - мне не понравилось то, что он не отображает взаимосвязи классов, нет описания типа параметров, есть только общее описание. И показывается только те параметры и методы, которые доступны на данном компьютере.
Ищи классы, которые связаны с Process, Window (в свойствах). Может быть и накопаешь. Я вот нашёл код, который получает все окна в системе, но... только те, которые принадлежат IE. :( Приведу для примера код, который я видел в начале месяца:

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

Dim Shl, s, i, Wins
Set Shl = CreateObject("Shell.Application")
Set Wins = Shl.windows

For i = 0 to Wins.count - 1
     s = s & Wins.item(i).LocationName & " - " & Wins.item(i).LocationURL & vbcrlf
Next

MsgBox s

Set Wins = Nothing
Set Shl = Nothing

Это Ж-ж-ж-ж неспроста (с) Винни-Пух

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 25.07.2005 (Пн) 9:06

А возможно ли в NT/2000/XP системах список приложений с полными путями, как в 9x системах?

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 25.07.2005 (Пн) 9:10

Возможно. Только на VB, на VBScript я не знаю.
Если хош, выложу код.
А я все практикую лечение травами...

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 25.07.2005 (Пн) 9:11

|kerish| писал(а):А возможно ли в NT/2000/XP системах список приложений с полными путями, как в 9x системах?

Если Вы имеете в виду, что получить список работающих процессов с полными физическими путями, то можно. Нужно смотреть свойства WMI.Process

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 25.07.2005 (Пн) 9:29

|kerish| писал(а):А возможно ли в NT/2000/XP системах список приложений с полными путями, как в 9x системах?

VBScript (должно работать и на VB)
Код: Выделить всё
Dim WMI              ' //Экземпляр WMI
Dim  Process            ' //Экземпляр коллекции
dim  SQuery
Dim SList                 ' //Строка для вывода на экран
dim  WShell '
Dim Processes 'Коллекция процессов
'  //Соединяемся с WMI
Set WShell=CreateObject("Wscript.Shell")
set WMI=GetObject("winMgmts:")

        'Формируем текст запроса 
        SQuery="SELECT * FROM Win32_Process "
        'Создаем коллекцию-результат запроса
        set Processes=WMI.ExecQuery(SQuery)
        'Цикл по всем элементам коллекции
        for each Process in Processes
'  //Формируем строку с именами процессов
  SList=SList & "Имя процесса: " & Process.Name & " "
'// Отобразим путь executable процесса
  SList=SList & "путь процесса: " & Process.executablepath & chr(13) & chr(10)
   next
msgbox slist' может не отобразить все процессы(если их много), так как
'у msgbox ограниченная длина выводимой строки, но переменную Slist можно вывести и в файл и куда угодно.

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 43

    TopList