Winapi MSDN COLORREF结构宏,Python

Winapi MSDN COLORREF结构宏,Python,winapi,macros,pywin32,ctype,Winapi,Macros,Pywin32,Ctype,我正在尝试使用该函数更改windows透明度颜色。我使用ctypes模块创建了一个结构。我很确定我必须使用RGB宏才能让它正常工作 如何在使用ctypes生成的结构上使用宏 我要做的事 import Tkinter as tk import win32gui import win32con class ColorRef (ctypes.Structure) : _fields_ = [("byRed", ctypes.c_byte), ("byGre

我正在尝试使用该函数更改windows透明度颜色。我使用ctypes模块创建了一个结构。我很确定我必须使用RGB宏才能让它正常工作

如何在使用ctypes生成的结构上使用宏

我要做的事

import Tkinter as tk

import win32gui
import win32con

class ColorRef (ctypes.Structure) :

    _fields_ = [("byRed", ctypes.c_byte),
                ("byGreen", ctypes.c_byte),
                ("byBlue", ctypes.c_byte)]

# makes a Tkinter window
root = tk.Tk()

# a handle to that window
handle = int(root.wm_frame(), 0)

# a COLORRED struct
colorref = ColorRef(1, 1, 1)

# attempting to change the transparency color
win32gui.SetLayeredWindowAttributes(handle, colorref, 0, win32con.LWA_COLORKEY)

root.mainloop()
三件事:

  • C预处理器宏不存在于C代码之外。在实际编译之前,它们会进行文本扩展
  • COLORREF是DWORD的类型定义,而不是结构
  • RGB宏所做的只是一些位移位,以获得
    0x00bbggrr
  • 因此,代码如下所示:

    def RGB(r, g, b):
        r = r & 0xFF
        g = g & 0xFF
        b = b & 0xFF
        return (b << 16) | (g << 8) | r
    
    colour = RGB(1, 1, 1)
    win32gui.SetLayeredWindowAttributes(handle, colour, 0, win32con.LWA_COLORKEY)
    
    def RGB(r,g,b):
    r=r&0xFF
    g=g&0xFF
    b=b&0xFF
    回报(b3件事:

  • C预处理器宏不存在于C代码之外。它们在实际编译之前经过文本扩展
  • COLORREF是DWORD的类型定义,而不是结构
  • RGB宏所做的只是一些位移位,以获得
    0x00bbggrr
  • 因此,代码如下所示:

    def RGB(r, g, b):
        r = r & 0xFF
        g = g & 0xFF
        b = b & 0xFF
        return (b << 16) | (g << 8) | r
    
    colour = RGB(1, 1, 1)
    win32gui.SetLayeredWindowAttributes(handle, colour, 0, win32con.LWA_COLORKEY)
    
    def RGB(r,g,b):
    r=r&0xFF
    g=g&0xFF
    b=b&0xFF
    返回(b)