如何将窗口变成半透明

这段代码可以将你鼠标焦点经过的所有窗口都变成半透明窗口

#include <windows.h>
#include <winuser.h>
#include <algorithm>
#include <iostream>
using namespace std; 


char last[0xFF];
int main()
{
	for(;;)
	{
		Sleep(20);
		char title[0xFF];
		HWND hwnd = GetForegroundWindow();	
		GetWindowTextA(hwnd, title, sizeof(title));
		if(strcmp(last, title))
		{
			strcpy(last, title);
			cout << title << '\n';
			long exStyle = GetWindowLong (hwnd, GWL_EXSTYLE);
			exStyle = exStyle | WS_EX_LAYERED;
			SetWindowLong (hwnd, GWL_EXSTYLE, exStyle);
			SetLayeredWindowAttributes(hwnd, 0, 128, LWA_ALPHA);
		}
	}
} 

# 效果:

有没有聪明的小朋友可以数出这里面有多少个窗口呢

# 原理:

首先,获取鼠标焦点上的窗口句柄并存入 hwnd 里面

HWND hwnd = GetForegroundWindow();

然后获取该窗口的标题并存入 title 中,用于之后的比对及输出

GetWindowTextA(hwnd, title, sizeof(title));

如果这次的窗口标题与上次获取的窗口标题不同,说明要重新设置属性

if(strcmp(last, title))

title 复制到 last 中,用于之后的比较

strcpy(last, title);

输出获取到的窗口标题 title (这段代码本质上还是调试用途,不需要的话可以删掉)

cout << title << '\n';

获取该窗口的窗口样式

long exStyle = GetWindowLong (hwnd, GWL_EXSTYLE);

将窗口样式中添加允许修改透明度

exStyle = exStyle | WS_EX_LAYERED;

将样式重新叠加(请允许我使用如此奇怪的动词 )到窗口上

SetWindowLong (hwnd, GWL_EXSTYLE, exStyle);

将窗口透明度设为 128 (传入的值应介于 0 ~ 255 之间,0为完全透明,255 为不透明)(所以如果你想调整透明度就调整这个值吧),并使用 ALPHA 通道

SetLayeredWindowAttributes(hwnd, 0, 128, LWA_ALPHA);

最后一直循环保证能一直监测并修改透明度
(不要问我为什么要打三个大括号)

		}
	}
} 

然后一个能够一直监测鼠标焦点窗口并实时修改透明度的程序就写好了!

# 后记

千万不要将透明度设为 5 或更小的值,不要问我为什么,因为我刚刚试了一下,然后就再也找不回我的窗口了…

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值