なんかいろいろこんぴゅーたかんけいのなぐりがき

なんか勉強しているこんぴゅーた関係のことのメモやそれ以外のことを書こうかなあ...

logs

スポンサーサイト

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

クリップボードにコピーした文字列をスタックする

 クリップボードって、コピーすると前にコピーした情報が上書きされてしまう。コピーした文字列をスタック形式で保存しておいてくれればいいのに、と思ったのでそんなツールがないかググッと調べてみるわけですが、案外ないようなので、せっかくの土曜日を利用してPythonで作ってみた。実はまだ完成してないけど一応動くから、ソースとそのメモをここに記述しておく。
使い方は
Alt+o でクリップボードからスタックにプッシュ
Alt+p でスタックからポップしクリップボードへ
Alt+q で終了。
以下ソース

import pythoncom,pyHook,sys
import win32clipboard as CB
#import SendKeys

stack = []
str=""
def happen(event):
if event.IsAlt()==32 and event.Key=="Q":
print "END"
sys.exit()
if event.IsAlt()==32 and event.Key=="O":
push()
if event.IsAlt()==32 and event.Key=="P":
catapult()
return True

def push():
CB.OpenClipboard()
str = CB.GetClipboardData(1)
if str == stack[len(stack) -1]:
print "equal : not pushed"
else:
stack.append(str)
print "pushed"

CB.CloseClipboard()
print stack

def catapult():
if len(stack) <= 1:
print "cant pop"
#SendKeys.SendKeys("test")
return
CB.OpenClipboard()
CB.EmptyClipboard()
del stack[len(stack)-1:]
if len(stack) <=1:
str = stack[0]
CB.SetClipboardText(str)
else:
str = stack.pop()
CB.SetClipboardText(str)

CB.CloseClipboard()
#SendKeys.SendKeys("test")
print "pop"


hm = pyHook.HookManager()
hm.KeyDown = happen
hm.HookKeyboard()

CB.OpenClipboard()
stack.append(CB.GetClipboardData(1))
CB.CloseClipboard()


pythoncom.PumpMessages()


importではpyHookというバックグラウンドというかデーモンの状態からでも入力されるキーやマウスの情報を取得可能にするモジュール
win32clipboardはクリップボードを操作するためのモジュール.win32シリーズのモジュールを用いることで、Pythonでwindowsの機能をいろいろつかえるみたい。
SendKeyは結局使えなかったのだけどアクティブウィンドウにキーを出力できるモジュール。ただし日本語非対応なので結局使えなかった

次に変数とかのメモ
stackはクリップボードからgetした文字列をいれとくlist
strはなんかstring型のものを一時的に蓄える

pyHookで関数を呼びだした場合(このソースだとhappen)さいごにreturn TrueしてやらないとBlockされてしまいほかのプロセスにキー入力がいかなくなるらしい。のできちんとTrueを返してあげる。

IsAlt()はTrue,Falseを返すはずなのだがなぜかTrueのときに32を返してくるのでしかたなく==32にしてる。なんでだろう?

これからすべきことは、スタックからポップするときにアクティブウィンドウに文字列を出力できるようにうにすること(SendKeysはだめだった)、選択状態にされた文章をプッシュできるようにすること、タスクトレイにアイコンを表示して存在感を示すこと、モジュールがない環境でも起動できるようにすること
、プッシュ数を制限すること

現在確認されている問題点。

文字列以外のデータがクリップボードにあるとき(画像とか、ていうか画像以外にあるのかな?)にプッシュするとエラーがでるのでその処理(別にプログラム自体がクラッシュするわけではないが一応ね)
なんかショートカットキーが微妙な位置

感想:
 これだけでもコーディングするのに7時間かかった。原因はPythonの基本文法もろくに覚えていないのにコーディングしようと考えてしまったこと。あと、目的を果たすためのモジュールとその使い方について記述されているサイトを探すのに苦労した。Pythonの日本語の資料が少なかったので結局英語を読む羽目に…
 しかし、これだけ便利なモジュールがそろっていれば、次回に別のWindwosアプリケーションをPythonで実装するときはかなり楽になりそうだ。ということでこの7時間は浪費ではないはず。
 とりあえずこの記事保存したら、Py2exeで実行ファイル作成しようと試みてみてみることにする。
スポンサーサイト

トラックバックURL

http://ilovevim.blog42.fc2.com/tb.php/34-8913570c

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

この記事へのコメント

コメント投稿フォーム

Paging Navigation

Navigations, etc.

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