AHK: Como usar uma tecla de atalho em conjunto com a GUI

3

Minha GUI funciona bem.

Aqui está uma captura de tela da minha caixa de edição, GUI:

F1disparaoscript.
Emseguida,introduzo1,2,3ou4eclicoemSubmitouclicoemENTER;queEnternãoéaceitonomomento,masoenviaparaummodoocultooualgosemqueeusaibaqueestáacontecendonomundoAHK.-corrigidopordavidmneedham-obrigado!

code:nãofuncionacomototalmentedesejado

#NoEnv#SingleInstanceForceF1::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

O que estou tentando incorporar é: F1 , ENTER 1,2,3,4
OU claramente pressione f para disparar "2, ENTER"
pressione v para disparar "3, ENTER"


Eu olhei para o código de (LINK CODE HERE_HOTKEYS) e olhando para este (LINK CODE HERE_KEYPRESS) :

Investigando o código:

#SingleInstance force

Input, Key, L1

MsgBox You pressed %Key%!

OnExit ExitSub
return

ExitSub:
ExitApp

Não consigo imaginar como incorporar isso F1 disparando o script e aceitando o Código original da GUI OU aceitar f ou v , em qual parte da linha terminará o script e não rodará novamente até F1 se pressionado.

Recap:

F1 fires script 
2, Enter 
or 
3, Enter 
or 
4, Enter 
or 
f 
or 
v 
... ends the script until F1 pressed once more.
    
por ejbytes 18.12.2017 / 20:53

1 resposta

2

A razão pela qual sua janela fecha sem qualquer ação quando pressionar Enter é que o botão Cancelar está listado como sua ação padrão.

Altere estas linhas:

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

E torne o botão Enviar a ação padrão:

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

A razão pela qual suas teclas de atalho sensíveis ao contexto não funcionam é porque você tem o WinTitle errado: o título da sua janela é "Enter Selection". Use as seguintes linhas em vez disso

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

O script funcional completo está abaixo:

#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
    
por 18.12.2017 / 21:24