web-dev-qa-db-ja.com

AHK:GUIと組み合わせてホットキーを使用する方法

私のGUIは正常に動作します。

これが私の編集ボックス、GUIのスクリーンショットです:

enter image description here

F1 スクリプトを起動します。
次に、1、2、3、または4を入力して、[ Submit またはヒット ENTERどのEnterは現在受け入れられていませんが、AHKの世界で起こっている隠しモードまたは私には知られていない何かにそれを送ります。 --davidmneedhamによって修正されました-ありがとう!

コード:完全に期待どおりに機能していません

#NoEnv
#SingleInstance Force

F1::

    aa := "1) opt 1 or (f)"
    bb := "2) opt 2 (v)"
    cc := "3) open opt 3"
    dd := "4) open opt 4"

    Gui, Add,   Text, x50  y50  w100 h30, %aa%
    Gui, Add,   Text, x50  y70  w100 h30, %bb%
    Gui, Add,   Text, x50  y90  w300 h30, %cc%
    Gui, Add,   Text, x50  y110 w300 h30, %dd%

    Gui, Add,   Text, x50  y140 w50  h20, Selection:
    Gui, Add,   Edit, x100 y140 w100 h20 vChoice
    Gui, Add,   Text, x205 y140 w300 h30, (press ENTER)


    ;Gui, Add, Button, x50  y170 w50 h30  default gCancel, Cancel 
    ;Gui, Add, Button, x130 y170 w50 h30  gSubmit, Submit

    ;Enter command fix by davidmneedham on StackExchangs thanks!        
    Gui, Add, Button, x50  y170 w50 h30  gCancel, Cancel 
    Gui, Add, Button, x130 y170 w50 h30  default gSubmit, Submit

    Gui, Color, EEAA99
    Gui +LastFound  ; Make the GUI window the last found window for use by the line below.
    WinSet, TransColor, ff00ff
    Gui, Show, w350 h250, Enter Selection

;I even tried a while loop, here but it caused other problems
;while(true) 
;{ 
;  If (GetKeyState("f"))
;  { 
;     msgbox, f pressed
;     break 
;  } 
;}

return


Submit: 
    Gui, Submit

    if (Choice = "2")
    {
        msgbox chose 2
    }
    else if (Choice = "3")
    {
        msgbox chose 3
    }
    else if (Choice = "4")
    {
        msgbox chose 4
    }
    else
    {   
        msgbox chose 1
    }

    ButtonCancel:
        Gui, destroy
    return

;One suggestion I tried this

#If WinActive("Download ahk_exe AutoHotkey.exe")
    f:: Send 2{Tab 2}{Enter}
    v:: Send 3{Tab 2}{Enter}
#If

私が取り入れようとしているのはこれです:
F1、ENTER 1,2,3,4
または明らかに
押す f 「2、ENTER」を発射する
押す v 「3、ENTER」を発射する


このコードを (LINK CODE HERE_HOTKEYS) から見て、これを見て (LINK CODE HERE_KEYPRESS)

コードの調査:

#SingleInstance force

Input, Key, L1

MsgBox You pressed %Key%!

OnExit ExitSub
return

ExitSub:
ExitApp

これをどのように組み込むのかわからない F1 スクリプトを起動してGUIの元のコードを受け入れるOR accept f または v、この行のいずれかがスクリプトを終了し、それまで再実行されません F1 押された場合。

要約:
 
F1 スクリプトを起動します
2、 Enter 
または
3、 Enter 
または
4、 Enter 
または
f 
または
v 
 ... F1がもう一度押されるまでスクリプトを終了します。
3
ejbytes

を押しても何もせずにウィンドウが閉じる理由 Enter [キャンセル]ボタンがデフォルトのアクションとしてリストされているということです。

これらの行を変更します。

Gui, Add, Button, x50  y170 w50 h30  default gCancel, Cancel 
Gui, Add, Button, x130 y170 w50 h30  gSubmit, Submit

そして、[送信]ボタンをデフォルトのアクションにします。

Gui, Add, Button, x50  y170 w50 h30  gCancel, Cancel 
Gui, Add, Button, x130 y170 w50 h30  default gSubmit, Submit

状況依存ホットキーが機能しない理由は、WinTitleが間違っているためです。ウィンドウタイトルは「EnterSelection」です。代わりに次の行を使用してください

#If WinActive("Enter Selection")
  f:: Send 1{Tab 2}{Enter}
  v:: Send 2{Tab 2}{Enter}
#If

完全な機能スクリプトは以下のとおりです:

#NoEnv
#SingleInstance force

F1::

    aa := "1) opt 1 or (f)"
    bb := "2) opt 2 (v)"
    cc := "3) open opt 3"
    dd := "4) open opt 4"

    Gui, Add,   Text, x50  y50  w100 h30, %aa%
    Gui, Add,   Text, x50  y70  w100 h30, %bb%
    Gui, Add,   Text, x50  y90  w300 h30, %cc%
    Gui, Add,   Text, x50  y110 w300 h30, %dd%

    Gui, Add,   Text, x50  y140 w50  h20, Selection:
    Gui, Add,   Edit, x100 y140 w100 h20 vChoice
    Gui, Add,   Text, x205 y140 w300 h30, (press ENTER)

    Gui, Add, Button, x50  y170 w50 h30  gCancel, Cancel
    Gui, Add, Button, x130 y170 w50 h30  default gSubmit, Submit

    Gui, Color, EEAA99
    WinSet, TransColor, ff00ff
    Gui, Show, w350 h250, Enter Selection

return

#If WinActive("Enter Selection")
    f:: Send 1{Tab 2}{Enter}
    v:: Send 2{Tab 2}{Enter}
#If

Submit: 
    Gui, Submit

    if (Choice = "2")
    {
        msgbox chose 2
    }
    else if (Choice = "3")
    {
        msgbox chose 3
    }
    else if (Choice = "4")
    {
        msgbox chose 4
    }
    else
    {   
        msgbox chose 1
    }

    Gui, Destroy
return

Cancel:
    Gui, Destroy
return
2
davidmneedham