1

Я хотел бы создать одну горячую клавишу для переключения между «Свернуть» и «Восстановить» для текущего выбранного окна (окна обозревателя, окна программы или любого окна), но мне нужно переключиться на «мин» и восстановить точно такое же окно. Если окно не выбрано, ничего не делайте.

Пока я сделал это

#s::
if (!CW)
    {
    WinGetPos, winWidth, winHeight, , , A

    if ( winWidth == -8 and winHeight == -8)
        {
        WinGet, CW
        WinMinimize, CW
        }
} else
{
    WinRestore, CW
}

Это не работает

Я тоже попробовал это,

#s::
if (!%active_id%)
{
    WinGet, active_id, ID, A
    WinMinimize, ahk_id %active_id%
}
else
{
WinRestore, ahk_id %active_id%
}

он свернул окно при первом нажатии горячей клавиши и при втором нажатии горячей клавиши вместо восстановления окон, он просто свернул другие окна и так далее. пожалуйста помогите, мне нужен тумблер

Я взял этот пример из другого поста в поисках переключателя,

#s::
WinGet MX, MinMax, A
If MX
WinRestore A
Else WinMaximize A
return

этот переключатель работает, но только между «Развернуть» и «Восстановить» в одном и том же окне. Я не хочу переключаться между «Развернуть и восстановить» в одном и том же окне. Думаю, мне нужен не только переключатель, но и способ сохранить идентификатор окна, чтобы он мог какое окно восстановить после того, как окна минимизированы.

Спасибо Advanced.

2 ответа2

1
    #s::
    select_window:
; If no window is already selected or the selected window doesn't exist anymore, 
; select the currently active window:
IfWinNotExist, ahk_id %selected_id%
{
    If IsWindow(WinExist("A"))
        WinGet, selected_id, ID, A
    else
    {
        MsgBox, No window selected
            return
    }
}
WinGet, WinState, MinMax, ahk_id %selected_id%
    If WinState = -1    ; the window is minimized
        WinRestore ahk_id %selected_id%
    else
        WinMinimize, ahk_id %selected_id%
return

; select another window to toggle its state:
    !#s::
selected_id := ""
GoSub, select_window    ; or: GoSub, #s
return

; This checks if a window is, in fact a window,
; as opposed to the desktop or a menu, etc.
IsWindow(hwnd){
   WinGet, s, Style, ahk_id %hwnd%
   return s & 0xC00000 ? (s & 0x100 ? 0 : 1) : 0
}
1
#s::
; If no window is already selected 
; or the selected window doesn't exist anymore, 
; select the currently active window and minimize it:
IfWinNotExist, ahk_id %selected_id%
{
    If (IsWindow(WinExist("A")) || WinActive("ahk_class ArtRage 3"))
        WinGet, selected_id, ID, A
    else
    {
        MsgBox, No window selected
            return
    }
}
WinGet, WinState, MinMax, ahk_id %selected_id%
    If WinState = -1    ; the selected window is minimized  
    {
        WinRestore
        selected_id := ""       
    }
    else
        WinMinimize
return

; This checks if a window is, in fact a window,
; as opposed to the desktop or a menu, etc.
IsWindow(hwnd){
   WinGet, s, Style, ahk_id %hwnd%
   return s & 0xC00000 ? (s & 0x100 ? 0 : 1) : 0
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .