Search code examples
pythonwindows-7pywin32aeromargins

Windows 7 MARGINS structure in Python


I'm attempting to get some of the more interesting Windows Aero effects working in Python.

The DwmExtendFrameIntoClientArea function can be used to extend the Aero glass into the client area. It requires a Window handle and a pointer to a MARGINS structure. I already know how to get a window's handle in Python; however, I'm unaware of how to make a margins structure.

MARGINS structure, MSDN Docs

Here is what I have so far:

import Tkinter as tk
import string
import ctypes

root = tk.Tk()

handle = string.atoi(root.wm_frame(), 0)

dwm = ctypes.windll.dwmapi

# needs pointertomarginsstruct
dwm.DwmExtendFrameIntoClientArea(handel, pointertomarginsstruct)

root.mainloop()

Solution

  • I do not have Win7 running to test this but try defining the struct with ctypes:

    class MARGINS(ctypes.Structure):
      _fields_ = [("cxLeftWidth", c_int),
                  ("cxRightWidth", c_int),
                  ("cyTopHeight", c_int),
                  ("cyBottomHeight", c_int)
                 ]
    margins = MARGINS(1, 2, 1, 1)
    
    dwm.DwmExtendFrameIntoClientArea(handel, ctypes.byref(margins))