情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

クリップボードと選択範囲を見て文字列を一括入力するAutoHotkeyスクリプトの書き方 このエントリーを含むはてなブックマーク

AutoHotkeyを利用して、ショートカットキー一つでクリップボードと選択範囲を見て構成した文字列を一気に入力する方法を紹介します。

今回は具体例として、HTMLのaタグを一括入力するスクリプトを扱います。ホットキーを押したとたんに、

<a href="(コピー中のURL)" title="選択文字列">選択文字列</a>

が一気に挿入されます。FC2ブログの編集機能にある「URL」の挿入みたいな感じです。

AutoHotkeyスクリプト

現在私が使っているスクリプトがこちら。

F21 & a::
	cb_bk = %ClipboardAll%
	url = %Clipboard%
	Clipboard =
	Send, ^c
	ClipWait, 2
	if ErrorLevel <> 0
	{
		; Error
		content =
	}
	else
	{
		content = %Clipboard%
	}
	Clipboard = %content%
	Send, ^v
	Sleep, 200
	Clipboard = %cb_bk%
	Return

とりあえずまず、これを実行したときに何が起こるのかを説明します。

何が起こるのか

まず、大前提として、私の環境では「ひらがなカタカナ」キーを「F21」キーにレジストリ的に置換しています。なので、スクリプト中のF21はひらがなカタカナを表しています。

なので、このホットキーは「ひらがなカタカナ+A」で発動します。あらかじめURLをコピーして置いて、さらにテキストエディタで文字列を選択して発動させると、

<a href="(コピー中のURL)" title="選択文字列">選択文字列</a>

が選択文字列に上書きする形で自動入力されます。

仕組み

仕組みを理解して、オリジナルスクリプト作りに役立ててください。

ポイントは、クリップボードです。

クリップボードのデータバックアップ

定番ですが、

cb_bk = %ClipboardAll%
(・・・)
Clipboard = %cb_bk%

これはクリップボードの中身のバックアップと、復帰を行うための決まったやり方です。クリップボードを使う場合には、とりあえずこれを書いておきます。

クリップボードのデータを変数に代入する

url = %Clipboard%

変数に代入するときは、バックアップの時に使う組み込み変数とは別の変数を使って取り出すところに注意です。

クリップボードを空にする

クリップボードを空にして、選択範囲の読み取りに備えます。空にするときは、次のように書くのがおきまりです。

Clipboard =

選択範囲をクリップボードを経由して変数に読み込む

選択範囲を取り出す方法は「Ctrl+C」を発動させることによるコピーです。そこで、次のように実行し、読み出しに成功した場合(クリップボードが空でなくなった場合)に、「content」変数に読み込みます。

Send, ^c
ClipWait, 2
if ErrorLevel <> 0
{
	; Error
	content =
}
else
{
	content = %Clipboard%
}

実は、「ClipWait」でクリップボードにCtrl+Cの効果で文字列が読み込まれるのを待機しているのですが、この待機の基準が「クリップボードが空でなくなる」なので、前の行でクリップボードを空にしていたのです。なので、空にしておくということは重要で、そうでないと、ちゃんとClipWaitで待ちが行われず、クリップボードがまだ更新されていないままどんどん処理が進んでしまいます。

書き込む内容をクリップボードに用意する

ここまでで用意した変数を利用して、書き込みたい文字列を作って、クリップボードに格納するのが次の部分です。

Clipboard = %content%

ここでは、変数の読み取りに「%変数名%」を使います。AutoHotkeyではこの書式がいろいろあるため、間違いやすいですが、ここではこれを使います。

ペーストを用いてクリップボードの内容を書き込む

最後に、用意したクリップボードの中身をペースト(貼り付け)て完了です。そして、ペーストが終わる前にクリップボードの中身を書き戻しては行けないので、ちょっと荒っぽいですが、200ms待機しています。そうしないと、クリップボードの中身の書き戻しが先に行われて、せっかく用意した文字列がペーストされないからです。

Send, ^v
Sleep, 200
Clipboard = %cb_bk%

完了

これで、クリップボードと選択範囲を用いた処理が実現されます。二つの要素を利用できるので、いろいろな入力が実現できるようになります。

まとめ

AutoHotkeyにおいて、クリップボードは強力な武器です。ただし、使い方がちょっと難しいというか、決まったやり方でやらないと変な現象が起こるので注意が必要です。また、副作用として、クリップボードを監視するアプリとの衝突が考えられるので注意してください。

AutoHotkey | コメント:0 | トラックバック:0 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

この記事のコメント

コメントの投稿 エントリの新旧に関わらず、極力18時間中に返信します。














この記事のトラックバック

トラックバックURL:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。