AutoHotKey:具有多行输入的InputBox

时间:2014-09-08 11:03:43

标签: windows user-interface autohotkey

在AutoHotKey中,我希望有类似InputBox的东西,除了文本输入是多行的。 (比如textarea)。

我希望有两个按钮,“Ok”和“Cancel”,我希望它们都有加速器。我希望这个代码是一个函数的形式,我可以从其他热键调用,以便随时获取多行用户输入。我希望能够设置显示对话框时显示的默认文本。如果按下取消按钮,我希望函数返回null或空字符串。我希望Esc键使对话框关闭,就像按下取消按钮一样(并且不退出整个脚本)。我希望对话框显示在屏幕的中央,并使用Windows通常用于对话框的字体。

4 个答案:

答案 0 :(得分:5)

试试这个

!1::
MsgBox % MultiLineInputBox("Hello World:", "stuff, more stuff", "Custom Caption")
return
MultiLineInputBox(Text:="", Default:="", Caption:="Multi Line Input Box"){ static ButtonOK:=ButtonCancel:= false if !MultiLineInputBoxGui{ Gui, MultiLineInputBox: add, Text, r1 w600 , % Text Gui, MultiLineInputBox: add, Edit, r10 w600 vMultiLineInputBox, % Default Gui, MultiLineInputBox: add, Button, w60 gMultiLineInputBoxOK , &OK Gui, MultiLineInputBox: add, Button, w60 x+10 gMultiLineInputBoxCancel, &Cancel MultiLineInputBoxGui := true } GuiControl,MultiLineInputBox:, MultiLineInputBox, % Default Gui, MultiLineInputBox: Show,, % Caption SendMessage, 0xB1, 0, -1, Edit1, A while !(ButtonOK||ButtonCancel) continue if ButtonCancel return Gui, MultiLineInputBox: Submit, NoHide Gui, MultiLineInputBox: Cancel return MultiLineInputBox ;---------------------- MultiLineInputBoxOK: ButtonOK:= true return ;---------------------- MultiLineInputBoxGuiEscape: MultiLineInputBoxCancel: ButtonCancel:= true Gui, MultiLineInputBox: Cancel return }

答案 1 :(得分:1)

你可以保持很短的时间:
(测试和工作)

MultiLineInput(Text:="Waiting for Input") {
    Global MLI_Edit
    Gui, Add, Edit, vMLI_Edit x2 y2 w396 r4
    Gui, Add, Button, gMLI_OK x1 y63 w199 h30, &OK
    Gui, Add, Button, gMLI_Cancel x200 y63 w199 h30, &Cancel
    Gui, Show, h94 w400, %Text%
    Goto, MLI_Wait
    MLI_OK:
        GuiControlGet, MLI_Edit
    MLI_Cancel:
    GuiEscape:
        ReturnNow := True
    MLI_Wait:
        While (!ReturnNow)
            Sleep, 100
    Gui, Destroy
    Return %MLI_Edit%
}

MsgBox % MultiLineInput("Tell me 5 things you like.")

这就是它的样子:
enter image description here

以下是在MsgBox中打印的内容:Click

答案 2 :(得分:1)

答案https://stackoverflow.com/a/25800045/2043349中的更新版本,修复了多次使用该功能时提示文本不会更新的错误:

MultiLineInputBox(Text:="", Default:="", Caption:="Multi Line Input Box")
{
    static
    ButtonOK:=ButtonCancel:= false
    Gui GuiMLIB:New,, % Caption
    Gui, add, Text, w600, % Text
    Gui, add, Edit, r10 w600 vMLIBEdit, % Default
    Gui, add, Button, w60 gMLIBOK , &OK
    Gui, add, Button, w60 x+10 gMLIBCancel, &Cancel

    Gui, Show
    while !(ButtonOK||ButtonCancel)
        continue
    if ButtonCancel
        return
    Gui, Submit
    return MLIBEdit
    ;----------------------
    MLIBOK:
    ButtonOK:= true
    return
    ;---------------------- 
    GuiMLIBGuiEscape:
    GuiMLIBGuiClose:
    MLIBCancel:
    ButtonCancel:= true
    Gui, Cancel
    return
}

答案 3 :(得分:0)

这是一段代码:

版本1(与Gosub一起):

return
StartGui:
Gui, Add, Edit, x22 y19 w240 h120 vMyEdit, Here is default text
Gui, Add, Button, x22 y179 w100 h30 gGuiCloseOk, Ok
Gui, Add, Button, x162 y179 w100 h30 gGuiCloseCancel, Cancel
; Generated using SmartGUI Creator for SciTE
Gui, Show, w286 h231, My Gui Name

WinGetPos,,, Width, Height, My Gui Name
WinMove, My Gui Name,, (A_ScreenWidth/2)-(Width/2), (A_ScreenHeight/2)-(Height/2)

return

return
GuiCloseOK:
GuiControlGet, MyEdit
Gui, Destroy
return

GuiCloseCancel:
MyEdit:=""
Gui, Destroy
return


return
Esc::
Gui, Destroy
return

将代码放在您喜欢的任何地方。要在任何地方调用GUI添加Gosub, StartGui编辑控件的内容,您将获得MyEdit变量。

例如,如果要通过 CTRL + ALT + z 调用GUI,请将该代码放在脚本中的任何位置:

return
!^z::
    Gosub, StartGui
return




版本2(带功能):

GuiFunc(DefaultText)
{
    global MyEdit
    MyEdit:=""
    Gui, Add, Edit, x22 y19 w240 h120 vMyEdit, %DefaultText%
    Gui, Add, Button, x22 y179 w100 h30 gGuiCloseOk, &Ok
    Gui, Add, Button, x162 y179 w100 h30 gGuiCloseCancel, &Cancel
    ; Generated using SmartGUI Creator for SciTE
    Gui, Show, w286 h231, My Gui Name

    WinGetPos,,, Width, Height, My Gui Name
    WinMove, My Gui Name,, (A_ScreenWidth/2)-(Width/2), (A_ScreenHeight/2)-(Height/2)

    return

    return
    GuiCloseOK:
    GuiControlGet, MyEdit
    Gui, Destroy
    return

    GuiCloseCancel:
    MyEdit:=""
    Gui, Destroy
    return

}


return
Esc::
    Gui, Destroy
return

将代码放在您喜欢的任何地方。要调用GUI,请使用默认情况下在编辑控件中显示的文本参数调用GuiFunc(DefaultText)函数。运行函数后,全局变量MyEdit设置为编辑控件的内容。因此,您可以在函数外的任何位置使用MyEdit变量。我知道你希望函数返回MyEdit变量的内容,但我尝试了很多方法却没有成功。

例如,将该代码放在脚本中的任何位置。要调用GUI,请按 CTRL + ALT + z 并显示MyEdit变量的内容按 CTRL + ALT + a

return
!^z::
    DefaultText:= "Here is default text"
    GuiFunc(DefaultText)
return

return
!^a::
    MsgBox, %MyEdit%
return



对于这两个版本,如果您决定重命名Window Title My Gui Name,请记住,您需要在3个位置重命名它才能使脚本正常工作。

此外,始终使用来自http://ahkscript.org/的AutoHotkey及其文档(当前最新版本,新官方网站)! Autohotkey.com上的AutoHotkey及其文档已过时,使用它们可能会遇到一些问题!