我需要制作一些截屏视频来演示一些编程技术。我已经知道我要为每个视频输入什么,并且我想尽量减少打字错误和思考下一步该做什么造成的延迟和尴尬。
有没有一款软件可以让我把一段文本粘贴到缓冲区中,然后随机按下按键,让缓冲区一次一个字符地输出到当前活动窗口中?有点像一个原生的可定制黑客打字员。可以使用某种 AutoHotkey 脚本或类似程序来实现吗?如果 Windows 平台上没有应用程序,欢迎提出其他平台的应用程序建议。
答案1
是的,你可以使用自动热键。我确信其他人可以立即完成这个,但我至少可以想象出脚本的可能结构:
- 定义一个暂停热键并开始暂停,这样当你不想乱动时就可以使用键盘。或者,或者另外,使用#IfWinActive将混搭键功能限制在您将执行此操作的一个窗口中。
- 读取纯文本文件存入记忆中。
- 堆叠多个热键定义几乎键盘上的每个键都适用于你的一个脚本操作。
- 使用字符串左和字符串修剪左从大变量中检索单个字符并将其从变量中删除。
- 使用发送发送您抓取的字符。您可能需要做一些替换或条件来处理发送
{Enter}
和{Tab}
,但也可能不需要。
这是我的脚本:
#UseHook ; Avoid loops of the Send command triggering the hotkey again.
AutoTrim, Off ; Don't auto-trim spaces and tabs from the beginning and end of the sourcetext.
SendMode InputThenPlay ; Try to prevent the user from corrupting the buffer text.
Suspend, On ; Start suspended
FileRead, MasherBuffer, magic-button-masher-text.txt
if ErrorLevel
MasherBuffer = Type or paste text here. You can also drag-and-drop text files here.
Gui, +Resize +MinSize400x200
Gui, Add, Text,, When you are ready, un-suspend this script (Ctrl and `` together will toggle the suspension).`nType any character on the main QWERTY keyboard to send the characters from the buffer instead.
Gui, Add, Edit, vMasherBuffer, %MasherBuffer%
Gui, Show,, Magic Button Masher Buffer
Return
GuiSize:
if ErrorLevel = 1 ; The window has been minimized. No action needed.
return
; Otherwise, the window has been resized or maximized. Resize the MasherBuffer control to match.
NewWidth := A_GuiWidth - 20
NewHeight := A_GuiHeight - 50
GuiControl, Move, MasherBuffer, W%NewWidth% H%NewHeight%
return
GuiDropFiles:
Loop, parse, A_GuiEvent, `n
{
FileRead, AddToBuffer, %A_LoopField%
MasherBuffer = %MasherBuffer%`n`n%AddToBuffer%
}
GuiControl,, MasherBuffer, %MasherBuffer%
return
^`::Suspend
!`::Gui, Show,, Magic Button Masher Buffer
; #IfWinActive ahk_class Notepad ; This limits the button masher to Notepad.
`::
1::
2::
3::
4::
5::
6::
7::
8::
9::
0::
-::
=::
q::
w::
e::
r::
t::
y::
u::
i::
o::
p::
[::
]::
\::
a::
s::
d::
f::
g::
h::
j::
k::
l::
`;::
'::
z::
x::
c::
v::
b::
n::
m::
,::
.::
/::
Space::
GuiControlGet, MasherBuffer
StringLeft, outbound, MasherBuffer, 1
StringTrimLeft, MasherBuffer, MasherBuffer, 1
GuiControl,, MasherBuffer, %MasherBuffer%
if outbound = %A_Space%
Send {Space}
else if outbound = %A_Tab%
Send {Tab}
else
Send {%outbound%}
return
您可以通过取消注释#IfWinActive 位使其仅在记事本中起作用。
我已将Ctrl+`定义为暂停脚本的热键。
答案2
我写了 Dane 描述的内容。这应该可以解决问题。它读取文本文件,按行拆分,然后以可配置的延迟逐个输入该行的字符。
FileRead, text, C:\test.txt
/* Alternatively:
text =
(ltrim
this is the first sentence.
sentence 2 here.
sentence 3 hello.
sentence 4 reporting in.
)
*/
pos := 1
StringSplit, lines, text, `n
^Space:: ; Ctrl + Space
line := lines%pos%
loop, Parse, line
{
SendInput % A_Loopfield
Sleep 100 ; Adjust this for delay between keys
}
++pos
Return
我不太清楚按钮的“混搭”,所以我没有包含任何与此相关的内容。