Aero Window上的Autohotkey透明PNG

时间:2014-03-29 00:06:52

标签: png transparency gdi+ autohotkey aero

我想创建类似于Winlaunch的内容,这是一个显示带有程序快捷方式的Aero窗口的应用程序。到目前为止,我可以使用Aero.ahk Library和Autohotkey GUI创建窗口。但是具有透明度的PNG图标在它们周围显示出丑陋的白色边框。见截图。

enter image description here

如何解决?

到目前为止这是脚本:

#Include AeroLib.ahk
#Include Gdip.ahk
CoordMode, Mouse, Screen
MouseGetPos, mx, my
mx := mx-250
my := my-150
Aero_StartUp()

DWM_Win_TransColor:=0x123456
Gui,Color,%DWM_Win_TransColor%
Gui 1: +AlwaysOnTop
Gui,+LastFound
MainHandle:=WinExist()

Aero_ChangeFrameAreaAll(MainHandle)
Gui Add, Picture, x10 y10 w96 h96 gRunProgram1, ie.png
Gui 1: Show,x0 y0 w320 h240,Launchy
WinSet,TransColor,%DWM_Win_TransColor%,ahk_id %MainHandle%
Return

RunProgram1:
Run C:\Program Files\Internet Explorer\iexplore.exe
goto GuiClose

GuiClose:
Aero_End() ;Shutdown Aero Libary
Gdip_Shutdown(pToken)
ExitApp

我也尝试过GDIp Library,它似乎能够在没有工件的情况下渲染PNG,但我不知道如何将两者结合起来。

1 个答案:

答案 0 :(得分:1)

我知道这有点晚了,但我设法使用 GDIP 库来渲染 PNG 没有锯齿,一个例子之前和之后: enter image description here

在尝试代码之前,您需要在与脚本相同的目录中有一个名为“lib”的文件夹,在“lib”文件夹中,您应该有一个名为“Gdip.ahk”的文件,其中包含以下代码: https://github.com/tariqporter/Gdip/blob/master/Gdip.ahk

现在你可以试试这个代码:

If !pToken := Gdip_Startup()
{
    MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
    ExitApp
}
frameNum1 := Gdip_CreateBitmapFromFile("6.png") 
Gui, 2: -Caption +E0x80000 +LastFound +OwnDialogs +Owner +AlwaysOnTop
Gui, 2: Show, NA
hwnd1 := WinExist()
Width := Gdip_GetImageWidth(frameNum1), Height := Gdip_GetImageHeight(frameNum1)
hbm := CreateDIBSection(Width, Height)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
G := Gdip_GraphicsFromHDC(hdc)
Gdip_SetInterpolationMode(G, 7)
trans := 1
Gdip_DrawImage(G, frameNum1 , 0, 0, Width, Height, 0, 0, Width, Height, trans)
UpdateLayeredWindow(hwnd1, hdc, 200, 600, Width, Height)

enter image description here