Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Можно ли получить список окон, открытых процессом? (http://forum.oszone.net/showthread.php?t=161421)

evg64 25-12-2009 13:18 1303956

Можно ли получить список окон, открытых процессом?
 
Добрый день! Допустим, есть процесс NotePad.exe. Как получить массив из одного элемента, который будет являться хэндлом окна блокнота?

Creat0R 25-12-2009 15:31 1304068

Цитата:

Цитата evg64
Как получить массив из одного элемента, который будет являться хэндлом окна блокнота? »

А зачем нужен массив?

Вот пример получения хендла окна «Сохранить как» у блокнота:

Код:

$iPID = Run(@WindowsDir & "\Notepad.exe")
ProcessWait("Notepad.exe")

Sleep(500)
Send("^s")
Sleep(1000)

$hSaveAs = _WinGetHandleEx($iPID, "#32770", "", "FolderView")

MsgBox(64, "Result", "hWnd: " & $hSaveAs & ", Title: " & WinGetTitle($hSaveAs))

Func _WinGetHandleEx($iPID, $sClassNN="", $sPartTitle="", $sText="", $iVisibleOnly=1)
    If IsString($iPID) Then $iPID = ProcessExists($iPID)

    Local $aWList = WinList("[CLASS:" & $sClassNN & ";REGEXPTITLE:(?i).*" & $sPartTitle & ".*]", $sText)
    If @error Then Return SetError(1, 0, "")

    For $i = 1 To $aWList[0][0]
        If WinGetProcess($aWList[$i][1]) = $iPID Then
            If Not $iVisibleOnly Or ($iVisibleOnly And BitAND(WinGetState($aWList[$i][1]), 2)) Then Return $aWList[$i][1]
        EndIf
    Next

    Return SetError(2, 0, "")
EndFunc


Yashied 26-12-2009 16:48 1304810

Так можно получить список всех окон для процесса.

Код:

#Include <Array.au3>
#Include <WinAPIEx.au3>

Global $Data = _WinAPI_EnumProcessWindows(ProcessExists('Notepad.exe'))

If IsArray($Data) Then
        _ArrayDisplay($Data)
EndIf

WinAPIEx.au3

evg64 26-12-2009 20:22 1304969

Цитата:

Цитата Creat0R
А зачем нужен массив? »

Некоторые процессы, например IExplore.exe зачастую запускают по несколько окон, поэтому нужен массив.
Цитата:

Цитата Yashied
Так можно получить список всех окон для процесса. »

Спасибо! Ровно то, что надо! :)

Creat0R 26-12-2009 23:35 1305092

Цитата:

Цитата evg64
Некоторые процессы, например IExplore.exe зачастую запускают по несколько окон, поэтому нужен массив. »

Я это спросил в качестве коментария на цитату:
Цитата:

Цитата evg64
Как получить массив из одного элемента, который будет являться хэндлом окна блокнота? »

Т.ч совет на будущее - желательно чтобы содержимое темы совпадало с её заголовком ;)

P.S
Тема решена?


Время: 07:23.

Время: 07:23.
© OSzone.net 2001-