我想创建类似于 Winlaunch 的应用程序,它是一个显示带有程序快捷方式的 Aero 窗口的应用程序。到目前为止,我已经能够使用 Aero.ahk 库和 Autohotkey GUI 创建窗口。但具有透明度的 PNG 图标在其周围显示出丑陋的白色边框。请参阅屏幕截图。
如何解决?
这是到目前为止的脚本:
#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 库,它似乎能够在没有伪影的情况下渲染 PNG,但我不知道如何将两者结合起来。
最佳答案
我知道这有点晚了,但我设法使用 GDIP 库在没有锯齿的情况下渲染 PNG,前后示例:
在尝试代码之前,您需要在与脚本相同的目录中拥有一个名为“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)
关于png - Aero 窗口上的 Autohotkey 透明 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22725285/