Перейти к содержимому

Фотография

Как Отследить Запущен Процесс Или Нет?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 Juliya

Juliya

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Juliya

Отправлено 20 июля 2007 - 14:16

Здравстуйте,
У меня возник вопрос : как можно средствами QTP 9.0 отследить есть процесс (запущен ли) или нет. Точнее говоря у меня есть одно приложение , которое должна запускать другое. Вот я хочу проверять запустился процесс или нет. Если же проверять Window("Application").Exist , то работает очень медленно. Хотелось бы просто проверить есть ли процесс. Помогите пожалуйста . Заранее спасибо
И ещё один вопросик: никак не могу найти как при работе с DataTable можно задавать стиль для ячеек (если я например хочу текст красный жирный и т.п.)
  • 0

#2 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 20 июля 2007 - 16:02

Если Window("Application").Exist работает очень медленно - значит что-то вы не так делаете. Например, неправильно задали свойства распознавания. Если можно - приведите их...

А если нужен кусок кода для проверки существования процесса, то вот (выдрано из функции, дожидающейся окончания выполнения процесса. если выдрал неаккуратно - извиняюсь):

Dim isProcessRun
 isProcessRun = False
 Dim callProcess 'A collection of all processes

 Set callProcess = objWMIService.ExecQuery ("Select * from Win32_Process")
 Dim objProcess
 For Each objProcess In callProcess
	 If UCase(objProcess.Name) = UCase(processName) Then
	   isProcessRun = True
	   Exit For
	 End If
 Next
 set callProcess = Nothing

  • 0
Best regards,
Майк.

#3 Juliya

Juliya

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Juliya

Отправлено 23 июля 2007 - 11:40

Mike, cпасибо большое за ответ. :friends:
Идея понятна: выбрать все процессы и найти интерисующий. Но у меня есть некоторые трудности:
1. ExecQuery(..) такой функции я вообще не нашла в хелпе (возможно у меня не хватает каких то аддинов).
Да и неужели нет никакой функции которая позволяет найти процесс по имени.. есть же возможность убить процесс , найдя его по имени..
и касательно моего второго вопроса. Никто не знает как всетаки при работе с DataTable можно задать стиль?
  • 0

#4 M.J.K

M.J.K

    Новый участник

  • Members
  • Pip
  • 42 сообщений
  • ФИО:Трушков Юрий

Отправлено 23 июля 2007 - 14:00

...и касательно моего второго вопроса. Никто не знает как всетаки при работе с DataTable можно задать стиль?

Juliya а зачем вам стили? :)
Если ТАК уж хочется - закройте QTP, зайдите в папку где хранится DataTable вышего теста и откройте её (по умолчанию - .../название теста/Default.xls), перейдите на нужный лист и делайте с данными что хотите :friends:
только аккуратнее.
Можете откыть QTP и наслаждаться!

Идея понятна: выбрать все процессы и найти интерисующий. Но у меня есть некоторые трудности:
1. ExecQuery(..) такой функции я вообще не нашла в хелпе (возможно у меня не хватает каких то аддинов).
Да и неужели нет никакой функции которая позволяет найти процесс по имени.. есть же возможность убить процесс , найдя его по имени..

А вы там смотрите? В QTP Help её и не найдете - это не функция QTP.
Справку по ней вы сможете найти в MSDN.
Ну или в google :) и примеры там же.
  • 0
my Изображение
--------------------
Желай невозможного - достигнешь максимума
(Наполеон)

#5 Juliya

Juliya

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Juliya

Отправлено 23 июля 2007 - 14:25

Если ТАК уж хочется - закройте QTP, зайдите в папку где хранится DataTable вышего теста и откройте её (по умолчанию - .../название теста/Default.xls), перейдите на нужный лист и делайте с данными что хотите

Именно так я сейчас и делаю, но в случае достаточно большого файла это крайне неудобно и приходиться с пол часа тратить на редактирование xls файла и придание ему читабельного вида , не очень то хорошо, согласитесь, учитывая что QTP позволяет задавать стили. Поэтому ОЧЕНЬ как хочеться.
  • 0

#6 Juliya

Juliya

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Juliya

Отправлено 23 июля 2007 - 15:22

Спасибо всем за помощь :blush:
На случай если у кого возникла та же необходимость проверить запущен процесс или нет, привожу код который у меня работает на ура:)

[codebox]On Error Resume Next
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If Err.Number <> 0 Then
WScript.Echo Err.Number & ": " & Err.Description
WScript.Quit
End If
For Each objProc In objService.ExecQuery("SELECT * FROM Win32_Process")
If objProc.pid= objProc.ProcessId Then
find=true
End If
Next
If find=true Then
MsgBox "Процесс найден!!"
Else
MsgBox "Процесс не найден!!"
End If[/codebox]


:friends:
  • 0

#7 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 24 июля 2007 - 05:26

Есть еще один способ : воспользоваться программой tasklist.exe, которая входит в состав Windows, начиная с XP
Кроме этого, эта программа позволяет определить наличие процесса на удаленном компьютере, в нужной сессии (если были коннекты по MSTSC)

Пример : определить наличие NOTEPAd на локальном компе под всеми сессиями:

tasklist /FI "IMAGENAME EQ notepad.exe"
  • 0

#8 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 24 июля 2007 - 07:28

Ой! Извиняюсь. Не полностью скопировал код. Там, конечно, было

Dim objWMIService
	Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")


Вот так и бывает, кода пытаешься использовать код, который не сам писал :friends: (ту функцию писал мой коллега).

А вот в вашем коде, вот этот кусок
If Err.Number <> 0 Then
  WScript.Echo Err.Number & ": " & Err.Description
  WScript.Quit
End If

работать не будет - в QTP объект WScript, к сожалению, не работает. Используйте Reporter.ReportEvent и ExitTest (либо ExitAction) соответственно.
  • 0
Best regards,
Майк.

#9 Juliya

Juliya

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Juliya

Отправлено 24 июля 2007 - 11:35

Да, Mike, вы правы мой код не безупречен :friends: Есть ещё недостатков в этом коде :
Нет необходимости сравнивать процесс по PID и делать операции по его нахождению, намного лучше и легче (как мне кажеться ) искать по имени тоесть использовать objProc.Name
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных