[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