Trigger Autohotkey w nowym oknie

3

Jak ustawić uruchamianie akcji za każdym razem, gdy otwiera się nowe okno w trybie auto-klucza? Na przykład mogę ustawić dowolne okno Eksploratora Windows, aby było oznaczone jako „Zawsze na wierzchu”, gdy tylko się pojawi. Lub mogę ustawić dowolne nowe okna Skype'a tak, aby zawsze otwierały się na drugim monitorze lub zawsze były półprzezroczyste itp.

Myślę, że auto-klucz może to osiągnąć, ale nie wiem jak. Potrzebuję, aby wykonał dowolną akcję w nowym oknie, gdy tylko się pojawi.

Malabarba
źródło
Podobny do stackoverflow.com/questions/9176757/…, który ma miłą, akceptowaną odpowiedź.
CrouZ

Odpowiedzi:

1

AutoHotkey to off-spin stworzony specjalnie dla klawiszy skrótu ...

Zamiast tego możesz wypróbować oryginalny AutoIt , który ma wiele funkcji automatyzacji, w tym zdarzenia okna!

Mówiąc dokładniej, możesz tutaj znaleźć skrypt, który śledzi okna i działa na nowe okna.

#include <Array.au3>

; Initialize tracking arrays
Global $avWinListPrevious[1][2] = [[0, ""]], $avWinListCurrent

; Monitor unique window handles
While 1
    $avWinListCurrent = WinList("[REGEXPTITLE:.+[ \- ]GIMP]", "GNU Image Manipulation Program")
    For $n = $avWinListCurrent[0][0] To 1 Step -1
   ; Check has title and visible
        If ($avWinListCurrent[$n][0] <> "") And BitAND(WinGetState($avWinListCurrent[$n][1]), 2) Then
       ; Check for already seen
            $fFound = False
            For $i = 1 To $avWinListPrevious[0][0]
                If $avWinListCurrent[$n][1] = $avWinListPrevious[$i][1] Then
                    $fFound = True
                    ExitLoop
                EndIf
            Next

       ; New window found
            If Not $fFound Then
                WinMove("[REGEXPTITLE:.+[ \- ]GIMP]", "GNU Image Manipulation Program", 169, 0, 893, 771 )
            EndIf
        Else
            _ArrayDelete($avWinListCurrent, $n)
        EndIf
    Next
    $avWinListCurrent[0][0] = UBound($avWinListCurrent) - 1
    $avWinListPrevious = $avWinListCurrent
    Sleep(500)
WEnd
Tamara Wijsman
źródło
4
Nieprawda, możesz to zrobić za pomocą AHK: autohotkey.com/forum/topic63673.html
KingRadical
@KingRadical: Dlaczego podwójnie publikujesz posty? Nie stwierdziłem, że to niemożliwe.
Tamara Wijsman,
2
Sondowanie co 500 ms? okropny sposób na zrobienie tego i zbyt dużo kodu na tak prostą rzecz. Dobre rozwiązanie można znaleźć w tym wątku AHK autohotkey.com/board/topic/85114-detecting-new-child-window
GetFree 19.04.2013
Nie napisałem tego sam, ale możesz opublikować własną odpowiedź.
Tamara Wijsman,
5

Coś takiego działałoby ładnie: http://www.autohotkey.com/forum/topic63673.html

aw przypadku zmiany linku lub awarii z jakiegokolwiek powodu:

;========================================================================
; 
; Template:     WinTrigger (former OnOpen/OnClose)
; Description:  Act upon (de)activation/(un)existance of programs/windows
; Online Ref.:  http://www.autohotkey.com/forum/viewtopic.php?t=63673
;
; Last Update:  15/Mar/2010 17:30
;
; Created by:   MasterFocus
;               http://www.autohotkey.net/~MasterFocus/AHK/
;
; Thanks to:    Lexikos, for improving it significantly
;               http://www.autohotkey.com/forum/topic43826.html#267338
;
;========================================================================
;
; This template contains two examples by default. You may remove them.
;
; * HOW TO ADD A PROGRAM to be checked upon (de)activation/(un)existance:
;
; 1. Add a variable named ProgWinTitle# (Configuration Section)
; containing the desired title/ahk_class/ahk_id/ahk_group
;
; 2. Add a variable named WinTrigger# (Configuration Section)
; containing the desired trigger ("Exist" or "Active")
;
; 3. Add labels named LabelTriggerOn# and/or LabelTriggerOff#
; (Custom Labels Section) containing the desired actions
;
; 4. You may also change CheckPeriod value if desired
;
;========================================================================

#Persistent

; ------ ------ CONFIGURATION SECTION ------ ------

; Program Titles
ProgWinTitle1 = ahk_class Notepad
WinTrigger1 = Exist
ProgWinTitle2 = Calculator
WinTrigger2 = Active

; SetTimer Period
CheckPeriod = 200

; ------ END OF CONFIGURATION SECTION ------ ------

SetTimer, LabelCheckTrigger, %CheckPeriod%
Return

; ------ ------ ------

LabelCheckTrigger:
  While ( ProgWinTitle%A_Index% != "" && WinTrigger := WinTrigger%A_Index% )
    if ( !ProgRunning%A_Index% != !Win%WinTrigger%( ProgWinTitle := ProgWinTitle%A_Index% ) )
      GoSubSafe( "LabelTriggerO" ( (ProgRunning%A_Index% := !ProgRunning%A_Index%) ? "n" : "ff" ) A_Index )
Return

; ------ ------ ------

GoSubSafe(mySub)
{
  if IsLabel(mySub)
    GoSub %mySub%
}

; ------ ------ CUSTOM LABEL SECTION ------ ------

LabelTriggerOn1:
LabelTriggerOff1:
LabelTriggerOn2:
  MsgBox % "A_ThisLabel:`t" A_ThisLabel "`nProgWinTitle:`t" ProgWinTitle "`nWinTrigger:`t" WinTrigger
Return

; ------ END OF CUSTOM LABEL SECTION ------ ------

Uwaga: nie napisałem tego kodu.

KingRadical
źródło