Windows 7 особенность или бесплатное программное обеспечение, чтобы держать окно всегда под другими


8

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

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


1
Нет, в библиотеке Win32 нет встроенной функции, позволяющей программисту принудительно переводить приложение в фоновый режим. Более логично указывать другим приложениям перейти на foreground.
Ramhound

В качестве альтернативы вы можете заставить это окно видеть сквозь мои изменения его прозрачности (многие инструменты могут сделать это). Или вы можете использовать AutoHotkey, чтобы свернуть его в трей. (Если это не убивает цель :-))
Ankit

1
Хотя Win32 изначально не поддерживает это, вы можете отправить конкретное окно в фоновый режим в любой момент. Я не знаю, если это сохраняет фокус, тогда. Возможно, вы могли бы найти способ автоматически отправить окно назад, как только оно потеряет фокус. Другой альтернативой является облицовка окон, так что вам не стоит беспокоиться о z-index ...
MarioDS

Ответы:


1

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

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

#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» нет, поэтому мы должны немного его выдумать.

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

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

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

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


1

Если у вас есть компьютер с видеокартой ATI Radeon, вы можете использовать HydraGrid с последними драйверами и утилитами ATI, если не Winsplit Revolution .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.