AutoHotkey入門 学習シリーズ (4) コピペを合理化する

AutoHotkey入門 学習シリーズ (4) コピペを合理化する

あるテーマに沿って調べ物をしていると,コピー・ペーストを繰り返すことがある.今回はそれを合理化するために,いささか長いスクリプトを作ろう.でも,恐れないでほしい.どれだけ長く見えても,僕が作れるものなんていうのは,所詮素人の小手先なのだから.

今日はまず,短いスクリプトを作って,それを改良していく,という順番を取ろう.

今日のCan-do

1.別のウインドウの操作を,そのウインドウを開かなくてもできるように設定できる.

2.If関数を使って,スクリプトを改良できる.


こういう状況を思い浮かべてほしいのです.

私はネットで資料収集をしています.ですが,コピーをして,それを別のウインドウを
開いて,はり付けて···と繰り返すのが苦痛です.なにか方法はありませんか.

別にネットなくても,Excellからワードファイルの特定の部分に張り付けるだとかでもいいし,なんでもいい.とにかく,あるActiveなウインドウから,別のウインドウへと移動するのが面倒くさい.
それを回避するためには,

ControlSend, , Keystroke, Wintitle

というコマンドを使う.さて,おなじみ,自らのスクリプトをEdit Scriptして,次を貼り付けよう.どのようなことかがかかれているでしょうか.

^+c::
	Send, ^c			;コピーのショートカットキー
	Sleep, 500
	ControlSend, , +{ins}{Enter}{Enter}, ahk_class Notepad ;貼り付けと,Enter二回をメモ帳にバックグラウンドで送る
	sleep, 200
return 

Control + Shift + Cを押すと,選択された部分がコピーされ,それをControlSendという,自分が選択しているActiveなウインドウではない,Notepad(メモ帳)に送る,という手筈を取っている.ahk_classがなんだったか忘れてしまった人は,ここ で解説しているから見てほしい.

さて,しかしこれだと,Notepadがない場合は,送られないという事態になってしまう.それだとまたいちいちNotepadを開く必要に迫られるので,面倒くさい.では,どうするか.三分考えてみてください.



さて,どうだろうか.そう,キーが押されると,Notepadが起動するようにすればいいんですね.

^+c::
	Send, ^c
        Run, Notepad.exe ;ここでは本当はC://から始まるパスを使うほうがいい
	Sleep, 500
	ControlSend, , +{ins}{Enter}{Enter}, ahk_class Notepad ;貼り付けと,Enter二回をメモ帳にバックグラウンドで送る
	sleep, 200
return 

ここで,Sendと,Runを逆にしてはいけませんよ.もしそうすると,Notepad上で,Sendしてしまうことになりますから.ここは大切なポイントです.

でも,問題があると思いませんか.そう,これでは,押すたびにNotepadが新しく起動してしまうのです.もう,ノートパッドだらけになって,大変です.

では,どうすればいいか.こういう時には,[IfWinNotExist, ]という「IF関数」.次をよく見てください.

^+c::
IfWinNotExist, ahk_class Notepad        ;もし,ahk_class NotepadにあたるWindowがなければ,
	{
	Send, ^c			;コピーのショートカットキー
   	Run, Notepad.exe
    Sleep, 500			
	ControlSend, , +{ins}{Enter}{Enter}, ahk_class Notepad ;貼り付けと,Enter二回をメモ帳にバックグラウンドで送る
	sleep, 200
	}
Else                     ;もしあれば,
	{
	Send, ^c			;コピーのショートカットキー
	Sleep, 500			
	ControlSend, , +{ins}{Enter}{Enter}, ahk_class Notepad ;貼り付けと,Enter二回をメモ帳にバックグラウンドで送る
	sleep, 200
	}
return

以前のものを消し,貼り付けて起動させていただければわかりますが,これでNotepadが重複して起動されることはなくなりました.このように,If関数は,特にIfWinExist/IfWinNotExist/IfWinActive/IfWinNotActiveという形で使われることが多く,たいていはこの形をとります.

KeyCombination::
IfWinExist, [Wintitle]
{
}
Else
{
}
return

あれ?ブログの文体が変わってる···まあいいや.

さて,もう一つだけTipを.それは,GoSub, というやつです.もう一度,上のものを見てみましょう.

^+c::
IfWinNotExist, ahk_class Notepad        ;もし,ahk_class NotepadにあたるWindowがなければ,
	{
	Send, ^c			;コピーのショートカットキー
   	Run, Notepad.exe
    Sleep, 500			
	ControlSend, , +{ins}{Enter}{Enter}, ahk_class Notepad ;貼り付けと,Enter二回をメモ帳にバックグラウンドで送る
	sleep, 200
	}
Else                     ;もしあれば,
	{
	Send, ^c			;コピーのショートカットキー
	Sleep, 500			
	ControlSend, , +{ins}{Enter}{Enter}, ahk_class Notepad ;貼り付けと,Enter二回をメモ帳にバックグラウンドで送る
	sleep, 200
	}
return

こう見ると,いくつかのキーは重複していることがわかります.たとえば,ControlSendやSleep, 500などがそうですね.
それを解決するためのものが,Subroutineです.言い換えれば,「重複するところをまとめて見やすくする」ものです.以下を見てください.

^+c::
IfWinNotExist, ahk_class Notepad        ;もし,ahk_class NotepadにあたるWindowがなければ,
     {
     Run, Notepad.exe
     WinActivate, ahk_class Chrome_WidgetWin_1	;ChromeをActiveにして
     Gosub, Clipper
     }
Else                     ;もしあれば,
     {
     Gosub, Clipper
     }
return

Clipper:
    Send, ^c
    sleep, 500
    ControlSend, , +{ins}{Enter}{Enter}, ahk_class Notepad ;貼り付けと,Enter二回をメモ帳にバックグラウンドで送る
    return

さて,このClipperにあたるのが,サブルーチンSubroutineです.Gosubで送られたものは,いったん下にいって,returnコマンドで戻ってくる,という感じです.
名前は実はなんでもいいです.上のGosub, [ ]のところと,一致するように設定してください.
こうすると,見やすくなりますし,仕様を変更するときも,Clipper以下を編集すればいいので,便利です.

例のごとく,ご自身が使う場合には,Chromeの部分は,既定のブラウザーに変更される必要がありますので,ご注意ください.


練習

次のサブルーチンを見て,何が行われているか予測してください.上と組み合わせて,ご自身のブラウザから,文字列を選択し,^+cを動作させてみてください.(Chromeを使っていないなら,変更させるのをお忘れなく.)

Clipper: ;clipboard method. longer but compatible.
    {
        { ;ここから内容とタイトルを取得する
        WinActivate, ahk_class Chrome_WidgetWin_1 ;Google Chromeを一.番手前に持ってきて,
        clipboard =
        sleep, 300
        Send, ^c ;コピー
        ClipWait
        ControlSend, , +{Ins}{Enter}, 無題 ;内容を張り付ける
        clipboard =
        WinGetTitle, wintitle, ahk_class Chrome_WidgetWin_1 ;Windowのタイトルを取得する
        clipboard := wintitle
        Clipwait
        ControlSend, , +{Ins}{:}, 無題 ;タイトルを張り付ける
        }
 Sleep, 50
        { ;ここからURLを取得する
        WinActivate, ahk_class Chrome_WidgetWin_1 ;Google Chromeを一番手前に持ってきて,
        clipboard =
        Send, ^l ;Ctrl+Lで,URLのバーへ移動
        sleep, 200
        Send, ^c
        ClipWait
        ControlSend, , +{Ins}{Enter}------{Enter}, 無題 ;コピーしたURLを張り付ける
        tooltip, 終了しました.
        Sleep, 500
        ToolTip, 
        }
   return
  }
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中