| __author__ = "Israel Fruchter <[email protected]>" | |
| import sys, os | |
| if not sys.platform == 'win32': | |
| raise Exception("Windows-only demo") | |
| try: | |
| from _winclipboard_cffi import ffi, lib | |
| except ImportError: | |
| print 'run winclipboard_build first, then make sure the shared object is on sys.path' | |
| sys.exit(1) | |
| # ffi "knows" about the declared variables and functions from the | |
| # cdef parts of the module _winclipboard_cffi created, | |
| # lib "knows" how to call the functions from the set_source parts | |
| # of the module. | |
| def CopyToClipboard(string): | |
| ''' | |
| use win32 api to copy `string` to the clipboard | |
| ''' | |
| hWnd = lib.GetConsoleWindow() | |
| if lib.OpenClipboard(hWnd): | |
| cstring = ffi.new("char[]", string) | |
| size = ffi.sizeof(cstring) | |
| # make it a moveable memory for other processes | |
| hGlobal = lib.GlobalAlloc(lib.GMEM_MOVEABLE, size) | |
| buffer = lib.GlobalLock(hGlobal) | |
| lib.memcpy(buffer, cstring, size) | |
| lib.GlobalUnlock(hGlobal) | |
| res = lib.EmptyClipboard() | |
| res = lib.SetClipboardData(lib.CF_TEXT, buffer) | |
| lib.CloseClipboard() | |
| CopyToClipboard("hello world from cffi") |