Aplicativo de estilo Typer do Hacker para Windows

4

Eu preciso fazer vários screencasts que demonstrem algumas técnicas de programação. Eu já sei o que vou escrever para cada um deles, e gostaria de minimizar todos os atrasos e estranhezas dos erros de digitação e tentar pensar no que eu deveria fazer a seguir.

Existe um software que me permite colar um pedaço de texto em um buffer e, em seguida, misturar aleatoriamente as chaves e ter meu buffer de saída para a janela ativa no momento um caractere de cada vez? Como um Hacker Typer personalizável nativo. Poderia ser feito com algum tipo de script AutoHotkey ou algo semelhante? Sugestões para aplicativos para outras plataformas são bem-vindas, se não houver nenhuma para a plataforma Windows.

    
por Kaivosukeltaja 06.09.2013 / 22:45

2 respostas

4

Sim, você pode usar o AutoHotKey . Tenho certeza de que outra pessoa poderia agitar isso em pouco tempo, mas posso pelo menos imaginar uma possível estrutura para o script:

  1. Defina uma Suspenda a tecla de atalho e comece a ser suspensa, para que você possa usar o teclado quando não usa Não quero estar amassando. Alternativamente, ou além disso, use #IfWinActive para restringir a função de chaves de esmagamento a uma janela na qual você estará fazendo isso.
  2. Leia um arquivo de texto simples na memória.
  3. Agrupe várias definições de teclas de atalho para praticamente todas as teclas do teclado para a sua ação de script.
  4. Use StringLeft e StringTrimLeft para recuperar um único caractere de sua grande variável e excluí-lo da variável.
  5. Use Envie para enviar o caractere que você pegou. Talvez seja necessário fazer uma pequena substituição ou condicional para lidar com {Enter} e {Tab} , mas talvez não.

Aqui está meu script:

#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

Você pode fazer isso funcionar somente no Bloco de Notas, descomentando o bit #IfWinActive.

Eu tenho Ctrl + ' definido como uma tecla de atalho para suspender o script.

    
por 09.09.2013 / 17:56
0

Eu escrevi o que Dane descreveu. Isso deve fazer o truque. Ele lê em um arquivo de texto, divide por linha e, em seguida, insere os caracteres dessa linha um por um com um atraso configurável.

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

Eu não estava muito certo sobre o "esmagamento" de botões, então eu não incluí nada em relação a isso.

    
por 09.09.2013 / 19:04