<?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=5440</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5440&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Определение видимой области окна на экране».]]></description>
		<lastBuildDate>Wed, 02 Feb 2011 15:20:08 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Определение видимой области окна на экране]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=44751#p44751</link>
			<description><![CDATA[<p>Спасибо <strong>teadrinker</strong>!<br />Отлично!</p>]]></description>
			<author><![CDATA[null@example.com (avens)]]></author>
			<pubDate>Wed, 02 Feb 2011 15:20:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=44751#p44751</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение видимой области окна на экране]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=44623#p44623</link>
			<description><![CDATA[<p>Определить, какая часть окна видима, можно сосчитав, сколько точек окна перекрыто другими окнами, лежащими выше него, и краем монитора. Хэндлы окон в порядке сверху до низу возвращает команда<br /></p><div class="codebox"><pre><code>WinGet, List, List</code></pre></div><p>Будем проверять каждую точку окна, перекрыта она, или нет. Наверное, не очень рационально по скорости, но алгоритм высчитывания и вычитания перекрытых площадей (а окно могут перекрывать несколько других окон, в свою очередь, перекрывающих друг друга) будет гораздо более сложным.<br /></p><div class="codebox"><pre><code>hWnd =    ; указать реальный хэндл окна

SetBatchLines -1
MsgBox, % GetVisibleSquare(hWnd)
Return

GetVisibleSquare(hWnd)
{
   if !WinExist(&quot;ahk_id &quot; hWnd)
      Return &quot;Видимого окна с данным хэндлом не существует!&quot;
      
   SquareCovered := i := 0
   WinGetPos, X, Y, W, H, ahk_id %hWnd%
   X1 := X &lt; 0 ? 0 : X
   Y1 := Y &lt; 0 ? 0 : Y
   X2 := X + W &gt; A_ScreenWidth ? A_ScreenWidth : X + W
   Y2 := Y + H &gt; A_ScreenHeight ? A_ScreenHeight : Y + H
   SquareReal := W * H
   SquareOnScreen := (X2 - X1) * (Y2 - Y1)   ; площадь, не перекрытая краем монитора
   
   WinGet, List, List
   While List%A_Index% != hWnd
   {
      i++
      WinGetPos, X, Y, W, H, % &quot;ahk_id &quot; List%A_Index%
      X1_%i% := X &lt; 0 ? 0 : X
      Y1_%i% := Y &lt; 0 ? 0 : Y
      X2_%i% := X + W &gt; A_ScreenWidth ? A_ScreenWidth : X + W &lt; 0 ? 0 : X + W
      Y2_%i% := Y + H &gt; A_ScreenHeight ? A_ScreenHeight : Y + H &lt; 0 ? 0 : Y + H
      
      if (X1_%i% &lt;= X1 &amp;&amp; X2 &lt;= X2_%i% &amp;&amp; Y1_%i% &lt;= Y1 &amp;&amp; Y2 &lt;= Y2_%i%)
         Return 0    ; окно полностью перекрывает целевое
      
      if (X1_%i% &gt; X2 || X1 &gt; X2_%i% || Y1_%i% &gt; Y2 || Y1 &gt; Y2_%i%)   ; окно не перекрывает целевое
         i--                                                          ; отсеиваем его из дальнейшей проверки
   }
   if i = 0
      Return 100 - Round((SquareReal - SquareOnScreen)*100/SquareReal)
      
   Loop % Y2 - Y1
   {
      Y := Y1 + A_Index - 1
      Loop % X2 - X1
      {
         X := X1 + A_Index - 1
         Loop % i
         {
            if (X &gt;= X1_%A_Index% &amp;&amp; X &lt;= X2_%A_Index%   ; проверяем, перекрыта ли данная точка
               &amp;&amp; Y &gt;= Y1_%A_Index% &amp;&amp; Y &lt;= Y2_%A_Index%)
            {
               SquareCovered++
               Break
            }
         }
      }
   }
   Return 100 - Round((SquareCovered + SquareReal - SquareOnScreen)*100/SquareReal)
}</code></pre></div><p>Правда, такой алгоритм сработает только для стандартных, прямоугольных окон.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 30 Jan 2011 19:15:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=44623#p44623</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Определение видимой области окна на экране]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=44600#p44600</link>
			<description><![CDATA[<p>Здравствуйте!<br />Такой вопрос, может и не осуществляемый но все же решил спросить, есть скрипт ahk с окном Gui, можно ли какими то средствами AHK определять сколько процентов окна видно сейчас на экране монитора, для тех случаев когда оно неактивно и немного прикрыто другим каким нибудь окном?</p><p>К примеру на этот гуи:<br /></p><div class="codebox"><pre><code>    WS_EX_LAYERED := 0x00080000
    Gui, +Owner
    Gui, Add, Picture, x0 y0 w420 h330 Hidden gMyPic vMyPic, %SlidePic%
    Gui, +LastFound -Caption +E0x80000
    GuiHwnd := WinExist()
    
    result:=DllCall(&quot;SetLayeredWindowAttributes&quot; ;========&lt;&lt;ПРОБЛЕМНАЯФУНКЦИЯ&gt;&gt;==========
       , UInt, GuiHwnd
       , Uint, 0x0099aaee   ;0x00bbggrr
       , Char, 0xff
       , Uint, 1)   ;LWA_COLORKEY:=1   ;LWA_ALPHA:=2
    
    
    Gui, Color, EEAA99
    Transparency = 0
    WinSet, Transparent, %Transparency% %Transparency%, MySlideShow
    Gui Show, x860 y440 w420 h330, MySlideShow
    GuiControl, Show, MyPic</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (avens)]]></author>
			<pubDate>Sun, 30 Jan 2011 11:06:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=44600#p44600</guid>
		</item>
	</channel>
</rss>
