Gnu*_*bie 8 windows-7 ordering window always-on-top
一些程序,例如 GridMove 和 XNeat,允许用户使用“Always On Top”命令将给定的窗口保持在其他窗口之上。有没有办法用任何 Windows 7 命令或免费软件来做相反的事情,即“始终在底部”,除非使所有其他窗口“始终在顶部”?
有时将聊天程序(在其中进行输入)保留在所有窗口下方是有用的,只有最新的消息和文本输入字段通过窗口间隙可见,而聊天程序的 UI 的其余部分不会弄乱空间。
很久以前,Windows 有一个名为 X-Mouse 的 PowerToy(后来在 TweakUI 中),除其他外,它支持旧式 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
Run Code Online (Sandbox Code Playgroud)
“topmost”是 WM 维护的一个持久窗口属性,没有等效的“bottommost”,所以我们必须稍微修改一下它。
While 循环等待应用程序获得前台,然后再次将其置于前台,同时保持键盘焦点。模态弹出窗口有时可能会干扰这一点,但它应该非常有用。在监视的程序终止后,脚本将继续在后台运行。Alt+F11 可随时退出。
更改 $regexp 以匹配“mIRC”或其他内容。上面的方法一次只能可靠地处理一个窗口。阅读 WinWait() 的 AutoIT 文档,了解如何匹配窗口而不是按窗口标题。
保存到 dropwindow.au3 并使用“autoit3 dropwindow.au3”运行它。
http://www.autoitscript.com/site/autoit/downloads/
归档时间: |
|
查看次数: |
1642 次 |
最近记录: |