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