|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Поиск нужного окна |
|
[решено] Поиск нужного окна
|
Новый участник Сообщения: 25 |
Профиль | Отправить PM | Цитировать Здравствуйте, есть такая ситуация.
Есть окно, которое может открыться через 1 мин, а может вообще не открыться. в случае если оно откроется мне нужно его найти, собственно проблема в чем: 1) Окно не имеет постоянного названия(то есть окно может быть на множестве языков), по этому по заголовку искать нельзя. 2) Цитата:
Есть положительный момент, есть у него процесс который я могу найти, но как по процесу найти открытое окно (заголовок) мне не ясно. Подскажите плз что делать в данной ситуацие ? Заранее благодарен. |
||
Отправлено: 12:40, 17-07-2009 |
Старожил Сообщения: 206
|
Профиль | Отправить PM | Цитировать |
Отправлено: 14:15, 17-07-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 25
|
Профиль | Отправить PM | Цитировать а как по названию получить PID ?
чет не могу в оффлайн доке найти... Yashied, тебе большое спасибо |
Отправлено: 14:27, 17-07-2009 | #3 |
Старожил Сообщения: 206
|
Профиль | Отправить PM | Цитировать Цитата DjinnKo:
|
|
Отправлено: 14:39, 17-07-2009 | #4 |
Новый участник Сообщения: 25
|
Профиль | Отправить PM | Цитировать Знаете что странно ? о_О
Func _WinGetByPid($iPID) Local $aWList = WinList() Local $aRet[1] = [0] For $iCC = 0 To $aWList[0][0] If WinGetProcess($aWList[$iCC][1]) = $iPID AND _ BitAND(WinGetState($aWList[$iCC][1]), 2) Then ReDim $aRet[UBound($aRet)+1] $aRet[0] += 1 $aRet[$aRet[0]] = $aWList[$iCC][0] EndIf Next If $aRet[0] = 0 Then Return SetError(1, 0, 0) Else Return $aRet EndIf EndFunc $k = ProcessExists("FD.exe") $h = _WinGetByPid($k) Sleep(2000) $titleP = WinGetTitle($h,"") ConsoleWrite($titleP) |
|
Отправлено: 16:21, 17-07-2009 | #5 |
Старожил Сообщения: 206
|
Профиль | Отправить PM | Цитировать Цитата DjinnKo:
For $i = 1 To $r[0] ... Next Если твоя программа имеет только одно окно (активное или нет - не имеет особого значения), тогда $sTitle = $r[1] $hWnd = WinGetHandle($r[1]) Зная $hWnd, ты можешь колдовать дальше. Я проверил эту функцию на "Блокноте", все работает отлично! |
|
Отправлено: 19:58, 17-07-2009 | #6 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать пример поиска окна по процессу:
смотрю уже было ) можно вообще взять весь список существующих окон и найти среди них нужное. Подробней опиши какое окно необходимо. Пример поиска всех окон процесса: Opt('MustDeclareVars', 1) Opt('TrayIconDebug', 1) Opt('TrayIconHide', 0) #include <Array.au3> Local $iPID, $aWin Local $sProcessName = 'Skype.exe' ; Имя процесса, окна которого необходимо найти If NOT ProcessExists($sProcessName) Then Exit MsgBox(48, 'Поиск окна', 'Процесс "' & $sProcessName & '" не запущен') $aWin = _ProcessGetWindow($sProcessName) ; Поиск всех имеющихся окон ;~ $aWin = _ProcessGetWindow($sProcessName, 1) ; Поиск только отображаемых окон If NOT @error Then _ArrayDisplay($aWin, 'Поиск окон процесса "' & $sProcessName & '"') Else MsgBox(48, 'Поиск окна', 'Окна не найдены') EndIf Func _ProcessGetWindow($sProcessName, $fOnlyVisible=0) Local $iPID, $aWinList = WinList() Local $aRet[1][2] $aRet[0][0] = 0 If IsString($sProcessName) Then $iPID = ProcessExists($sProcessName) For $i = 1 To UBound($aWinList)-1 If WinGetProcess($aWinList[$i][1]) = $iPID Then If $fOnlyVisible AND NOT BitAnd(WinGetState($aWinList[$i][1]), 2) Then ContinueLoop $aRet[0][0] += 1 ReDim $aRet[$aRet[0][0]+1][2] $aRet[$aRet[0][0]][0] = $aWinList[$i][0] ;Title $aRet[$aRet[0][0]][1] = $aWinList[$i][1] ;WinHandle EndIf Next If $aRet[0][0] Then Return SetError(0, 0, $aRet) Return SetError(1, 0, $aRet) EndFunc |
------- Последний раз редактировалось proxy, 17-07-2009 в 21:28. Отправлено: 21:08, 17-07-2009 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Как организовать поиск нужного диска и запуск с него приложения? | Nun-Nun | Скриптовые языки администрирования Windows | 16 | 28-05-2009 22:12 | |
[решено] Как найти и прописать в реестре запуск нужного файла? | Pozia | AutoIt | 12 | 12-03-2009 23:38 | |
[решено] Поиск нужного текста в html коде страницы | ph0en1x | AutoIt | 8 | 16-02-2009 02:38 | |
Открытие окна нужного размера | darksmoke | Вебмастеру | 1 | 10-09-2008 10:04 | |
загрузка нужного шрифта (CSS 2) | Underson | Вебмастеру | 7 | 18-03-2006 13:30 |
|