Windows 7-Funktion oder Freeware, um ein Fenster immer unter anderen zu halten

8

Einige Programme, z. B. GridMove und XNeat, ermöglichen es Benutzern, ein bestimmtes Fenster mit einem Befehl "Immer im Vordergrund" über anderen Fenstern zu halten. Gibt es eine Möglichkeit, das Gegenteil zu tun, dh "Immer ganz unten" mit Windows 7-Befehlen oder Freeware dafür, außer indem alle anderen Fenster auf "Immer oben" gesetzt werden?

Manchmal ist es nützlich, Chat-Programme (in die eingegeben wird) unter allen Fenstern zu belassen, wobei nur das neueste Nachrichten- und Texteingabefeld durch die Fensterlücken sichtbar ist, ohne dass die restliche Benutzeroberfläche des Chat-Programms den Speicherplatz überfüllt.

Gnubie
quelle
1
Nein, in der Win32-Bibliothek ist keine Funktion integriert, mit der ein Programmierer eine Anwendung in den Hintergrund stellen kann. Es ist logischer, anderen Anwendungen zu sagen, dass sie zum gehen sollen foreground.
Ramhound
Alternativ können Sie dieses Fenster durch meine Änderung seiner Transparenz durchschauen lassen (viele Tools können dies tun). Oder Sie können AutoHotkey verwenden, um das Tray zu minimieren. (Wenn es den Zweck nicht erfüllt :-))
Ankit
1
Auch wenn Win32 dies nicht nativ unterstützt, können Sie jederzeit ein bestimmtes Fenster in den Hintergrund senden. Ich weiß allerdings nicht, ob es dann den Fokus behält. Vielleicht könnten Sie nach einer Möglichkeit suchen, das Fenster automatisch nach hinten zu senden, sobald es stattdessen den Fokus verliert. Eine andere Alternative ist das Kacheln der Fenster, damit Sie sich keine Sorgen um den Z-Index machen sollten ...
MarioDS

Antworten:

1

Vor langer Zeit hatte Windows ein PowerToy (später in TweakUI) namens X-Mouse, das unter anderem X-Fokus "Maus folgt Maus" im alten Stil unterstützte, wobei "Fokus" und "Vordergrund" nicht dasselbe waren. Ich glaube nicht, dass es mehr gepflegt wird (letzte Sichtung war für WinXP).

Obwohl ich es nicht ausgiebig verwendet habe, kann das kostenlose Windows-Skript-Tool AutoIT mit einem kurzen Skript das tun, was Sie wollen:

#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" ist eine dauerhafte Fenstereigenschaft, die von der WM beibehalten wird. Es gibt kein gleichwertiges "bottom most", daher müssen wir sie ein wenig durcheinander bringen.

Die While-Schleife wartet darauf, dass die Anwendung den Vordergrund erhält, und legt sie dann wieder ab, während der Tastaturfokus beibehalten wird. Modale Popups können dies manchmal stören, sollten aber durchaus brauchbar sein. Das Skript wird nach dem Beenden des überwachten Programms weiterhin im Hintergrund ausgeführt. Alt + F11, um es jederzeit zu beenden.

Ändern Sie $ regexp so, dass es mit "mIRC" oder was auch immer übereinstimmt. Das oben Genannte behandelt jeweils nur ein Fenster zuverlässig. Lesen Sie die AutoIT-Dokumente für WinWait (), um zu sehen, wie andere Fenster als nach Fenstertitel abgeglichen werden.

Speichern Sie in dropwindow.au3 und führen Sie es mit "autoit3 dropwindow.au3" aus.

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

mr.spuratic
quelle