4 votes

Application de style Hacker Typer pour Windows

Je dois faire un tas de screencasts qui démontrent certaines techniques de programmation. Je sais déjà ce que je vais taper pour chacun d'entre eux, et j'aimerais minimiser les retards et les maladresses dus aux fautes de frappe et au fait d'essayer de penser à ce que je devais faire ensuite.

Existe-t-il un logiciel qui me permette de coller un morceau de texte dans un tampon, puis de frapper aléatoirement sur les touches et de faire en sorte que mon tampon soit affiché dans la fenêtre active, un caractère à la fois ? Un peu comme un logiciel personnalisable Hacker Typer . Cela pourrait-il être fait avec une sorte de script d'AutoHotkey ou quelque chose de similaire ? Les suggestions d'applications pour d'autres plateformes sont les bienvenues si aucune n'existe pour la plateforme Windows.

1 votes

Juste pour être clair, vous voulez avoir à taper sur le clavier, non ? Vous ne voulez pas simplement que les morceaux de texte apparaissent instantanément ?

0 votes

Oui, je veux qu'un caractère apparaisse chaque fois que j'appuie sur une touche. Lorsque je fais une pause, la sortie doit également faire une pause.

0 votes

Vous cherchez quelqu'un pour écrire le script d'AutoHotKey pour vous ?

4voto

stew Points 3356

Oui, vous pouvez utiliser AutoHotKey . Je suis sûr que quelqu'un d'autre pourrait inventer ça en un rien de temps, mais je peux au moins imaginer une structure possible pour le script :

  1. Définir un Touche de suspension et commencer à suspendre, de sorte que vous pouvez utiliser votre clavier lorsque vous ne voulez pas être mashing. Alternativement, ou en plus, utilisez #IfWinActive pour limiter la fonction "mashing-keys" à la seule fenêtre dans laquelle vous allez effectuer cette opération.
  2. Lire un fichier en texte clair en mémoire.
  3. Empiler plusieurs définitions des touches de raccourci pour à peu près toutes les touches du clavier pour votre seule script action.
  4. Utilisez StringLeft y StringTrimLeft pour récupérer un seul caractère de votre grande variable et le supprimer de la variable.
  5. Utilisez Envoyer pour envoyer le caractère que vous avez saisi. Vous devrez peut-être faire un petit remplacement ou une condition pour gérer l'envoi de {Enter} y {Tab} mais peut-être pas.

Voici mon 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

Vous pouvez faire en sorte que cela ne fonctionne que dans le Bloc-notes en décommentant le bit #IfWinActive.

J'ai Ctrl + ` défini comme une touche de raccourci pour suspendre le script.

0 votes

Génial ! Cela fonctionne parfaitement, à part les corrections de l'interface graphique et quelques ajustements pour mon clavier scandinave que je pourrai probablement résoudre avec l'aide de la documentation en ligne. Mille mercis pour cette aide !

1 votes

Ooh, hey, @Kaivosukeltaja, j'ai mis à jour mon script avant de voir votre commentaire et votre acceptation. Le script mis à jour a une interface graphique et quelques améliorations (notamment le "SendMode InputThenPlay"). J'ai une ligne au format a:: pour chaque touche que je veux remapper. Cela peut être aussi simple que d'ajouter quelques lignes avec les touches supplémentaires de votre clavier.

0 votes

C'est juste ! Je voterais encore une fois si je pouvais. C'est une grande démonstration de la puissance d'AutoHotkey dans les mains de quelqu'un qui sait ce qu'il fait.

0voto

No'am Newman Points 3590

J'ai écrit ce que Dane a décrit. Cela devrait faire l'affaire. Il lit un fichier texte, le divise par ligne, puis saisit les caractères de cette ligne un par un avec un délai configurable.

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

Je n'étais pas très sûr de la façon dont il fallait "écraser" les boutons, alors je n'ai rien inclus à ce sujet.

0 votes

Cela permet à l'utilisateur de saisir une ligne à la fois, ce qui n'est pas tout à fait le cas. Vous pourriez faire fondamentalement le même script, mais StringSplit par caractère (il suffit de ne pas spécifier de délimiteur). J'avais peur que ce soit un nombre extrême de variables, mais ça pourrait être bien aussi. De plus, j'imagine qu'il veut que les nouvelles lignes soient ajoutées au fur et à mesure qu'il tape.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X