Python-操作剪切板

用python自带的ctypes,user32和kernnel32实现对剪切板的操作



import ctypes
user32 = ctypes.windll.user32
kernel32 = ctypes.windll.kernel32
GMEM_MOVEABLE = 0x0002
GMEM_DDESHARE = 0x2000

def getClipData(Type:str):
    strResult =None
    if user32.OpenClipboard(0)== 1:
        uFormat = 0
        htmlFormat = user32.RegisterClipboardFormatA(Type.encode("GBK"))
        uFormat=user32.EnumClipboardFormats(uFormat)
        while (uFormat>0):
            if (htmlFormat == uFormat):
                if (user32.IsClipboardFormatAvailable(uFormat)):
                    handle = user32.GetClipboardData(uFormat)
                    data = kernel32.GlobalLock(handle)
                    kernel32.GlobalUnlock(handle)
                    strResult =ctypes.cast( ctypes.c_void_p(data) , ctypes.c_char_p)
            uFormat = user32.EnumClipboardFormats(uFormat)
        user32.CloseClipboard()
    return strResult.value.decode("GBK")

def setClipData(Type:str,data):
    if type(data)==str:
        data = data.encode("GBK")
    ld = len(data)
    if user32.OpenClipboard(0)== 1:
        htmlFormat = user32.RegisterClipboardFormatA(Type.encode("GBK"))
        user32.EmptyClipboard()
        hText = kernel32.GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, len(data) + 1)
        ptr = kernel32.GlobalLock(hText)
        ctypes.memmove(ptr,data+b'\0',ld+1)
        kernel32.GlobalUnlock(hText)
        user32.SetClipboardData(htmlFormat, hText)
        user32.CloseClipboard()
        kernel32.GlobalFree(hText)

你可能感兴趣的:(python,python)