Функция Windows 7 или бесплатное ПО, позволяющее всегда держать окно ниже других

Функция Windows 7 или бесплатное ПО, позволяющее всегда держать окно ниже других

Некоторые программы, например GridMove и XNeat, позволяют пользователям удерживать заданное окно поверх других окон с помощью команды "Always On Top". Есть ли способ сделать обратное, то есть "Always At The Bottom" с помощью любых команд Windows 7 или бесплатного ПО для этого, кроме как сделать все остальные окна "Always On Top"?

Иногда бывает полезно разместить программы чата (в которых осуществляется ввод текста) под всеми окнами, оставляя видимыми только последнее сообщение и поле ввода текста через промежутки между окнами, не загромождая пространство остальной частью пользовательского интерфейса программы чата.

решение1

Давным-давно в Windows был PowerToy (позже в TweakUI) под названием X-Mouse, который, помимо прочего, поддерживал старый стиль X "фокус следует за мышью", где "фокус" и "передний план" были не одним и тем же. Я не думаю, что он еще поддерживается (последний раз был замечен для WinXP).

Хотя я не пользовался им широко, бесплатный инструмент для создания скриптов WindowsАвтоИТможете сделать все, что захотите, с помощью короткого скрипта:

#include <WinAPI.au3>
#include <Constants.au3>
#include <WindowsConstants.au3>
#include <MenuConstants.au3>
#include <SendMessage.au3>

Local $hWnd,$flags,$regexp

Func MyExit() 
    MsgBox(0,"Drop Window","Quitting!",2) 
    Exit 0
EndFunc

$flags = BitOr($SWP_NOMOVE,$SWP_NOSIZE,$SWP_NOACTIVATE,$SWP_ASYNCWINDOWPOS,$SWP_NOSENDCHANGING) 

;; hot key to call exit: ALT + F11
HotKeySet("!{F11}","MyExit")

;; application window title
$regexp=".*Notepad$"

;; 10 second time out on first startup, 
$hWnd = WinWait("[REGEXPTITLE:" & $regexp & "]", "", 10)
;; or wait forever
;$hWnd = WinWait("[REGEXPTITLE:" & $regexp & "]")

If ($hWnd) Then
    ;; uncomment next line to maximize window first
    ;_SendMessage($hWnd,$WM_SYSCOMMAND,$SC_MAXIMIZE)

    _WinAPI_SetWindowPos($hWnd, $HWND_BOTTOM, 0, 0, 0, 0, $flags);

    While 1
        If WinWaitActive($hWnd,"",10) Then
            _WinAPI_SetWindowPos($hWnd, $HWND_BOTTOM, 0, 0, 0, 0, $flags);
        EndIf
        ;; check for new window
        $hWnd = WinWait("[REGEXPTITLE:" & $regexp & "]","",1) 

        ;; uncomment next 3 lines to quit if no window
        ;if (NOT $hWnd) Then
        ;    MyExit()
        ;EndIf

        Sleep(250)
    Wend
Else
    MsgBox(0,"Drop Window","No window title matching /" & $regexp & "/") 
EndIf

«topmost» — это постоянное свойство окна, которое поддерживает WM, эквивалента «bottom most» нет, поэтому нам придется немного подтасовать.

Цикл While ждет, пока приложение перейдет на передний план, затем снова опускает его, сохраняя фокус клавиатуры. Модальные всплывающие окна иногда могут этому мешать, но это должно быть вполне пригодно. Скрипт продолжит работать в фоновом режиме после завершения отслеживаемой программы. Alt+F11 для выхода в любое время.

Измените $regexp на соответствие "mIRC" или что-то еще. Вышеуказанное будет надежно обрабатывать только одно окно за раз. Прочитайте документацию AutoIT для WinWait(), чтобы узнать, как сопоставлять окна, отличные от заголовка окна.

Сохраните в dropwindow.au3 и запустите его с помощью «autoit3 dropwindow.au3».

http://www.autoitscript.com/site/autoit/downloads/

решение2

Если у вас есть ПК, оснащенный графической картой ATI Radeon, вы можете использовать HydraGrid с последними драйверами и утилитами ATI, если нетРеволюция Winsplit.

Связанный контент