Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Python从剪贴板获取数据。剪贴板返回以前复制的单词_Python_Windows_Clipboard_Pywin32_Pyhook - Fatal编程技术网

Windows Python从剪贴板获取数据。剪贴板返回以前复制的单词

Windows Python从剪贴板获取数据。剪贴板返回以前复制的单词,python,windows,clipboard,pywin32,pyhook,Python,Windows,Clipboard,Pywin32,Pyhook,我使用pyhook来检测用户何时按下Control+C。 然后,我使用win32clipboard api获取从剪贴板复制的数据 我面临的问题是,代码返回最后复制的数据,而不是当前数据 是否因为在剪贴板中保存某些内容需要时间 这是我的密码: from time import sleep import win32clipboard import win32api import win32console import win32gui import pythoncom,pyHook from thr

我使用pyhook来检测用户何时按下Control+C。 然后,我使用win32clipboard api获取从剪贴板复制的数据

我面临的问题是,代码返回最后复制的数据,而不是当前数据

是否因为在剪贴板中保存某些内容需要时间

这是我的密码:

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()

您可以使用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))