Funzionalità di Windows 7 o freeware per mantenere una finestra sempre al di sotto delle altre


8

Alcuni programmi, ad esempio GridMove e XNeat, consentono agli utenti di mantenere una determinata finestra sopra altre finestre utilizzando un comando "Sempre in primo piano". C'è un modo per fare il contrario, ad esempio "Always At The Bottom" con qualsiasi comando di Windows 7 o freeware per esso, tranne rendendo tutte le altre finestre "Always On Top"?

A volte è utile mantenere i programmi di chat (in cui si verifica la digitazione) sotto tutte le finestre con solo l'ultimo messaggio e il campo di immissione del testo visibili attraverso gli spazi vuoti di Windows senza che il resto dell'interfaccia utente del programma di chat ingombra lo spazio.


1
No, non esiste alcuna funzionalità integrata nella libreria Win32 che consente a un programmatore di forzare un'applicazione in background. Sta logicamente dicendo ad altre applicazioni di andare su foreground.
Ramhound,

In alternativa puoi far vedere quella finestra attraverso la mia alterazione della sua trasparenza (molti strumenti possono farlo). Oppure puoi usare AutoHotkey per minimizzarlo sul vassoio (se non uccide lo scopo :-))
Ankit

1
Anche se Win32 non supporta questo in modo nativo, è possibile inviare una finestra particolare sullo sfondo in qualsiasi momento. Tuttavia, non so se manterrà la concentrazione. Forse potresti cercare un modo per inviare automaticamente la finestra sul retro non appena perde la messa a fuoco. Un'altra alternativa è quella di piastrellare le finestre, quindi non dovresti preoccuparti di z-index ...
MarioDS,

Risposte:


1

Molto tempo fa, Windows aveva un PowerToy (più tardi in TweakUI) chiamato X-Mouse che, tra le altre cose, supportava l'X vecchio stile "focus segue il mouse", dove "focus" e "primo piano" non erano la stessa cosa. Non credo che sia più mantenuto (l'ultimo avvistamento è stato per WinXP).

Anche se non l'ho usato ampiamente, lo strumento gratuito di scripting di Windows AutoIT può fare quello che vuoi con uno script breve:

#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" è una proprietà di finestra persistente mantenuta da WM, non esiste un "bottom most" equivalente, quindi dobbiamo spostarci un po '.

Il ciclo While attende che l'applicazione ottenga il primo piano, quindi lo rilascia di nuovo mantenendo lo stato attivo della tastiera. I popup modali possono talvolta interferire con questo, ma dovrebbe essere abbastanza utilizzabile. Lo script continuerà a essere eseguito in background dopo il termine del programma guardato. Alt + F11 per uscire in qualsiasi momento.

Cambia $ regexp in modo che corrisponda a "mIRC" o qualsiasi altra cosa. Quanto sopra gestirà in modo affidabile solo una finestra alla volta. Leggi i documenti di AutoIT per WinWait () per vedere come abbinare finestre diverse dal titolo della finestra.

Salvare in dropwindow.au3 ed eseguirlo con "autoit3 dropwindow.au3".

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


1

Se si dispone di un PC dotato di scheda grafica ATI Radeon, è possibile utilizzare HydraGrid con i driver e le utilità ATI più recenti, se non Winsplit Revolution .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.