kasyava |
Отправлено: 13.09.2005, 09:30 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 17
|
Всем здрасти!!!!!!
Люди у меня такой вопрос, может быть он и глупый и вообще такого не возможно, но я всетаки решился его написать так как самостоятельно с этим разобраться мне не посилам....
Суть в следующем....
Мне нужно отследить висит прога или нет...
Я использую _IsHungAppWindow, для этого мне нужен Handle окна..
так вот.....
Как мне узнать Handle окна если я не знаю ни класс окна ни заголовок окна....т.е. функцию FindWindow('класс окна','заголовок окна') я использовать не могу.
Но я знаю полный путь к экзешнику ну и имя экзешника соответственно.
Ну и еще я знаю имя процесса создаваемого в диспетчере задач этой прогой, хотя мне кажется что это не пригодиться, или нет??
Просьба не посылать меня на ПОИСК, я уже все излазил и везде предлогается исполизовать FindWinow.....
Помогите п л и и и и и и з з з з кто может,знает как это делается или кому интересно тоже помучаться.... |
|
olegenty |
Отправлено: 13.09.2005, 10:28 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
ну так УЗНАЙ класс окна и заголовок окна, затем пользуйся FindWindow. воспользуйся для этого, например, прогой Spy++ (входит в поставку VC), или WinSight32 (входит в поставку BCB)
|
|
kasyava |
Отправлено: 13.09.2005, 10:34 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 17
|
еще раз объясняю......
моей проге прередается только путь к экзешнику и имя экзешника...
это делает пользователь.......
прога должна следить за прогой которую выберит юзер.......
и как ты себе это представляешь.......чтобы юзер проделывал все то что ты только что написал ??????????????????????
т.е. я заранее не знаю какую прогу МОЯ прога будет контролировать...
надеюсь теперь будет понятнее..... |
|
Vlad |
Отправлено: 13.09.2005, 10:41 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
Тебе может помочь WMI, но лучше бы если операционнка XP or 2003. Оттуда выдерешь — наименование проги, и все остальное , если надо то грохнешь.
CODE | strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process")
For Each objProcess in colProcesses
sngProcessTime = (CSng(objProcess.KernelModeTime) + _
CSng(objProcess.UserModeTime)) / 10000000
Wscript.Echo objProcess.name & VbTab & sngProcessTime
Next | Не совсем то что тебе нужно, но запусти её через cscript -и увидишь в каком направлении копать. |
|
avc* |
Отправлено: 13.09.2005, 10:41 |
|
Не зарегистрирован
|
Тогда подбирайтесь к окнам со стороны процесса.
Process32First / Process32Next
Thread32First / Thread32Next
EnumThreadWindows
Кстати, может вы сформулируете правило для определения состояния "висит прога или нет"
|
|
Vlad |
Отправлено: 13.09.2005, 10:46 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
Вот Monitor Thread Performance, но для XP and 2003 , перепишешь на си , потом попробуешь поюзать OpenProcess(....)
CODE | strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colItems = objRefresher.AddEnum _
(objWMIService, "Win32_PerfFormattedData_PerfProc_Thread").objectSet
objRefresher.Refresh
For i = 1 to 5
For Each objItem in colItems
Wscript.Echo "Caption: " & objItem.Caption
Wscript.Echo "Context Switches Per Second: " & _
objItem.ContextSwitchesPersec
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo "Elapsed Time: " & objItem.ElapsedTime
Wscript.Echo "ID Process: " & objItem.IDProcess
Wscript.Echo "ID Thread: " & objItem.IDThread
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "Percent Privileged Time: " & _
objItem.PercentPrivilegedTime
Wscript.Echo "Percent Processor Time: " & objItem.PercentProcessorTime
Wscript.Echo "Percent User Time: " & objItem.PercentUserTime
Wscript.Echo "Priority Base: " & objItem.PriorityBase
Wscript.Echo "Priority Current: " & objItem.PriorityCurrent
Wscript.Echo "Start Address: " & objItem.StartAddress
Wscript.Echo "Thread State: " & objItem.ThreadState
Wscript.Echo "Thread Wait Reason: " & objItem.ThreadWaitReason
Wscript.Sleep 2000
objRefresher.Refresh
Next
Next
| |
|
Sl@Sh |
Отправлено: 14.09.2005, 11:33 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
Думаю вам поможет функция CreateProcess. С помощью неё можно узнать дескриптор запускаемого приложения. Подробнее смотрите в хэлпе.
|
|