Функція Windows 7 або безкоштовна програма для збереження вікна завжди під іншими


8

Деякі програми, наприклад, GridMove та XNeat, дозволяють користувачам тримати задане вікно над іншими вікнами за допомогою команди "Завжди вгорі". Чи є спосіб зробити реверс, тобто "Завжди внизу" з будь-якими командами Windows 7 або безкоштовною програмою, за винятком того, як зробити всі інші вікна "Завжди вгорі"?

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


1
Ні, в бібліотеці Win32 немає вбудованої функції, яка дозволяє програмісту змусити додаток на другий план. Більш логічно сказати іншим програмам перейти до foreground.
Рамхаунд

Як альтернативу, ви можете зробити це вікно, побачивши мою зміну його прозорості (багато інструментів можуть це зробити). Або ви можете використовувати AutoHotkey, щоб мінімізувати його для лотка. (Якщо це не вбиває мету :-))
Ankit

1
Навіть незважаючи на те, що Win32 не підтримує цього, ви можете надіслати певне вікно на задній план у будь-який момент. Я не знаю, чи залишається тоді фокус. Можливо, ви могли б шукати спосіб автоматичного надсилання вікна назад, як тільки замість цього воно втрачає фокус. Ще одна альтернатива - облицювання вікон, так що вам не варто турбуватися про z-індекс ...
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.