ウィンドウを常に他のウィンドウの下に保つWindows 7の機能またはフリーウェア


8

GridMoveやXNeatなどの一部のプログラムでは、「常に手前に表示」コマンドを使用して、特定のウィンドウを他のウィンドウの上に置くことができます。他のすべてのウィンドウを「常に上」にすることを除いて、Windows 7のコマンドまたはフリーウェアを使用して、逆の方法で「常に下」を行う方法はありますか?

チャットプログラム(タイピングが発生する場所)をすべてのウィンドウの下に置いておくと、ウィンドウの隙間から最新のメッセージとテキスト入力フィールドだけが見えるので、他のチャットプログラムのUIがスペースで乱雑になることはありません。


1
いいえ、Win32ライブラリには、プログラマーがアプリケーションをバックグラウンドに強制するための組み込み機能はありません。より論理的に他のアプリケーションにに移動するように指示していforegroundます。
ラムハウンド2012

別の方法として、透明度を変更することでそのウィンドウを透けて見えるようにすることができます(多くのツールでこれを行うことができます)。または、AutoHotkeyを使用してトレイに最小化することもできます。(
それでも

1
Win32はこれをネイティブでサポートしていませんが、特定のウィンドウをいつでもバックグラウンドに送信できます。でも、それがフォーカスを維持しているかどうかはわかりません。代わりに、フォーカスを失うとすぐにウィンドウを自動的に背面に送る方法を探すことができます。もう1つの方法は、ウィンドウを
並べ

回答:


1

昔、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

「最上位」はWMが維持する永続的なウィンドウプロパティであり、同等の「最下位」はないため、少しファッジする必要があります。

Whileループは、アプリケーションがフォアグラウンドを取得するのを待ってから、キーボードフォーカスを維持したまま、再び下にドロップします。モーダルポップアップはこれに干渉する場合がありますが、かなり使いやすいはずです。監視対象のプログラムが終了した後も、スクリプトはバックグラウンドで実行され続けます。Alt + F11でいつでも終了できます。

$ regexpを「mIRC」などに一致するように変更します。上記は、一度に1つのウィンドウのみを確実に処理します。WinWait()のAutoITドキュメントを読んで、ウィンドウタイトル以外でウィンドウを一致させる方法を確認してください。

dropwindow.au3に保存して、「autoit3 dropwindow.au3」で実行します。

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


1

ATI Radeonグラフィックカードを搭載したPCをお持ちの場合は、Winsplit Revolutionでない場合でも、最新のATIドライバーとユーティリティを備えたHydraGridを使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.