如何使用Win32使窗口透明?

7
使用Python Win32扩展,如何使Windows XP上的任意窗口透明?
3个回答

16

设置层叠窗口属性 示例:

import win32gui
import win32con
import winxpgui
import win32api
import subprocess
import time

subprocess.Popen("notepad.exe", shell=True)
time.sleep(1)
hwnd = win32gui.FindWindow(None, "New file - metapad")  ## The caption of my empty notepad (MetaPad)

win32gui.SetWindowLong (hwnd, win32con.GWL_EXSTYLE, win32gui.GetWindowLong (hwnd, win32con.GWL_EXSTYLE ) | win32con.WS_EX_LAYERED )
winxpgui.SetLayeredWindowAttributes(hwnd, win32api.RGB(0,0,0), 180, win32con.LWA_ALPHA)

你可以使用 win32gui.SetLayeredWindowAttributes() 来消除 winxpgui 的导入。 - Stevoisiak

3

您可以使用WIN32 API函数 SetLayeredWindowAttributes 来创建透明窗口:

BOOL WINAPI SetLayeredWindowAttributes(
  __in  HWND hwnd,
  __in  COLORREF crKey,
  __in  BYTE bAlpha,
  __in  DWORD dwFlags
);

这里有一个代码示例,您可以用它来封装WIN32 API函数以设置透明度。


0
import win32gui
import win32con
import winxpgui
import win32api
import subprocess
import time

subprocess.Popen("notepad.exe", shell=True)
time.sleep(1)
hwnd = win32gui.FindWindow(None, "New file - metapad")  ## The caption of my empty notepad (MetaPad)

win32gui.SetWindowLong (hwnd, win32con.GWL_EXSTYLE, win32gui.GetWindowLong (hwnd, win32con.GWL_EXSTYLE ) | win32con.WS_EX_LAYERED )
winxpgui.SetLayeredWindowAttributes(hwnd, win32api.RGB(0,0,0), 180, win32con.LWA_ALPHA)

这在Windows 10上不起作用。


是的,它可以。我刚刚测试过了。 事实上,它甚至可以在Windows 11上运行。 - Mihail-Cosmin Munteanu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接