C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
задачка с Handle окна НУЖНА ПОМОЩЬ, как мне узнать....
kasyava
  Отправлено: 13.09.2005, 09:30


Ученик-кочегар

Группа: Участник
Сообщений: 17



Всем здрасти!!!!!! smile.gif

Люди у меня такой вопрос, может быть он и глупый и вообще такого не возможно, но я всетаки решился его написать так как самостоятельно с этим разобраться мне не посилам....

Суть в следующем....
Мне нужно отследить висит прога или нет...
Я использую _IsHungAppWindow, для этого мне нужен Handle окна..

так вот.....

Как мне узнать Handle окна если я не знаю ни класс окна ни заголовок окна....т.е. функцию FindWindow('класс окна','заголовок окна') я использовать не могу.
Но я знаю полный путь к экзешнику ну и имя экзешника соответственно.

Ну и еще я знаю имя процесса создаваемого в диспетчере задач этой прогой, хотя мне кажется что это не пригодиться, или нет??


Просьба не посылать меня на ПОИСК, я уже все излазил и везде предлогается исполизовать FindWinow..... sad.gif

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

Вернуться в Вопросы программирования в C++Builder