Давным-давно в 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/