1

Тема: AHK: Действие при наведении на окно

Необходимо реализовать следующий сценарий: при нажатии на горячую клавишу включается режим, при котором заданное окно скрывается при наведении на него курсора мыши, и появляется в результате наведения курсора в иную заданную область. Сейчас работает только скрытие, но не появление. Также не устраивает оформление моего сценария. Помогите, пожалуйста, реализовать задуманное.

#Persistent
DetectHiddenWindows, On

1::
SetTimer, MPCHide, 100
SetTimer, MPCShow, 100
return

2::
SetTimer, MPCHide, 100, Off
SetTimer, MPCShow, 100, Off
return

MPCHide:
Sleep, 100
MouseGetPos,,, Win_ID
WinGetClass, WinClass, ahk_id %Win_ID%
IF WinClass = MediaPlayerClassicW
WinHide, ahk_id %Win_ID%
return

MPCShow:
Sleep, 100
MouseGetPos,,, Win_ID
WinGetClass, WinClass, ahk_id %Win_ID%
IF WinClass = SciTEWindow
WinShow, ahk_id MediaPlayerClassicW
return

2

Re: AHK: Действие при наведении на окно

Замените последнее ahk_id на ahk_class.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Действие при наведении на окно

MyWinClass := "Notepad"
#Persistent
DetectHiddenWindows, On
CoordMode,  Mouse,Screen

1::Settimer hsWin,10
2::
  Settimer hsWin,off
  WinShow,ahk_id %idWinP%
  return 
hsWin:
MouseGetPos,xC,yC,idWin
if !WinHiden and  WinExist("ahk_class " MyWinClass " ahk_id " idWin)
{
	WinGetPos,Xwin,Ywin,Wwin,Hwin
	idWinP := idWin
	WinHiden := true
	WinHide
	
} Else if WinHiden
	and (yC < Ywin                ; top
        or xC > Xwin + Wwin  ; right
        or yC > Ywin + Hwin   ; bottom
        or xC < Xwin)               ; left
	  {
	      WinHiden := false
          WinShow,ahk_id %idWinP%
	  }
Return

4

Re: AHK: Действие при наведении на окно

yalanne, Спасибо! То, что нужно!

5 (изменено: becauseim, 2016-10-28 02:12:29)

Re: AHK: Действие при наведении на окно

Помогите, пожалуйста, добавить в сценарий положение, при котором скрываемое окно при нажатии на одну горячую клавишу принимало атрибут отображения поверх всех окон, а при нажатии на другую - поверх некоторых заданных окон.

Т.е. окно размещается всегда над заданными окнами, а при наведении, скрывается. Соответственно, при выключении функции, принимало обычный режим отображения.

Пытался самостоятельно внедрить желаемое с помощью Winset, AlwaysOnTop, но, к сожалению, не получилось.

Также, хотелось бы, если такое возможно, чтобы окно все-таки скрывалось в панель задач, т.е. оставалась видимой на панели задач. Но так же моментально, как и при полном скрытии, т.е. без анимации сворачивания окна.

Спасибо!

6 (изменено: becauseim, 2016-10-29 21:00:03)

Re: AHK: Действие при наведении на окно

#Persistent
#SingleInstance, Force
SetTimer, CheckActiveMPC, 100
return


CheckActiveMPC:
IfWinActive, Notepad
{
	WinSet, AlwaysOnTop, ON, ahk_class MediaPlayerClassicW ahk_id 0xc0958
}
Else
	WinSet, AlwaysOnTop, Off, ahk_class MediaPlayerClassicW ahk_id 0xc0958
Return

Нашел способ, как отдельным сценарием установить окно поверх определенного окна, однако, почему-то не работает с окном Media Player Classic в минимальном режиме отображения (Menu - View - Presets... - Minimal). Можно ли как-то решить эту проблему?

И как все-таки скрыть окно в панель задач?

7

Re: AHK: Действие при наведении на окно

becauseim пишет:

И как все-таки скрыть окно в панель задач?

WinMinimize
Сворачивает указанное окно в кнопку на панели задач.

WinMinimize [, WinTitle, WinText, ExcludeTitle, ExcludeText]