Recurso ou freeware do Windows 7 para manter uma janela sempre abaixo das outras

8

Alguns programas, por exemplo, GridMove e XNeat, permitem que os usuários mantenham uma determinada janela acima de outras, usando o comando "Always On Top". Existe uma maneira de fazer o inverso, ou seja, "Always At The Bottom" com qualquer comando ou freeware do Windows 7, exceto fazendo todas as outras janelas "Always On Top"?

Às vezes, é útil manter os programas de bate-papo (nos quais a digitação ocorre) sob todas as janelas, apenas o campo de entrada de mensagens e texto mais recente visível através das lacunas das janelas, sem o restante da interface do usuário do programa de bate-papo sobrecarregando o espaço.

Gnubie
fonte
1
Não, não há nenhum recurso interno da Biblioteca Win32 que permita que um programador force um aplicativo em segundo plano. É mais logicamente dizer a outros aplicativos para acessar o foreground.
precisa saber é o seguinte
Como alternativa, você pode fazer com que essa janela veja através da alteração de sua transparência (muitas ferramentas podem fazer isso). Ou você pode usar AutoHotkey para minimizá-lo à bandeja (Se a sua não mata o propósito :-)).
Ankit
1
Mesmo que o Win32 não suporte nativamente isso, você pode enviar uma janela específica para o plano de fundo a qualquer momento. Eu não sei se ele mantém o foco então, no entanto. Talvez você possa procurar uma maneira de enviar automaticamente a janela para trás assim que ela perder o foco. Outra alternativa é a telha as janelas para que você não deve se preocupar com z-index ...
MarioDS

Respostas:

1

Há muito tempo, o Windows tinha um PowerToy (mais tarde no TweakUI) chamado X-Mouse que, entre outras coisas, suportava o X antigo "foco segue o mouse", onde "foco" e "primeiro plano" não eram a mesma coisa. Eu não acredito que seja mantido mais (a última observação foi para o WinXP).

Embora eu não o tenha usado extensivamente, a ferramenta de script gratuita do Windows AutoIT pode fazer o que você deseja com um script curto:

#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" é uma propriedade de janela persistente que o WM mantém; não há "bottom most" equivalente; portanto, precisamos alterá-lo um pouco.

O loop While espera que o aplicativo obtenha o primeiro plano e o coloca novamente em baixo enquanto mantém o foco do teclado. Às vezes, os pop-ups modais podem interferir com isso, mas deve ser bastante útil. O script continuará sendo executado em segundo plano após o término do programa monitorado. Alt + F11 para sair a qualquer momento.

Altere $ regexp para corresponder a "mIRC" ou qualquer outra coisa. O acima descrito manipulará com confiabilidade apenas uma janela por vez. Leia os documentos do AutoIT para WinWait () para ver como corresponder a janelas que não sejam pelo título da janela.

Salve em dropwindow.au3 e execute-o com "autoit3 dropwindow.au3".

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

mr.spuratic
fonte
1

Se você possui um PC equipado com a placa gráfica ATI Radeon, poderá usar o HydraGrid com os drivers e utilitários mais recentes da ATI, se não o Winsplit Revolution .

climenole
fonte