[AHK]sendで複数Enterが送れない。

AutoHotkeyに下記の様なコードを書いて実行してみた。

^+b::send,{enter}a

普通にEnter押された後aが出るだけだと思ったのだが、aが表示されない。

最初はAHKが悪いんだと思ったら、使っていた秀丸エディタでのみこの事象が発生していた。

もちろんながら、秀丸エディタに対して手動でEnterキーを打った後、aキーを押せば、改行してからaという文字が表示される。

他のSendならダメかとも思ったんだけど、全部だめだった。

^+d::
	SendRaw, SendRaw`na		;NG
return
^+e::
	SendInput, SendInput{enter}a	;NG
return
^+f::
	SendPlay, SendPlay{enter}a	;NG
return
^+g::
	SendEvent, SendEvent{enter}a	;NG
return

唯一、clipboardにコピーしてから^vで貼り付ける方法なら、改行も含めて、出来たんだけど、秀丸で書いてたインデントの量が反映されないから今一つ。。。

原因と対策

秀丸が改行に対して何か処理してるみたいで、その時間がそこそこ掛かってるみたい。

^+h::
	send,{enter}
	sleep,40
	send,b
return

上記のようにsleep噛ましたら、正しく入力されるようになった。

Inputコマンドでif、for、whileのテンプレート入力しようとしただけなのに地味に手間かかった。。。

多分、VisualStudioとか他のコードエディターでも、sleepしないとうまくいかないかもしれない。

 

インデントを付けてコードを貼り付け

元々は、そのままEnterしようとしてたんですが、いちいちSleep付けるのもめんどくさかったので、コード整形して貼り付ける関数を作ってみました。

PasteWithIndent(str){
	;現在地のインデントを取得
	send,+{Home}
	send,^c
	send,{End}
	;渡された文字列にインデントを追加
	Clipboard:= RegExReplace(str,"\n", "`n" Clipboard, nHit)
	send,^v
	cmd:="{Up " nHit-1 "}"
	send, %cmd%
	send,{End}
}

^+a::
	str:="
(
if(){
`t
}
else if(){
`t
}
else(){
`t
}
)"
	PasteWithIndent(str)
return

これで、任意の文字列をインデント付きでペーストできるようになりました。

このコードだと、if文を入れたい場所にカーソルを持って行って、Ctrl+Shift+aを押すと、現在の位置のインデント量を付加されて、挿入されます。このように書くと、複数行の文字列がまとめて変数に代入できるのですが、Tabだけの行はTabが削除されて認識されるみたいです。Enterはそのままでいけますが、tabは`tに書き換えないといけないのが若干面倒ですね。

まあ、ちまちまsleepするのに比べれば100倍ましです。一先ず、便利に使えるようになりました。

コメント

PAGE TOP
Ads Block Detector Powered by codehelppro.com
Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました