<?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=11441</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=11441&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Показать окно при наведении на границу экрана».]]></description>
		<lastBuildDate>Sun, 27 Mar 2016 17:13:11 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Показать окно при наведении на границу экрана]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=102035#p102035</link>
			<description><![CDATA[<p>Да вполне возможно. Win 10 у меня нет, чтобы проверить и исправить.</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Sun, 27 Mar 2016 17:13:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=102035#p102035</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Показать окно при наведении на границу экрана]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=102021#p102021</link>
			<description><![CDATA[<p><strong>Alectric</strong>, в результате воздействия скрипта, окна становятся полупрозрачными, но не скрываются. Должно быть, причина в Win 10.</p>]]></description>
			<author><![CDATA[null@example.com (becauseim)]]></author>
			<pubDate>Sun, 27 Mar 2016 12:44:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=102021#p102021</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Показать окно при наведении на границу экрана]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=102012#p102012</link>
			<description><![CDATA[<p>&quot;PopClasses=&quot; оставляй пустым, как есть. Наводишь курсор на окно и жмешь F1, класс автоматом записывается в &quot;PopClasses=&quot;. Далее переносишь окно так чтобы его край уходил за пределы экрана, и уводишь курсор подальше от окна.</p><p>...</p><p>Я изменил код, скопируй его снова.</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Sat, 26 Mar 2016 17:05:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=102012#p102012</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Показать окно при наведении на границу экрана]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=102009#p102009</link>
			<description><![CDATA[<p><strong>Alectric</strong>, Спасибо! Но, к сожалению, пока не работает, пробовал указывать класс несколькими способами:<br /></p><div class="codebox"><pre><code>PopClasses=TAIMPMainForm</code></pre></div><div class="codebox"><pre><code>PopClasses=&quot;TAIMPMainForm&quot;</code></pre></div><div class="codebox"><pre><code>PopClasses= ahk_class TAIMPMainForm</code></pre></div><p>Далее навожу курсор мыши к краям экрана, окно не активируется. Скорее всего, я не понял, как этим пользоваться.</p>]]></description>
			<author><![CDATA[null@example.com (becauseim)]]></author>
			<pubDate>Sat, 26 Mar 2016 12:04:04 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=102009#p102009</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Показать окно при наведении на границу экрана]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=102003#p102003</link>
			<description><![CDATA[<p>Извлек код:<br /></p><div class="codebox"><pre><code>#SingleInstance,Force
#NoEnv
ListLines,Off
#KeyHistory,0
AutoTrim,Off
CoordMode,Mouse,Screen
CoordMode,ToolTip
CoordMode,Pixel
CoordMode,Caret,Screen
DetectHiddenWindows,On
Menu,Tray,UseErrorLevel
process,priority,,realtime
SendMode,Input
SetBatchLines,-1
SetControlDelay,0
SetKeyDelay,0
SetTitleMatchMode,2
SetWinDelay,20
SetWorkingDir,%A_ScriptDir%
StringCaseSense,Off
OnExit,EXIT
ComObjError(false)

Gui,5:+hwndhDummy -Caption +Border +ToolWindow +E0x08000020

Settingspath=SOFTWARE\DF
SettingsDefault=
(
PopClasses=
popdistcoef=1.1
popFadeEffect=1
popmintrans=150
popshow=200
popWObutton=1
popHideSpeed=10
popShowSpeed=10
sleep=1
)

Gosub,LoadSettings


PopWin_IDa:=[]
PopClassesa:=[]
loop,parse,PopClasses,`,
{
  if !a_loopfield
    continue
  PopClassesa.push(a_loopfield)
}

loop
{
DF_Time:=oldDF_Time!=&quot;&quot; ? a_tickcount-oldDF_Time : 0
oldDF_Time:=a_tickcount
MouseGetPos,DF_X,DF_Y,DF_mwin,DF_mctrl
WinGetTitle,DF_Title,ahk_id %DF_mwin%
WinGetClass,DF_Class,ahk_id %DF_mwin%
WinGet,DF_ActiveWin,id,A
WinGetTitle,DF_ActiveTitle,ahk_id %DF_ActiveWin%
WinGetClass,DF_ActiveClass,ahk_id %DF_ActiveWin%

  sleep,10
if (!popgetlist:=popgetlist&gt;sleep+20 ? 0 : popgetlist=&quot;&quot; ? 1 : popgetlist+DF_Time)
{
  WinGet,poplist,list
  loop,% poplist
  {
    popid:=poplist%a_index%
    wingetclass,popclass,ahk_id %popid%

    if ExistInArray(PopClassesa,popclass)
    {
      if !ExistInArray(PopWin_IDa,popid)
      {
        PopWin_IDa.Push(popid)
        if popWObutton
          SetStyleWin(popid,1)
        WinGet,popExStyle,ExStyle,ahk_id %popid%
        if (popExStyle &amp; 0x8)
          popontopsave%popid%:=1
        else
          popontopsave%popid%:=
      }
    }
  }
}
if PopWin_IDa.MaxIndex() ; and (oldpopmx!=DF_X or oldpopmy!=DF_Y))
{
  if (DF_ActiveWin!=oldDF_ActiveWin and !ExistInArray(PopWin_IDa,DF_ActiveWin) and !instr(&quot;Progman,Shell_TrayWnd&quot;,DF_ActiveClass))
    lastwin:=DF_ActiveWin
  oldDF_ActiveWin:=DF_ActiveWin
  if !winexist(&quot;ahk_id &quot; lastwin)
    lastwin:=hDummy
  WinGet,lastwinMinMax,MinMax,ahk_id %lastwin%

  for i, e in PopWin_IDa
  {
    if !e
      continue
    ifwinexist,ahk_id %e%
    {
      WinGet,popMinMax%e%,MinMax,ahk_id %e%
      WinGetPos,popwx,popwy,popww,popwh,ahk_id %e%
      if (DF_mwin=e and pop%e%hiden)
      {
        if (!popupd%e%:=popupd%e%&gt;100 ? 0 : popupd%e%=&quot;&quot; ? 1 : popupd%e%+1)
          WinSet,Transparent,255,Ahk_id %e%
      }
      if (popMinMax%e%=1 or popww&gt;a_screenwidth or popwh&gt;a_screenheight)
      {
        oldpopMinMax%e%:=popMinMax%e%
        continue
      }
      else if (popMinMax%e%=-1 and oldpopMinMax%e%!=1)
      {
        WinRestore,ahk_id %e%
        if (lastwinMinMax!=-1 and lastwinMinMax!=&quot;&quot;)
          winactivate,ahk_id %lastwin%
        else
          winactivate,ahk_id %hDummy%
        pop%e%OnTop=
        pop%e%hiden:=pop_moveWin(e,0)
        winset,AlwaysOnTop,on,ahk_id %e%
        WinSet,Transparent,255,Ahk_id %e%
      }
      popxx:=a_screenwidth-popww
      popyy:=a_screenheight-popwh
      popdist:=(popxx&gt;popyy ? popyy : popxx)//popdistcoef
      popwindistx:=DF_X&lt;popwx ? popwx-DF_X : DF_X&gt;popwx+popww ? DF_X-(popwx+popww) : 0
      popwindisty:=DF_Y&lt;popwy ? popwy-DF_Y : DF_Y&gt;popwy+popwh ? DF_Y-(popwy+popwh) : 0
      popwindist:=popwindistx&gt;popwindisty ? popwindistx : popwindisty
  ;tooltip,% &quot;Transp = &quot; popwindistRate &quot;`nDist = &quot; popwindist &quot;`n&quot; popdist &quot;`n&quot; popmintrans

      if (DF_mwin=e and pop%e%hiden)
      {
        poptimer%e%+=DF_Time
        if (poptimer%e%&gt;popshow)
        {
          poptimer%e%=0
          pop%e%hiden=
          pop_moveWin(e,1,popShowSpeed)
          WinSet,Transparent,255,Ahk_id %e%
          winset,AlwaysOnTop,on,ahk_id %e%
        }
      }
      else if (DF_mwin!=e and !pop%e%hiden)
      {
        poptimer%e%=0
        if DF_Class not contains #32768,Popup,tooltip
        {
          if ((popwindist&gt;popdist or !ExistInArray(PopWin_IDa,DF_ActiveWin)) and !(popwx&gt;0 and popwy&gt;0 and popwx+popww&lt;a_screenwidth-5 and popwy+popwh&lt;a_screenheight-5))
          {
            if (lastwinMinMax!=-1 and lastwinMinMax!=&quot;&quot;)
              winactivate,ahk_id %lastwin%
            else
              winactivate,ahk_id %hDummy%
            pop%e%OnTop=
            pop%e%hiden:=pop_moveWin(e,0,popHideSpeed)
            winset,AlwaysOnTop,on,ahk_id %e%
            WinSet,Transparent,255,Ahk_id %e%
          }
          else if (popWObutton and !pop%e%OnTop and (popwx&gt;0 and popwy&gt;0 and popwx+popww&lt;a_screenwidth-5 and popwy+popwh&lt;a_screenheight-5))
          {
            pop%e%OnTop=1
            winset,AlwaysOnTop,on,ahk_id %e%
          }
          if (oldpopmx%e%!=DF_X or oldpopmy%e%!=DF_Y)
          {
            popwindistRate:=round(((popwindist/(255/(255-popmintrans)))/popdist*255-255)*-1)
            popwindistRate:=popwindistRate&gt;255 ? 255 : popwindistRate&lt;popmintrans ? popmintrans : popwindistRate
            if popFadeEffect
              WinSet,Transparent,%popwindistRate%,Ahk_id %e%
          }
          oldpopmx%e%:=DF_X
          oldpopmy%e%:=DF_Y
        }
      }
      else if (pop%e%hiden and DF_ActiveWin=e)
      {
        poptimer%e%=0
        pop%e%hiden=
        pop_moveWin(e,1,popShowSpeed)
        WinSet,Transparent,255,Ahk_id %e%
        winset,AlwaysOnTop,on,ahk_id %e%
      }
      else
        poptimer%e%=0
      if (pop%e%hiden)
      {
        if (!popupd%e%:=popupd%e%&gt;100 ? 0 : popupd%e%=&quot;&quot; ? 1 : popupd%e%+1)
          DllCall(&quot;ShowWindow&quot;,&quot;ptr&quot;,e,&quot;Int&quot;,8)
      }
    }
    else
    {
      PopWin_IDa.RemoveAt(i)
      pop%e%hiden=
      pop%e%OnTop=
      oldpopmx%e%=
      oldpopmy%e%=
      poptimer%e%=
      popupd%e%=
    }
  }
}


}

f1::
mousegetpos,,,contextid
WinGetClass,contextclass,ahk_id %contextid%
PopWinadd:
PopClasses.=contextclass &quot;`,&quot;
PopClassesa.push(contextclass)
gosub,savesettings
return

f2::
mousegetpos,,,contextid
WinGetClass,contextclass,ahk_id %contextid%
PopWindel:
winset,AlwaysOnTop,% popontopsave%contextid%=1 ? &quot;on&quot; : &quot;off&quot;,ahk_id %contextid%
if popWObutton
  SetStyleWin(contextid,0)
for i, e in PopWin_IDa
  if (e=contextid)
    PopWin_IDa.RemoveAt(i), break
for i, e in PopClassesa
  if (e=contextclass)
    PopClassesa.RemoveAt(i), break
PopClasses:=RegExReplace(PopClasses, contextclass &quot;`,&quot;, &quot;&quot;)
gosub,savesettings
return

SetStyleWin(hwnd,add=&quot;&quot;)
{
  WinHide,ahk_id %hwnd%
  if add
    WinSet,ExStyle,+0x80,ahk_id %hwnd%
  else
    WinSet,ExStyle,-0x80,ahk_id %hwnd%
  WinShow,ahk_id %hwnd%
}

pop_moveWin(hwnd,Show,SmoothSpeed=&quot;&quot;)
{
  WinGetPos,popwx,popwy,popww,popwh,ahk_id %hwnd%
  if (popww&gt;a_screenwidth or popwh&gt;a_screenheight)
    return ; -1
  if show
  {
    if popwx&lt;0
    {
      if SmoothSpeed
      {
        pos:=popwx, var:=popww/SmoothSpeed
        loop,% SmoothSpeed
        {
          pos+=var
          winmove,ahk_id %hwnd%,,% pos
          if (pos&gt;-var)
            break
        }
      }
      winmove,ahk_id %hwnd%,,0
      return 1
    }
    else if (popwx+popww&gt;a_screenwidth)
    {
      if SmoothSpeed
      {
        pos:=popwx, var:=popww/SmoothSpeed
        loop,% SmoothSpeed
        {
          pos+=-var
          winmove,ahk_id %hwnd%,,% pos
          if (pos&lt;a_screenwidth-popww+var)
            break
        }
      }
      winmove,ahk_id %hwnd%,,% a_screenwidth-popww
      return 1
    }
    else if popwy&lt;0
    {
      if SmoothSpeed
      {
        pos:=popwy, var:=popwh/SmoothSpeed
        loop,% SmoothSpeed
        {
          pos+=var
          winmove,ahk_id %hwnd%,,,% pos
          if (pos&gt;-var)
            break
        }
      }
      winmove,ahk_id %hwnd%,,,0
      return 1
    }
  }
  else
  {
    if (popwx&lt;=0)
    {
      if SmoothSpeed
      {
        pos:=popwx, var:=popww/SmoothSpeed
        loop,% SmoothSpeed
        {
          pos+=-var
          winmove,ahk_id %hwnd%,,% pos
          if (pos&lt;-popww+var)
            break
        }
      }
      winmove,ahk_id %hwnd%,,% 5-popww
      return 1
    }
    else if (popwx+popww&gt;=a_screenwidth)
    {
      if SmoothSpeed
      {
        pos:=popwx, var:=popww/SmoothSpeed
        loop,% SmoothSpeed
        {
          pos+=var
          winmove,ahk_id %hwnd%,,% pos
          if (pos&gt;a_screenwidth-var)
            break
        }
      }
      winmove,ahk_id %hwnd%,,% a_screenwidth-5
      return 1
    }
    else if (popwy&lt;=0)
    {
      if SmoothSpeed
      {
        pos:=popwy, var:=popwh/SmoothSpeed
        loop,% SmoothSpeed
        {
          pos+=-var
          winmove,ahk_id %hwnd%,,,% pos
          if (pos&lt;-popwh+var)
            break
        }
      }
      winmove,ahk_id %hwnd%,,,% 5-popwh
      return 1
    }
  }
}

SaveSettings:
if Settingspath=
  Settingspath=SOFTWARE\Unknown_AHK_Script
loop,parse,SettingsDefault,`n
{
  Loop,parse,a_loopfield,=
  {
    if a_index=1
    {
      Setting:=a_loopfield
      Break
    }
  }
  RegWrite,REG_SZ,HKCU,%Settingspath%,%Setting%,% %Setting%
}
LoadSettings:
if Settingspath=
  Settingspath=SOFTWARE\Unknown_AHK_Script
loop,parse,SettingsDefault,`n
{
  Loop,parse,a_loopfield,=
  {
    if a_index=1
      Setting:=a_loopfield
    else if a_index=2
      Default:=a_loopfield
    else
      Default.=&quot;=&quot; a_loopfield
  }
  RegRead,%Setting%,HKCU,%Settingspath%,%Setting%
  if errorlevel
  {
    RegWrite,REG_SZ,HKCU,%Settingspath%,%Setting%,%Default%
    RegRead,%Setting%,HKCU,%Settingspath%,%Setting%
  }
}
popmintrans:= popmintrans&lt;10 ? 10 : popmintrans&gt;250 ? 250 : popmintrans
Return

Exit:
if !alreadyexit
{
gosub,SaveSettings
for i, e in PopWin_IDa
{
  if !e
    continue
  winset,AlwaysOnTop,% popontopsave%e%=1 ? &quot;on&quot; : &quot;off&quot;,ahk_id %e%
  WinSet,Transparent,255,Ahk_id %e%
  if popWObutton
    SetStyleWin(e,0)
  pop_moveWin(e,1)
}
alreadyexit=1
}
ExitApp

ExistInArray(array,Needle)
{
  for i, e in array
    if (e=Needle)
      return 1
}
</code></pre></div><p><em>Настройки:<br />PopClasses= - классы окон для которых активируется данная функция;<br />popdistcoef=1.1 - коэффициент расстояния, когда окно прячется при удалении мышки от него, если окно активно;<br />popFadeEffect=1 - эффект прозрачности;<br />popmintrans=150 - минимальная прозрачность;<br />popshow=200 - задержка появления окна при наведении мыши к краю в миллисекундах;<br />popWObutton=1 - скрывать кнопку с панели задач;<br />popHideSpeed=10 - скорость &quot;слайдинга&quot; при скрытии, чем больше число тем быстрее скроется;<br />popShowSpeed=10 скорость &quot;слайдинга&quot; при появлении, чем больше число тем быстрее скроется;</em></p><p>Наведи мышь на нужное окно и нажми F1 чтобы добавить класс окна в список, F2 - чтобы удалить из списка.</p><p>Баги: у некоторых окон могут совпадать классы и функция активируется для всех без исключения, подходящих под данный класс, иногда это не очень удобно. Пока не нашел метода фильтровать конкретные окна, т.к. заголовки окон могут меняться, к ним привязываться нельзя.</p><div class="quotebox"><cite>becauseim пишет:</cite><blockquote><p>как из него можно что-либо выковырять.</p></blockquote></div><p>Предполагалось, что ты просто установишь это приложение...</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Sat, 26 Mar 2016 04:54:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=102003#p102003</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Показать окно при наведении на границу экрана]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101992#p101992</link>
			<description><![CDATA[<p><strong>Alectric</strong>, Спасибо за отклик! По ссылке исполняемый файл, и я, к сожалению, не имею представления о том, как из него можно что-либо выковырять.</p>]]></description>
			<author><![CDATA[null@example.com (becauseim)]]></author>
			<pubDate>Fri, 25 Mar 2016 07:30:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101992#p101992</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Показать окно при наведении на границу экрана]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101990#p101990</link>
			<description><![CDATA[<p>Есть готовый вариант, но его нужно &quot;выковырять&quot; из &quot;большого&quot; кода. <a href="https://drive.google.com/folderview?id=0B0frknRCL6ihZ296ZmJ2Uko0c0k&amp;usp=sharing">Вот ссылка</a>, если лень ждать, пока я его &quot;выковыряю&quot;. (клик ПКМ в заголовке окна -&gt; &quot;Привязать к краю экрана&quot;)</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Thu, 24 Mar 2016 18:02:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101990#p101990</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Показать окно при наведении на границу экрана]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101988#p101988</link>
			<description><![CDATA[<p>У плеера AIMP4 есть возможность закрепления главного окна, после чего необходимо навести курсор мыши на границу экрана и нажать на появляющуюся &quot;вкладку&quot;, чтобы увидеть главное окно.</p><p>Вкладка при наведении не показывается, когда развернуто какое-либо окно на весь экран, что в моем случае не оставляет возможности использования данного режима, т.к. рабочие окна в основном всегда развернуты.</p><p>Помогите, пожалуйста, реализовать возможность просмотра главного окна в таком режиме просто при наведении курсора на границу экрана (без нажатия на вкладку), а также его сворачивания обратно за границы экрана после того, как курсор выходит из области главного окна плеера.</p><p>Спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (becauseim)]]></author>
			<pubDate>Thu, 24 Mar 2016 16:43:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101988#p101988</guid>
		</item>
	</channel>
</rss>
