Что нового

[Процессы] Как узнать CLASS окна по названию процесса

Seresal

Новичок
Сообщения
8
Репутация
0
Возможно посредством AutoIT узнать класс окна имея название екзешника? Если осуществимо, то каким образом.

Пример:
Мы имеем запущенный процесс rf.exe (игра RF Online). Задача определить класс окна "привязанного" к этому процессу.

Так же не стоит забывать, что за одним процессом могут быть "закреплены" несколько окон...

Подобной темы не нашел. Знаю что это осуществимо в дельфи, но хотелось бы получить решение в автоайти.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Код:
#Include <Array.au3>
#Include <WinAPIEx.au3>

$list = ProcessList("notepad.exe")
for $i = 1 to $list[0][0]
 $Data=_WinAPI_EnumProcessWindows($list[$i][1], 0) 
_ArrayDisplay($Data) 
next

WinAPIEx.au3 брать здесь http://autoit-script.ru/index.php/topic,47.0.html
Для каждого процесса показывает массив из хэндлов и классов окон
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Seresal,
Так можно попробовать:
Код:
#include <WinAPI.au3>
#include <Array.au3>

$sFileExe = @WindowsDir & '\notepad.exe'

$sProcess = StringRegExpReplace($sFileExe, '^.*\\', '')
$iCount = 0
If Not ProcessExists($sProcess) Then
	Run($sFileExe)
EndIf
$iPID = ProcessWait($sProcess, 5)
If Not $iPID Then
	MsgBox(16, 'Error', 'Error')
	Exit
EndIf
$aList = WinList()
If Not $aList[0][0] Then
	MsgBox(16, 'Error', 'Error')
	Exit
EndIf
Dim $aResult[$aList[0][0] + 1][4]
For $i = 1 To $aList[0][0]
	If WinGetProcess($aList[$i][1]) = $iPID Then
		$iCount += 1
		$aResult[$iCount][0] = $aList[$i][0] ;Title
		$aResult[$iCount][1] = $aList[$i][1] ;Handle
		$aResult[$iCount][2] = _WinAPI_GetClassName($aList[$i][1]);ClassName
		If BitAND(WinGetState($aList[$i][1]), 2) Then
			$aResult[$iCount][3] = 'visible'
		Else
			$aResult[$iCount][3] = 'hide'
		EndIf
	EndIf
Next
If $iCount Then
	ReDim $aResult[$iCount + 1][4]
	$aResult[0][0] = $iCount
	_ArrayDisplay($aResult, 'Все окна процесса ' & $sProcess)
Else
	MsgBox(16, 'Error', 'Error')
EndIf
 
Верх