クリップボード履歴ソフトCliborを公開中!

マクロ機能

マクロ機能

前置き

ここではCliborでpythonを実行する説明をします。
この機能により、ある程度マクロを実行するように使うことができます。
ここでの話は、上級者向け(技術者向け)となっています。
Windows10で動作確認しました。

pythonをインストールしてみましょう

以下のURLからインストーラをダウンロードします。

今回は2.7.12を使用しました。
https://www.python.org/downloads/

pythonのバージョンなどは、任意で結構です。
Cliborからは「.py」ファイルを実行するだけですので、その環境があればOKです。
後にご紹介するサンプルソースは2.7でしか動作確認していません。

ダウンロードしたインストーラを起動します。
インストール場所は、私は「C:\Python27\」にしました。

pywin32のインストール

他にもモジュールを入れておきましょう。以下のURLからpywin32をインストールします。
ダウンロードしたPythonのバージョンと合わせます。
https://sourceforge.net/projects/pywin32/files/pywin32/

通常通りインストールします。

これでpythonでひと通り操作が出来る状態になりました。

次にCliborで使用するための設定をします。
clibor.exeと同階層にclb_ex.batファイルを作成し、以下の内容を保存します。
パスはインストールしたパスを指定します。

c:
cd C:\Python27
SET PYTHONHOME=C:\Python27

確認

以下の文字列をCliborの定型文に登録してみてください。
その後、登録した定型文を選択すると、Cliborの履歴に「テストです」という文字が格納されていると思います。

# -*- coding: utf-8 -*-
#<$C_CLB_PYTHON/>
import win32api
import win32com.client
import win32clipboard as CB
shell = win32com.client.Dispatch("WScript.Shell")
CB.OpenClipboard()
CB.EmptyClipboard()
CB.SetClipboardText( u"テストです", CB.CF_UNICODETEXT )
CB.CloseClipboard()

タグの説明

定型文に以下の文字列がある場合は、pythonファイルを作成し実行します。

#<$C_CLB_PYTHON/>

仕組み

Cliborでは、pyファイルを作成し実行しているだけです。
stmpフォルダを作り、以下のファイル名で保存します。
(実行するたびにpyファイルを作り直しています)
・clibor.bat
・xxxx_xxxx.py
ですので上手く実行できない場合は、上記のbatファイルを直接起動するなりして、エラーの原因を探してください。

サンプルソース

以下、サンプルソースです。
コツはクリップボードを使用していたり、キーを送信したりしている点です。
これらをアイディアにして色々と作成してみてください。

  • インデントには気をつけてください。以下のサンプルコードをコピペする際に、半角スペースが含まれるのを防ぐために、ところどころコメント行になっています。
  • win32api.Sleepはお使いの環境で調整してください。
複数のテキストボックスに入力する
# -*- coding: utf-8 -*-
#<$C_CLB_PYTHON/>
import win32api
import win32com.client
import win32clipboard as CB
#ここで2つの値を指定する
key_edit1 = u"1つめ"
key_edit2 = u"2つめ"
#
shell = win32com.client.Dispatch("WScript.Shell")
win32api.Sleep(500)
#
CB.OpenClipboard()
CB.EmptyClipboard()
CB.SetClipboardText( key_edit1, CB.CF_UNICODETEXT )
CB.CloseClipboard()
shell.SendKeys("^v")
win32api.Sleep(100)
#
shell.SendKeys("{TAB}")
win32api.Sleep(100)
#
CB.OpenClipboard()
CB.EmptyClipboard()
CB.SetClipboardText( key_edit2, CB.CF_UNICODETEXT )
CB.CloseClipboard()
shell.SendKeys("^v")

以下の上のテキストボックスにフォーカスを当てて実行してみてください。
2つのテキストボックスに値が入力されると思います。

選択されたテキスト(文字列)をgoogleで検索する
# -*- coding: utf-8 -*-
#<$C_CLB_PYTHON/>
import win32api
import win32com.client
import win32clipboard as CB
import webbrowser
import sys
#
win32api.Sleep(500)
shell = win32com.client.Dispatch("WScript.Shell")
#
CB.OpenClipboard()
CB.EmptyClipboard()
CB.CloseClipboard()
shell.SendKeys("^c")
#
win32api.Sleep(500)
CB.OpenClipboard()
text1 = CB.GetClipboardData( CB.CF_UNICODETEXT )
CB.CloseClipboard()
#
try:
	turl="http://www.google.com/search?q=%s" % text1
	if webbrowser.open(turl) == False:
		raise webbrowser.Error
except webbrowser.Error:
	print >> sys.stderr, "open failed"
	sys.exit(1)

何かテキストの文字列を選択して実行してみてください。
このマクロは、一度Ctrl+Cでコピーを行った後、Google検索を試みます。
※もしうまく動かない場合は、半角スペース4つをタブ文字に置き換えて登録してください。

選択されたテキスト(文字列)を加工して貼付け
# -*- coding: utf-8 -*-
#<$C_CLB_PYTHON/>
import win32api
import win32com.client
import win32clipboard as CB
#
win32api.Sleep(500)
shell = win32com.client.Dispatch("WScript.Shell")
#
shell.SendKeys("^x")
win32api.Sleep(500)
#
CB.OpenClipboard()
text1 = CB.GetClipboardData(1) #1 -> CF_TEXT
CB.CloseClipboard()
#
#文字列加工
text = '<!-- %s -->' % text1
#
win32api.Sleep(500)
CB.OpenClipboard()
CB.EmptyClipboard()
CB.SetClipboardText( text, CB.CF_UNICODETEXT )
CB.CloseClipboard()
#
shell.SendKeys("^v")

何かテキストの文字列を選択して実行してみてください。
このマクロは、一度Ctrl+Xで切り取った後、文字列を加工してCtrl+Vで貼り付けます。

CliborをFIFOモードにし、FIFOのデータを複数件作成する
# -*- coding: utf-8 -*-
#<$C_CLB_PYTHON/>
import win32api
import win32com.client
import win32clipboard as CB
#
win32api.Sleep(100)
shell = win32com.client.Dispatch("WScript.Shell")
#
text1 = u"1番目"
text2 = u"2番目"
#
#FIFOモード呼び出し(ホットキーがCtrl+Alt+Fの場合)
shell.SendKeys("^%f")
#
win32api.Sleep(100)
CB.OpenClipboard()
CB.EmptyClipboard()
CB.SetClipboardText( text1, CB.CF_UNICODETEXT )
CB.CloseClipboard()
#
win32api.Sleep(500)
CB.OpenClipboard()
CB.EmptyClipboard()
CB.SetClipboardText( text2, CB.CF_UNICODETEXT )
CB.CloseClipboard()

まずFIFOのホットキーを「Ctrl+Alt+F」にします。
このマクロは、上記のキーを押しFIFOを有効にします。
その後、クリップボードに値を格納します。

クリップボードの値を半角スペース・タブを取り除きクリップボードに転送
# -*- coding: utf-8 -*-
#<$C_CLB_PYTHON/>
import win32api
import win32com.client
import win32clipboard as CB
#
win32api.Sleep(500)
shell = win32com.client.Dispatch("WScript.Shell")
#
CB.OpenClipboard()
text1 = CB.GetClipboardData(1) #1 -> CF_TEXT
CB.CloseClipboard()
#
win32api.Sleep(100)
#置き換える文字列
text2 = text1.replace(" ","")
outputtext = text2.replace("\t","")
#
CB.OpenClipboard()
CB.EmptyClipboard()
CB.SetClipboardText( outputtext, CB.CF_UNICODETEXT )
CB.CloseClipboard()

このマクロは、クリップボードに格納されているテキストのデータを半角スペース・タブを消して、クリップボードに再格納します。

クリップボードの値をHTMLタグを取り除きクリップボードに転送
# -*- coding: utf-8 -*-
#<$C_CLB_PYTHON/>
import win32api
import win32com.client
import win32clipboard as CB
import re
#
win32api.Sleep(500)
shell = win32com.client.Dispatch("WScript.Shell")
#
CB.OpenClipboard()
text1 = CB.GetClipboardData(1) #1 -> CF_TEXT
CB.CloseClipboard()
#
win32api.Sleep(100)
#置き換える文字列
p = re.compile(r"<[^>]*?>")
outputtext = p.sub("", text1)
#
CB.OpenClipboard()
CB.EmptyClipboard()
CB.SetClipboardText( outputtext, CB.CF_UNICODETEXT )
CB.CloseClipboard()

このマクロは、クリップボードに格納されているテキストのデータをHTMLタグを消して、クリップボードに再格納します。
以下の文字列をコピーし、マクロを実行してみてください。実行後はHTMLタグが削除されていると思います。
<span>文字列のみ</span>取得します。

文字列の整形などは、Pythonでなんでもできるのではないでしょうか。

メッセージダイアログを表示する
# -*- coding: utf-8 -*-
#<$C_CLB_PYTHON/>
import Tkinter
import tkMessageBox
tkMessageBox.showinfo('showinfo',u'テスト')

このマクロが上手く実行できない場合は、clb_ex.batファイルに以下を追記してください。
SET PYTHONPATH=”C:\Python27\Lib\lib-tk;”
実行するとアラートが表示されると思います。

選択されたテキスト(文字列)をファイルに出力する
# -*- coding: utf-8 -*-
#<$C_CLB_PYTHON/>
import win32api
import win32com.client
import win32clipboard as CB
import datetime
#
shell = win32com.client.Dispatch("WScript.Shell")
win32api.Sleep(500)
#
CB.OpenClipboard()
CB.EmptyClipboard()
CB.CloseClipboard()
shell.SendKeys("^c")
#
win32api.Sleep(500)
#
CB.OpenClipboard()
text1 = CB.GetClipboardData(1) #1 -> CF_TEXT
CB.CloseClipboard()
#
str = datetime.datetime.now().strftime(u'%Y%m%d_%H%M%S')
f = open("D:\\"+str+".txt", "w")
f.write(text1)
f.close()

このマクロは、選択されたテキスト文字列を、Ctrl+Cでコピーし、Dドライブの直下に日付のファイル名のテキストファイルとして保存します。

※XPではうまくいきましたが、Win7やWin10ではCドライブの直下にはうまく出力できず、また改行が多く挿入されるようです。

マクロをJavaScriptで書く

polygon planet様より、以下の様な試みもありましたのでご紹介です。
クリップボード履歴ソフト Clibor のマクロを JavaScript で書けるようにするパッチ

  • Facebook
  • Hatena
  • twitter
  • Google+

サイトについて

Cliborに関する匿名のアンケートやご要望はこちらからCliborアンケート


Amunsへ直接のお問い合わせはこちらからContact

寄付のお願い

Cliborはフリーソフトですが寄付歓迎です。 →寄付のお願い
PAGETOP
Copyright © amuns:code All Rights Reserved.
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.