[pypy-commit] cffi default: Add a Windows clipboard demo from Fruch on the mailing list.
arigo
noreply at buildbot.pypy.org
Mon Jun 18 23:15:04 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r468:1981c27342ff
Date: 2012-06-18 23:14 +0200
http://bitbucket.org/cffi/cffi/changeset/1981c27342ff/
Log: Add a Windows clipboard demo from Fruch on the mailing list.
diff --git a/demo/winclipboard.py b/demo/winclipboard.py
new file mode 100644
--- /dev/null
+++ b/demo/winclipboard.py
@@ -0,0 +1,52 @@
+from cffi import FFI
+
+ffi = FFI()
+ffi.cdef('''
+ typedef void * HANDLE;
+ typedef HANDLE HWND;
+ typedef int BOOL;
+ typedef unsigned int UINT;
+ typedef int SIZE_T;
+ typedef char * LPTSTR;
+ typedef HANDLE HGLOBAL;
+ typedef HANDLE LPVOID;
+
+ HWND GetConsoleWindow(void);
+
+ LPVOID GlobalLock( HGLOBAL hMem );
+ BOOL GlobalUnlock( HGLOBAL hMem );
+ HGLOBAL GlobalAlloc(UINT uFlags, SIZE_T dwBytes);
+
+ BOOL OpenClipboard(HWND hWndNewOwner);
+ BOOL CloseClipboard(void);
+ BOOL EmptyClipboard(void);
+ HANDLE SetClipboardData(UINT uFormat, HANDLE hMem);
+
+ void * memcpy(void * s1, void * s2, int n);
+ ''')
+
+lib = ffi.verify('''
+ #include <windows.h>
+''', libraries=["user32"])
+
+def PutToClipboard(string):
+ CF_TEXT=1
+ GMEM_MOVEABLE = 0x0002
+
+ hWnd = lib.GetConsoleWindow()
+
+ if lib.OpenClipboard(hWnd):
+ cstring = ffi.new("char[]", string)
+
+ # make it a moveable memory for other processes
+ hGlobal = lib.GlobalAlloc(GMEM_MOVEABLE, size)
+ buffer = lib.GlobalLock(hGlobal)
+ lib.memcpy(buffer, cstring, size)
+ lib.GlobalUnlock(hGlobal)
+
+ res = lib.EmptyClipboard()
+ res = lib.SetClipboardData(CF_TEXT, buffer)
+
+ lib.CloseClipboard()
+
+PutToClipboard("this string from cffi")
More information about the pypy-commit
mailing list