0

GUIを特定のウィンドウにリンクしたいので、GUIがその一部のように動作する可能性があります。

これは私のGUIであり、電卓(テスト用)に準拠させたいと思います。電卓を最小化すると、GUIも最小化されます。

前もって感謝します!

#SingleInstance Force
#Persistent

BC = 0

Gui, Color, EEAA99
Gui, Margin , 0, 0
GUI, +AlwaysOnTop -Border -SysMenu -Caption +ToolWindow +Owner
Gui, Font, S48 CDefault Bold CBlue, Verdana
Gui, Add, Text, BackgroundTrans , Units completed:
Gui, Font, S72 CDefault Bold CGreen, Verdana
Gui, Add, Text, BackgroundTrans vBuildCounter, %BC%
WinSet, TransColor, EEAA99
Gui +LastFound +AlwaysOnTop +ToolWindow
WinSet, TransColor, EEAA99
Gui -Caption
Gui, Show, % "x" A_ScreenWidth - 400 " y" A_ScreenHeight / 4

:?*:asd:: ;count up
    SoundBeep, 500,500
    BC := BC += 1
    GuiControl,, BuildCounter, %BC%
Return

:?*:qwe:: ;reset the counter
    SoundBeep, 500,500
    BC := 0
    GuiControl,, BuildCounter, %BC%
Return

Esc::
ExitApp
4

2 に答える 2

1

あなたは(私が知る限り)これを行うことができるのはsettimerだけです。

擬似コード、テストされていません!

SetTitleMatchMode := 2
SetTimer, CheckWindow, 200

CheckWindow:
    If WinActive("Calculator")
    {
       Gui, Show, % "x" A_ScreenWidth - 400 " y" A_ScreenHeight / 4, Popup
    }
    Else If !WinActive("Popup")
    {
        Gui, Hide
    }
Return

編集:ポップアップがアクティブ化された場合にポップアップが非表示にならないようにする条件を追加しました。

于 2013-03-02T21:06:28.300 に答える
1

結局2つのスクリプトになりました。多分これは後で組み合わせることができます。

1つのスクリプトはToolMenu用で、2つ目はアクティベーション用です。GUIを制御できなかったため、アクティベーションスクリプトから表示/非表示にするため、+++および+++を使用して「解決」しました。最も洗練された方法ではありませんが、機能しCtrlます...AltWinF1CtrlAltWinF2

ToolMenu.ahk

#SingleInstance Force
#installKeybdHook
#Persistent

Gui, Destroy
Gui,+AlwaysOnTop
Gui,+ToolWindow
Gui,+Border
Gui, Add, Button, y5 w60, &LowBeep
Gui, Add, Button, y5 w60, &HighBeep
Gui, Add, Button, y8 h18, X
Gui, Show, y0, MyToolWindow
Return

ButtonLowBeep:
    SoundBeep, 300, 300
Return

ButtonHighBeep:
    SoundBeep, 500, 300
Return

ButtonX:
ButtonCancel:
    Gui, Destroy
ExitApp

^!#F1::
    Gui, Hide
Return

^!#F2::
    Gui, Show, y0, MyToolWindow
Return

DetectWindowChange.ahk

#SingleInstance
#installKeybdHook
#Persistent
Global SwitchCounter

Gui +LastFound 
hWnd := WinExist()
DllCall( "RegisterShellHookWindow", UInt,Hwnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage" )
Return

ShellMessage( wParam )
{
    If (wParam = 4)
    { 
        WinGetTitle, CurrName, A
        If (CurrName = "Calculator" OR CurrName = "MyToolWindow")
        {
            If ( SwitchCounter = 0)
            {
                ;WinRestore, MyToolWindow
                Send, ^!#{F2} ; Send Ctrl+Alt+Win+F2 to trigger GUI Show in GUI script
            }
            SwitchCounter += 1
        }
        Else
        {
            If ( SwitchCounter > 0)
            {
                ;WinMinimize, MyToolWindow
                Send, ^!#{F1} ; Send Ctrl+Alt+Win+F1 to trigger GUI Hide in GUI script
            }
            SwitchCounter := 0
        }
    }
}
Return

これがどのように機能するか教えてください...

于 2013-03-03T11:57:55.590 に答える