# Deze code is getest met Python 2.6 en Python 3.1
import ctypes from sys import version_info
strcpy = ctypes.cdll.msvcrt.strcpy wcscpy = ctypes.cdll.msvcrt.wcscpy OpenClipboard = ctypes.windll.user32.OpenClipboard EmptyClipboard = ctypes.windll.user32.EmptyClipboard GetClipboardData = ctypes.windll.user32.GetClipboardData SetClipboardData = ctypes.windll.user32.SetClipboardData CloseClipboard = ctypes.windll.user32.CloseClipboard GlobalAlloc = ctypes.windll.kernel32.GlobalAlloc GlobalLock = ctypes.windll.kernel32.GlobalLock GlobalUnlock = ctypes.windll.kernel32.GlobalUnlock CF_TEXT = 1 CF_UNICODETEXT = 13 GMEM_DDESHARE = 0x2000
is_python3 = version_info[0] >= 3 if is_python3: default_type = CF_UNICODETEXT else: default_type = CF_TEXT
def get_globaldata_as_ansistring(hCd): GlobalLock.restype = ctypes.c_char_p ptr = GlobalLock(hCd) GlobalUnlock(hCd) return ptr
def get_globaldata_as_unicodestring(hCd): GlobalLock.restype = ctypes.c_wchar_p ptr = GlobalLock(hCd) GlobalUnlock(hCd) return ptr
def get_ansistring_as_globaldata(string): GlobalLock.restype = ctypes.c_long hCd = GlobalAlloc(GMEM_DDESHARE, len(string) + 1) ptr = GlobalLock(hCd) strcpy(ctypes.c_char_p(ptr), string) GlobalUnlock(hCd) return hCd
def get_unicodestring_as_globaldata(string): GlobalLock.restype = ctypes.c_long hCd = GlobalAlloc(GMEM_DDESHARE, len(string) * 2 + 2) ptr = GlobalLock(hCd) wcscpy(ctypes.c_wchar_p(ptr), string) GlobalUnlock(hCd) return hCd
def SetText(data): if type(data) != str: raise TypeError("Data must be a string!") OpenClipboard(None) try: EmptyClipboard() if is_python3: data = get_unicodestring_as_globaldata(data) else: data = get_ansistring_as_globaldata(data) SetClipboardData(default_type, data) except: pass finally: CloseClipboard()
def GetText(): data = None OpenClipboard(None) try: data = GetClipboardData(default_type) if data: if is_python3: data = get_globaldata_as_unicodestring(data) else: data = get_globaldata_as_ansistring(data) except: pass finally: CloseClipboard() return data
11-12-2011, 13:45
Geschreven door Fibergeek 
|