1

Тема: AHK: Активация окна наведением курсора без вывода на передний план

По следам этой темы. Недавно обнаружил, как можно включать и выключать "active window tracking" без перезагрузки. В принципе, я предпочитаю пользоваться этой возможностью постоянно, но встречаются приложения, работать с которыми не очень удобно, когда она включена (окна подсказок забирают фокус), и всегда хотелось иметь возможность отключать её ненадолго. Однако, иного способа, кроме как правка реестра и последующая перезагрузка (или logout + login, как верно подсказал creature.ws, а вот версия Irbis'а не сработала) известно мне не было. Но теперь всё изменилось! Следующая функция работает, как переключатель:

F11::
   ToolTip % "ActiveWindowTracking " . (ActiveWindowTracking_Toggle() ? "В" : "ОТ") . "ключен!"
   Sleep, 1000
   ToolTip
   return

ActiveWindowTracking_Toggle(ActiveWndTrkZorder=0, ActiveWndTrkTimeout=0)
{
;  ActiveWndTrkZorder — выводить ли активируемое мышью окно на передний план
;  ActiveWndTrkTimeout — таймаут при активации мышью в милисекундах

   SPI_GETACTIVEWINDOWTRACKING := 0x1000
   SPI_SETACTIVEWINDOWTRACKING := 0x1001
   SPI_GETACTIVEWNDTRKZORDER := 0x100C 
   SPI_SETACTIVEWNDTRKZORDER := 0x100D
   SPI_GETACTIVEWNDTRKTIMEOUT := 0x2002
   SPI_SETACTIVEWNDTRKTIMEOUT := 0x2003
   SPIF_UPDATEINIFILE := 0x1
      
   if b := CheckAndAction(SPI_GETACTIVEWINDOWTRACKING, SPI_SETACTIVEWINDOWTRACKING, SPIF_UPDATEINIFILE)
   {
      CheckAndAction(SPI_GETACTIVEWNDTRKZORDER , SPI_SETACTIVEWNDTRKZORDER , SPIF_UPDATEINIFILE, ActiveWndTrkZorder)
      CheckAndAction(SPI_GETACTIVEWNDTRKTIMEOUT, SPI_SETACTIVEWNDTRKTIMEOUT, SPIF_UPDATEINIFILE, ActiveWndTrkTimeout)
   }
   Return !b
}

CheckAndAction(uiGET, uiSET, fWinIni, arg="")
{
   VarSetCapacity(buffer, 4)
   DllCall("SystemParametersInfo", UInt, uiGET, UInt, 0, Ptr, &buffer, UInt, 0)
   if ((b := NumGet(buffer, "UInt")) != arg)
      DllCall("SystemParametersInfo", UInt, uiSET, UInt, 0, Ptr, arg = "" ? !b : arg, UInt, fWinIni)
   Return b
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder