回答:
あなたはと呼ばれるモジュールを使用することができますwin32clipboardの一部であり、pywin32を。
次に、最初にクリップボードデータを設定してから取得する例を示します。
import win32clipboard
# set clipboard data
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText('testing 123')
win32clipboard.CloseClipboard()
# get clipboard data
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
print data
ドキュメントからの重要な注意:
ウィンドウがクリップボードの検査または変更を完了したら、CloseClipboardを呼び出してクリップボードを閉じます。これにより、他のウィンドウがクリップボードにアクセスできるようになります。CloseClipboardを呼び出した後は、オブジェクトをクリップボードに配置しないでください。
基本的にGUIライブラリである組み込みモジュールTkinterを使用して、これを簡単に行うことができます。このコードは、OSからクリップボードのコンテンツを取得するための空のウィジェットを作成します。
#from tkinter import Tk # Python 3
from Tkinter import Tk
Tk().clipboard_get()
tkinter
代わりにすべきですTkinter
。そうでなければ、それは私のpython 3.7.3 64ビットwin10では動作しませんでした。
win32モジュールを使用するための多くの提案を見てきましたが、この投稿のように、Tkinterは私が見た中で最も短くて簡単な方法を提供します。
さらに、Tkinterはpython標準ライブラリにあります。
追加のパッケージをインストールしたくない場合はctypes
、同様に仕事を完了することができます。
import ctypes
CF_TEXT = 1
kernel32 = ctypes.windll.kernel32
kernel32.GlobalLock.argtypes = [ctypes.c_void_p]
kernel32.GlobalLock.restype = ctypes.c_void_p
kernel32.GlobalUnlock.argtypes = [ctypes.c_void_p]
user32 = ctypes.windll.user32
user32.GetClipboardData.restype = ctypes.c_void_p
def get_clipboard_text():
user32.OpenClipboard(0)
try:
if user32.IsClipboardFormatAvailable(CF_TEXT):
data = user32.GetClipboardData(CF_TEXT)
data_locked = kernel32.GlobalLock(data)
text = ctypes.c_char_p(data_locked)
value = text.value
kernel32.GlobalUnlock(data_locked)
return value
finally:
user32.CloseClipboard()
print(get_clipboard_text())
上記で最も賛成された答えは、クリップボードを単にクリアしてからコンテンツを取得する(その後は空になる)方法で奇妙です。クリップボードをクリアして、「フォーマット済みテキスト」などの一部のクリップボードコンテンツタイプが、クリップボードに保存するプレーンテキストコンテンツを「カバー」しないようにすることができます。
次のコードは、クリップボードのすべての改行をスペースで置き換え、すべての二重スペースを削除して、最終的にコンテンツをクリップボードに保存します。
import win32clipboard
win32clipboard.OpenClipboard()
c = win32clipboard.GetClipboardData()
win32clipboard.EmptyClipboard()
c = c.replace('\n', ' ')
c = c.replace('\r', ' ')
while c.find(' ') != -1:
c = c.replace(' ', ' ')
win32clipboard.SetClipboardText(c)
win32clipboard.CloseClipboard()
これがpythonからクリップボードにアクセスする最も簡単な方法であることがわかりました。
1)pyperclipをインストールします。
pip install pyperclip
2)使用法:
import pyperclip
s = pyperclip.paste()
pyperclip.copy(s)
# the type of s is string
Win10 64ビット、Python 3.5およびPython 3.7.3(64ビット)でテスト済み。非ASCII文字でも機能するようです。テストされた文字には、±°©©αβγθΔΨΦåäöが含まれます
win32allパッケージのwin32clipboardを試してください(ActiveState Pythonを使用している場合は、おそらくインストールされています)。
こちらのサンプルをご覧ください:http : //code.activestate.com/recipes/474121/
私のコンソールプログラムの場合、.destroy()が常にエラーを出力するため、上記のtkinterでの回答はうまくいきませんでした:
「イベント」コマンドを呼び出せません:実行中にアプリケーションが破棄されました...
または.withdraw()を使用すると、コンソールウィンドウにフォーカスが戻りませんでした。
これを解決するには、.destroy()の前に.update()を呼び出す必要があります。例:
# Python 3
import tkinter
r = tkinter.Tk()
text = r.clipboard_get()
r.withdraw()
r.update()
r.destroy()
r.withdraw()は、フレームがミリ秒表示されないようにします。その後、フレームが破棄され、コンソールにフォーカスが戻ります。