<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Как определить открыты ли в приложении модальные окна?]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7981&amp;type=atom" />
	<updated>2013-02-05T18:46:45Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=7981</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как определить открыты ли в приложении модальные окна?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69135#p69135" />
			<content type="html"><![CDATA[<p>Спасибо, teadrinker, всё получилось <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[ChaoLi]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29412</uri>
			</author>
			<updated>2013-02-05T18:46:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69135#p69135</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как определить открыты ли в приложении модальные окна?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=68616#p68616" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ChaoLi пишет:</cite><blockquote><p>Возможно ли определить открыты ли в приложении(главном окне) подчинённые модальные окна?</p></blockquote></div><p>Если в приложении открыты модальные окна, значит главное окно заблокировано. Обычно этого добиваются, применив к нему стиль <a href="http://msdn.microsoft.com/en-us/library/ms632600%28VS.85%29.aspx#WS_DISABLED">WS_DISABLED</a>. Соответственно, узнать, открыты ли модальные окна, можно, проверив, есть ли у главного окна этот стиль:<br /></p><div class="codebox"><pre><code>WinName := &quot;....&quot;   ; указать имя и класс окна
WS_DISABLED := 0x8000000

WinGet, Style, Style, % WinName
if (Style &amp; WS_DISABLED)
   MsgBox, Disabled   ; здесь вместо MsgBox необходимые действия</code></pre></div><div class="quotebox"><cite>ChaoLi пишет:</cite><blockquote><p>И можно ли определить родительское окно?</p></blockquote></div><p>Можно:<br /></p><div class="codebox"><pre><code>WinName := &quot;.....&quot;   ; указать название и класс окна
hParent := DllCall(&quot;GetParent&quot;, Ptr, WinExist(WinName), Ptr)
WinGetTitle, Title, ahk_id %hParent%
WinGetClass, Class, ahk_id %hParent%
FullTitle := Title . &quot; ahk_class &quot; . Class
MsgBox, % FullTitle</code></pre></div><p>Можно ещё вместо этого отыскать все видимые окна, принадлежащие данному процессу, определить их название, и в зависимости от названия совершать какие-либо действия.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-01-17T18:38:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=68616#p68616</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как определить открыты ли в приложении модальные окна?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=68613#p68613" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Закрыть любое окно с помощью нажатия на крестик можно, отправив ему сообщение <a href="http://msdn.microsoft.com/en-us/library/ms646360%28VS.85%29.aspx">WM_SYSCOMMAND</a>:<br /></p><div class="codebox"><pre><code>WinName := &quot;Безымянный — Блокнот ahk_class Notepad&quot;   ; указать заголовок и класс окна (класс можно определить с помощью AU3_Spy.exe)

WM_SYSCOMMAND := 0x112, SC_CLOSE := 0xF060
PostMessage, WM_SYSCOMMAND, SC_CLOSE,,, % WinName</code></pre></div></blockquote></div><p>Возьму эту функцию на вооружение. Но мне нужно пройти по всем модальным окнам и дождаться их выполнения. Поэтому только один вариант пока нашёл: кликать на крестик пока не закроется. А кликнется он тогда, когда станет активным, а активным он станет как раз когда все модальные окна выполнятся. Но, получается, нужно заранее знать какие окна откроются.</p>]]></content>
			<author>
				<name><![CDATA[ChaoLi]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29412</uri>
			</author>
			<updated>2013-01-17T14:45:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=68613#p68613</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как определить открыты ли в приложении модальные окна?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=68566#p68566" />
			<content type="html"><![CDATA[<p>Закрыть любое окно с помощью нажатия на крестик можно, отправив ему сообщение <a href="http://msdn.microsoft.com/en-us/library/ms646360%28VS.85%29.aspx">WM_SYSCOMMAND</a>:<br /></p><div class="codebox"><pre><code>WinName := &quot;Безымянный — Блокнот ahk_class Notepad&quot;   ; указать заголовок и класс окна (класс можно определить с помощью AU3_Spy.exe)

WM_SYSCOMMAND := 0x112, SC_CLOSE := 0xF060
PostMessage, WM_SYSCOMMAND, SC_CLOSE,,, % WinName</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-01-16T13:01:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=68566#p68566</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Как определить открыты ли в приложении модальные окна?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=68535#p68535" />
			<content type="html"><![CDATA[<p>Возможно ли определить открыты ли в приложении(главном окне) подчинённые модальные окна? Есть ли такое свойство? Или можно ли искать окна по текстовому содержимому? И можно ли определить родительское окно?</p><p>При запуске приложения в нём открываются несколько окон сразу или по очереди, некоторые из них неинтересные, другие модальные. Цель моя в закрытии приложения путём посылки в цикле нажатия мыши в окне на &quot;крестик&quot; по координатам. Но никак не получается обработать модальные окна.</p><div class="codebox"><pre><code>
WinWait, Проверка легальности получения
if not ErrorLevel
{
; На тот случай, если выскочат ошибки о невозможности открыть интернет эксплорер (2 раза)

    Sleep, 500
    Send {Enter}
    Sleep, 500
    Send {Enter}
    Sleep, 500

; принимаем обновления - здесь всё замечательно
    WinActivate Проверка легальности получения
    Sleep, 200
    Control, Check,, V8FormElement3
    Sleep, 200
    Send ^{Enter}

; На тот случай если появится окно &quot;Изменение версии&quot;, в Зарплате
    Sleep, 1000
    Send {Enter}
    Sleep, 1000

; Здесь проходит какое-то время(от 10с до пары минут), программа неактивна, выполняет какие-то действия внутренние

    WinActivate
    ID := WinActive(&quot;A&quot;)  - получаем ID активного окна, предположительно главного

Loop
{
    WinActivate, ahk_id%ID%

; попытка закрыть приложение через крестик   - через WinClose нельзя, потому что нужно пройти через все модальные окна

    Sleep, 1000
    Click 920, 10
    Send {Enter}
    Sleep, 1000

; !!! Вот здесь проблема.. работает нестабильно

; V8NewLocalFrameBaseWnd - определил с помощью AutoIt3 Window Spy, но и некоторые другие окна имеют подобный класс, что и приводит часто к зацикливанию

; Если существует окно &quot;Установить границу итогов&quot; в Бухне
    IfWinExist, ahk_class V8NewLocalFrameBaseWnd
    {
     WinActivate, ahk_class V8NewLocalFrameBaseWnd
     Send {Enter}
    }

; Если не существует главного окна запущенной ранее 1С - выйти
    IfWinNotExist, ahk_id%ID%
    {
     ExitApp
    }
}
}
</code></pre></div><p><span class="postimg"><img src="http://s-pic.ru/i/67235.png" alt="PunBB bbcode test" /></span></p>]]></content>
			<author>
				<name><![CDATA[ChaoLi]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29412</uri>
			</author>
			<updated>2013-01-16T09:06:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=68535#p68535</id>
		</entry>
</feed>
