发表回复 
怎样写快速输入的列表UI,或类似工具?
2017-01-08, 15 : 24
怎样写快速输入的列表UI,或类似工具?
需求:经常要「重复」输入某些相同「文字片段」。类似客服工作。

我目前用AutoHotkey的快捷输入,例如:
代码: (全选)
Tab & q::SendInput, 这是第一个文字小片段,按下tab和q就能输入我
但缺陷是,必须「记忆」哪个快捷键,对应哪些文字片段。多了以后,不方便!

请问,怎么制作类似下图列表:例如点击快捷键比如ctrl-~,弹出快捷输入列表,然后可以选择对应片段?(最好也对应快捷键,比如按"1",就第一个片段上屏)。

有没有现成的库?
或者如果AutoHotkey难做,有没有类似工具?注:搜狗输入法的快捷输入也是要记忆的,不好用

[Image: 5871ded0e6ec0.png]

[Image: 5871ded096fba.jpg]
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-01-10, 13 : 00 (这个帖子最后修改于: 2017-01-27 22 : 22 by feiyue.)
RE: 怎样写快速输入的列表UI,或类似工具?
随手写了些代码,按【鼠标中键】热键弹出菜单,可以按数字键选择。
我觉得除非登陆用,否则用剪贴板粘贴可能比 Send 发送好一些。

代码: (全选)
menus=
(
亲,感谢
不用客气
\n亲,你好!\n
\n拜拜喽!\n
)
menus(i) {
  global menus
  Loop, Parse, menus, `n
    if (A_Index=i)
      Return, StrReplace(A_LoopField,"\n","{Enter}")
  ;----------- 用剪贴板粘贴 ------------
  ; Clipboard=
  ; Loop, Parse, menus, `n
  ;   if (A_Index=i)
  ;     Clipboard:=StrReplace(A_LoopField,"\n","`r`n")
  ; Return, "{Ctrl Down}v{Ctrl Up}"
  ;-----------------------------------
}
Loop, Parse, menus, `n
{
  i:=A_Index, i.=i<10 ? "   ":"  ", v:=A_LoopField
  v:=StrLen(v)>10 ? SubStr(v,1,8) "~~":v
  Menu, OK, Add, % i . v, RunMenu
}
Return

RunMenu:
Send, % menus(A_ThisMenuItemPos)
Return

*MButton::
Critical
WinExist("A")
Menu, OK, Show
WinWaitActive,,, 1
Return
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 2用户表示感谢feiyue
2017-01-10, 15 : 31
RE: 怎样写快速输入的列表UI,或类似工具?
这个不错,学习了!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-09-22, 10 : 39
RE: 怎样写快速输入的列表UI,或类似工具?
请教,大于10的时候,好像不能通过菜单的数字选择了,这个怎么修复?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-09-23, 12 : 18 (这个帖子最后修改于: 2017-09-23 20 : 24 by TSQJZKIHCVQXSBKA.)
RE: 怎样写快速输入的列表UI,或类似工具?
(2017-09-22 10 : 39)gdqb521 提到:  请教,大于10的时候,好像不能通过菜单的数字选择了,这个怎么修复?

想用Input记录下输入,但没弄好。加字母,36个够用了吧?
代码: (全选)
menus=
(
亲,感谢
不用客气
\n亲,你好!\n
\n拜拜喽!\n
5
6
7
8
9
10
11
12
13
)

ArrayBase := StrSplit("0123456789abcdefghijklmnopqrstuvwxyz")

Arraymenus := []
Loop, Parse, menus, `n
{
  Arraymenus.Push(StrReplace(A_LoopField, "\n", "{Enter}"))
}

Loop, Parse, menus, `n
{
  v := StrLen(A_LoopField) > 10 ? SubStr(A_LoopField,1,8) "~~" : A_LoopField
  Menu, OK, Add, % ArrayBase[A_Index] ") " . v, RunMenu
}
Return

RunMenu:
Send, % Arraymenus[A_ThisMenuItemPos]
Return

*MButton::
Critical
WinExist("A")
Menu, OK, Show
WinWaitActive,,, 1
Return
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢TSQJZKIHCVQXSBKA
2017-09-24, 12 : 06
RE: 怎样写快速输入的列表UI,或类似工具?
@TSQJZKIHCVQXSBKA
这个真不错,貌似我也用得上。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-09-24, 18 : 07 (这个帖子最后修改于: 2017-09-24 20 : 27 by TSQJZKIHCVQXSBKA.)
RE: 怎样写快速输入的列表UI,或类似工具?
(2017-09-24 12 : 06)abc001 提到:  @TSQJZKIHCVQXSBKA
这个真不错,貌似我也用得上。

利用剪贴板更好,不然开着输入法发送字母时就麻烦了。
不想占用剪贴板,参考http://ahk8.com/thread-5381.html
代码: (全选)
Loop, Parse, menus, `n
{
  ;使用剪贴板时,存进数组前先处理换行符
  Arraymenus.Push(StrReplace(A_LoopField, "\n", "`r`n"))
}

代码: (全选)
RunMenu:
;Send, % Arraymenus[A_ThisMenuItemPos]
;先保存当前剪贴板内容到临时变量
ClipSaved := ClipboardAll

Clipboard := Arraymenus[A_ThisMenuItemPos]
Send ^v

;还原剪贴板。不需要可不要这两句。
Clipboard := ClipSaved
Return

做过一个窗口形式的,点击发送,不过并没用过,仅供参考
发到记事本里的,有WinActivate, ahk_exe notepad.exe,必须开着记事本
代码: (全选)
程序名 := SubStr(A_ScriptFullPath, 1, -3) "exe"

IfNotExist, 预设文本.ini
{
    Loop, 20
    {
        内容 := 内容 A_Index "=`r`n"
    }
    FileAppend, [设置]`r`n%内容%, 预设文本.ini, CP936
}

Array := []

;读取配置
Loop, 20
{
    IniRead, 文本, 预设文本.ini, 设置, %A_Index%, %A_Space%
    Array.Push(StrReplace(文本, "\n", "`r`n"))
    StringLeft, 文本, 文本, 50
    Gui, Add, Text, v%A_Index% g文本 w200, % (A_Index < 10 ? A_Space : "") A_Index "." 文本
}
x := A_ScreenWidth-238
Gui, Show, x %x% yCenter
;窗口总在最前
winset,AlwaysOnTop,, ahk_exe %程序名%
return

文本:
WinActivate, ahk_exe notepad.exe
Clipboard := Array[A_GuiControl]
Send ^v
return

GuiClose:
ExitApp
return
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢TSQJZKIHCVQXSBKA
2017-09-25, 08 : 22 (这个帖子最后修改于: 2017-09-25 08 : 22 by abc001.)
RE: 怎样写快速输入的列表UI,或类似工具?
@TSQJZKIHCVQXSBKA
感谢分享,这个脚本非常好用。
用浏览器记录密码无法记录某些网站弹出式窗口输入密码,用这个就很方便了。
目前发现一BUG:
密码中有+时,+无法正常输出。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-09-25, 14 : 45 (这个帖子最后修改于: 2017-09-25 15 : 50 by TSQJZKIHCVQXSBKA.)
RE: 怎样写快速输入的列表UI,或类似工具?
(2017-09-25 08 : 22)abc001 提到:  @TSQJZKIHCVQXSBKA
感谢分享,这个脚本非常好用。
用浏览器记录密码无法记录某些网站弹出式窗口输入密码,用这个就很方便了。
目前发现一BUG:
密码中有+时,+无法正常输出。

是Send吧?+作为Shift了,还有!代表ALT,^代表Ctrl,参见帮助Send那章。
我说的那个5381帖子就可以避免
代码: (全选)
;方法一,原义法,自己单个转
Sleep, 2000
;{+}或{Asc 43}都可以
密码 = abc{Asc 43}123
send, %密码%

;方法二,密码不动,让函数挨个转
Sleep, 2000
密码 = abc+123
send, % 字符串转ASC码(密码)

字符串转ASC码(字符串)
{
    for key, 单字 in StrSplit(字符串)
    if Asc(单字) < 127
    {
        ASC码 .= "{Asc " . Asc(单字) . "}"
    }
    else
    {
        ASC码 .= 单字
    }
    return ASC码
}
return
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢TSQJZKIHCVQXSBKA
2017-09-25, 21 : 54 (这个帖子最后修改于: 2017-09-25 21 : 57 by abc001.)
RE: 怎样写快速输入的列表UI,或类似工具?
@TSQJZKIHCVQXSBKA
非常感谢,用了{+}就正常输出了。
可惜论坛没有收藏帖子的功能,象这样的帖子我都想收藏起来,有时间好好学习提高一下。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合