2016-04-10 8 views
0

ユーザーがCtrl + Cを押したときにpyhookを使用して検出します。 次に、win32clipboard apiを使用してクリップボードからデータをコピーします。Windows Pythonはクリップボードからデータを取得します。クリップボードは以前にコピーされた単語を返します

私が直面している問題は、コードが現在のものではなく最後にコピーしたデータを返すことです。

クリップボードに何かを保存するには時間がかかりますか?

from time import sleep 
import win32clipboard 
import win32api 
import win32console 
import win32gui 
import pythoncom,pyHook 
from threading import Thread 

""" 
win=win32console.GetConsoleWindow() 
win32gui.ShowWindow(win,0) 
win32clipboard.EmptyClipboard() 
win32clipboard.SetClipboardText('testing 123') 
""" 

data='' 
def getcopied(): 
    global data 
    while True: 
     try: 
      win32clipboard.OpenClipboard() 
      data = win32clipboard.GetClipboardData() 
      win32clipboard.CloseClipboard() 
      break 
     except TypeError: 
      print "Copied Content Invalid" 
      break 
    if data.isalpha(): 
     print data 


def initkeystack(): 
    global keystack 
    keystack=[ [i,-1] for i in ['','','','','']] 

def ctrlc(): 
    global keystack 
    ct=0 
    for i in range(5): 
     if ct==0: 
      if keystack[i]==['Lcontrol',0]: 
       ct=1 
     else: 
      if keystack[i]==['C',0]: 
       getcopied() 
       getcopied() 
       initkeystack() 

def OnKeyboardEvent(event): 
    str=event.GetKey() 
    global keystack 
    if keystack[4]!=[str,0]: 
     del(keystack[0]) 
     keystack.append([str,0]) 
     ctrlc() 

def OnKeyboardEventUp(event): 
    str=event.GetKey() 
    global keystack 
    if keystack[4]!=[str,1]: 
     del(keystack[0]) 
     keystack.append([str,1]) 
     ctrlc() 

def klog(): 
    keystack=[] 
    initkeystack() 
    while True: 
     try: 
      hm=pyHook.HookManager() 
      hm.KeyDown=OnKeyboardEvent 
      hm.KeyUp=OnKeyboardEventUp 
      hm.HookKeyboard() 
      while True: 
       pythoncom.PumpWaitingMessages() 
     except KeyboardInterrupt: 
      pass 

a = Thread(target=klog) 
a.start() 
a.join() 

答えて

0

あなたがクリップボードを取得するためにctypesを使用することができます。

は、ここに私のコードです。

クリップボードに文字列が含まれている場合は、クリップボードを返す単純な関数です。

import ctypes   

user32 = ctypes.windll.user32  
kernel32 = ctypes.windll.kernel32 

def getClipboard(user32, kernel32): 
    user32.OpenClipboard(0) 
    if user32.IsClipboardFormatAvailable(1): 
     data = user32.GetClipboardData(1) 
     data_locked = kernel32.GlobalLock(data) 
     clipText = ctypes.c_char_p(data_locked) 
     kernel32.GlobalUnlock(data_locked) 
     text = clipText.value 
    else: 
     text = "" 
    user32.CloseClipboard() 
    return text 

print(getClipboard(user32, kernel32)) 
関連する問題