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/
foreground
.