<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Как определить открыты ли в приложении модальные окна?]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=7981</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7981&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Как определить открыты ли в приложении модальные окна?».]]></description>
		<lastBuildDate>Tue, 05 Feb 2013 18:46:45 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Как определить открыты ли в приложении модальные окна?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69135#p69135</link>
			<description><![CDATA[<p>Спасибо, teadrinker, всё получилось <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (ChaoLi)]]></author>
			<pubDate>Tue, 05 Feb 2013 18:46:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69135#p69135</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как определить открыты ли в приложении модальные окна?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=68616#p68616</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 17 Jan 2013 18:38:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=68616#p68616</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как определить открыты ли в приложении модальные окна?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=68613#p68613</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (ChaoLi)]]></author>
			<pubDate>Thu, 17 Jan 2013 14:45:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=68613#p68613</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как определить открыты ли в приложении модальные окна?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=68566#p68566</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 16 Jan 2013 13:01:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=68566#p68566</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Как определить открыты ли в приложении модальные окна?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=68535#p68535</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (ChaoLi)]]></author>
			<pubDate>Wed, 16 Jan 2013 09:06:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=68535#p68535</guid>
		</item>
	</channel>
</rss>
