| 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. Оттуда выдерешь — наименование проги, и все остальное , если надо то грохнешь. 
 Не совсем то что тебе нужно, но запусти её через cscript -и увидишь в каком направлении копать.| 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
 | 
 | 
|  | 
| 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. С помощью неё можно узнать дескриптор запускаемого приложения. Подробнее смотрите в хэлпе. | 
|  |