Il y a longtemps, Windows avait un PowerToy (plus tard dans TweakUI) appelé X-Mouse qui, entre autres, prenait en charge l'ancien X "focus suit mouse", où "focus" et "premier plan" n'étaient pas la même chose. Je ne crois pas que cela soit maintenu (la dernière observation était pour WinXP).
Bien que je ne l'ai pas beaucoup utilisé, l'outil de script Windows gratuit AutoIT peut faire ce que vous voulez avec un court script:
#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" est une propriété de fenêtre persistante que le WM maintient, il n'y a pas d'équivalent "bottom most", nous devons donc la truquer un peu.
La boucle While attend que l'application obtienne le premier plan, puis la replonge sous tout en gardant le focus clavier. Les fenêtres contextuelles modales peuvent parfois interférer avec cela, mais elles devraient être tout à fait utilisables. Le script continuera de s'exécuter en arrière-plan après la fin du programme surveillé. Alt + F11 pour le quitter à tout moment.
Modifiez $ regexp pour correspondre à "mIRC" ou autre. Ce qui précède ne traitera de manière fiable qu'une seule fenêtre à la fois. Lisez les documents AutoIT pour WinWait () pour voir comment faire correspondre les fenêtres autrement que par titre de fenêtre.
Enregistrez dans dropwindow.au3 et exécutez-le avec "autoit3 dropwindow.au3".
http://www.autoitscript.com/site/autoit/downloads/
foreground
.