以下是我发现的几个不错的示例

来源:https://www.autohotkey.com/boards/viewtopic.php?f=6&t=3851

 

非标准Gui系列1

; https://www.autohotkey.com/boards/viewtopic.php?p=54001#p54001

; 已知问题:在Win11下显示不正常
SetBatchLines -1
#SingleInstance Force

GuiW := 530 ; GUI WIDTH
GuiH := 340 ; GUI HEIGHT

Gui -Caption +Resize -DPIScale
Gui Margin, 0, 0
Gui Color, FFFFFF ; GUI COLOR

; Gui Add, Text, % " x" 11 " y" 4 " w" 16 " h" 16 " +BackgroundTrans gGuiIcon" ; GUI ICON TRIGGER
; Gui Add, Picture, % " x" 11 " y" 4 " w" 16 " h" 16 , %A_AhkPath% ; GUI ICON
Gui Add, Text, % " x" 11 " y" 4 " w" 16 " h" 16 " +BackgroundTrans gGuiIcon" ; GUI 图标触发器
Gui Add, Picture, % " x" 11 " y" 4 " w" 16 " h" 16 , %A_AhkPath% ; GUI 图标

Gui, Font, s9 c444444, Segoe UI ; SET FONT OPTIONS
Gui Add, Text, % " x" 1 " y" 2 " w" GuiW-20 " +Center +BackgroundTrans", Window Title ; GUI TITLE TEXT
Gui, Font ; RESET FONT OPTIONS

Gui Add, Text, % " x" GuiW-89 " y" 0 " w" 29 " h" 26 " +BackgroundTrans gGuiMinimize" ; GUI最小化触发器
Gui Add, Text, % " x" GuiW-30 " y" 0 " w" 29 " h" 26 " +BackgroundTrans gGuiClose" ; GUI关闭触发器
Gui Add, Text, % " x" 1 " y" 0 " w" GuiW-2 " h" 28 " +BackgroundTrans gGuiMove" ; GUI移动触发器

右上角最小化按钮加载(GuiW, Color:="555555")
; 右上角最大化按钮加载(GuiW, "BBBBBB")
右上角关闭按钮加载(GuiW, "555555")
 
Gui Add, Progress, % " x" 1 " y" GuiH-23 " w" GuiW-2 " h" 22 " Background0072C6 hwndhBar", 0 ; GUI STATUSBAR

Gui, Font, s8 cFFFFFF, Segoe UI ; SET FONT OPTIONS
  Gui Add, Text, % " x" 8 " y" GuiH-19 " w" GuiW-16 " +BackgroundTrans hwndhBarText", STATUSBAR TEXT ; GUI STATUSBAR TEXT
Gui, Font ; RESET FONT OPTIONS

Gui, Show, % " w" GuiW " h" GuiH, Office Style ; SHOW MAIN GUI

Return


GuiIcon:
  SendInput, !{Space}
Return

GuiMinimize:
  WinMinimize
Return
 
GuiMove:
  PostMessage, 0xA1, 2,,, A
return

GuiClose:
  ExitApp
Return

F1::
Loop 17
    GuiControl, +BackgroundC42B1C, % hXTC%A_Index%
Return

; 为了使用窗口阴影,需要禁止改变窗口大小
WM_SIZING(wParam, lParam) {
    Static init:=OnMessage(0x214, "WM_SIZING")
    WinActivate, ahk_class Shell_TrayWnd
}


右上角最小化按钮加载(GuiW, Color:="555555") {
    Global
    ; Gui Add, Progress, % " x" GuiW-80 " y" 8 " w" 9 " h" 2 " Background" Color " hwndhXTC1", 0 ; GUI 最小化
    Gui Add, Progress, % " x" GuiW-50 " y" 8 " w" 9 " h" 2 " Background" Color " hwndhXTC1", 0 ; GUI 最小化
}

右上角最大化按钮加载(GuiW, Color:="BBBBBB") {
    Gui Add, Progress, % " x" GuiW-50 " y" 4 " w" 11 " h" 2 " Background" Color, 0 ; GUI最大化顶部
    Gui Add, Progress, % " x" GuiW-50 " y" 12 " w" 11 " h" 2 " Background" Color, 0 ; GUI最大化底部
    Gui Add, Progress, % " x" GuiW-41 " y" 4 " w" 2 " h" 10 " Background" Color, 0 ; GUI最大化右侧
    Gui Add, Progress, % " x" GuiW-50 " y" 4 " w" 2 " h" 10 " Background" Color, 0 ; GUI最大化左侧
}

右上角关闭按钮加载(GuiW, Color:="555555") {
    Global
    Gui Add, Progress, % " x" GuiW-20 " y" 4 " w" 1 " h" 1 " Background" Color " hwndhXTC2", 0 ; GUI关闭左上角 01
    Gui Add, Progress, % " x" GuiW-21 " y" 5 " w" 3 " h" 1 " Background" Color " hwndhXTC3", 0 ; GUI关闭左上角 02
    Gui Add, Progress, % " x" GuiW-20 " y" 6 " w" 3 " h" 1 " Background" Color " hwndhXTC4", 0 ; GUI关闭左上角 03
    Gui Add, Progress, % " x" GuiW-13 " y" 4 " w" 1 " h" 1 " Background" Color " hwndhXTC5", 0 ; GUI关闭右上角 01
    Gui Add, Progress, % " x" GuiW-14 " y" 5 " w" 3 " h" 1 " Background" Color " hwndhXTC6", 0 ; GUI关闭右上角 02
    Gui Add, Progress, % " x" GuiW-15 " y" 6 " w" 3 " h" 1 " Background" Color " hwndhXTC7", 0 ; GUI关闭右上角 03
    Gui Add, Progress, % " x" GuiW-19 " y" 7 " w" 6 " h" 1 " Background" Color " hwndhXTC8", 0 ; GUI关闭中心 01
    Gui Add, Progress, % " x" GuiW-18 " y" 8 " w" 4 " h" 1 " Background" Color " hwndhXTC9", 0 ; GUI关闭中心 02
    Gui Add, Progress, % " x" GuiW-18 " y" 9 " w" 4 " h" 1 " Background" Color " hwndhXTC10", 0 ; GUI关闭中心 03
    Gui Add, Progress, % " x" GuiW-19 " y" 10 " w" 6 " h" 1 " Background" Color " hwndhXTC11", 0 ; GUI关闭中心 04
    Gui Add, Progress, % " x" GuiW-20 " y" 11 " w" 3 " h" 1 " Background" Color " hwndhXTC12", 0 ; GUI关闭左下 01
    Gui Add, Progress, % " x" GuiW-21 " y" 12 " w" 3 " h" 1 " Background" Color " hwndhXTC13", 0 ; GUI关闭左下 02
    Gui Add, Progress, % " x" GuiW-20 " y" 13 " w" 1 " h" 1 " Background" Color " hwndhXTC14", 0 ; GUI关闭左下 03
    Gui Add, Progress, % " x" GuiW-15 " y" 11 " w" 3 " h" 1 " Background" Color " hwndhXTC15", 0 ; GUI右下关闭 01
    Gui Add, Progress, % " x" GuiW-14 " y" 12 " w" 3 " h" 1 " Background" Color " hwndhXTC16", 0 ; GUI右下关闭 02
    Gui Add, Progress, % " x" GuiW-13 " y" 13 " w" 1 " h" 1 " Background" Color " hwndhXTC17", 0 ; GUI右下关闭 03
}

 

非标准Gui系列2

#NoEnv
#Warn
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
SetBatchLines -1

Menu Tray, Icon, shell32.dll, 131

Gui Body: New, LabelBody hWndhBody
Gui Color, White

Gui Add, Edit, x-1 y-1 w0 h0 ; Focus
Gui Font, s8 w700 cBlack, Segoe UI
Gui Add, Text, x10 y46 w187 h16, You re installing these programs.
Gui Font
Gui Font,, Segoe UI
Gui Add, Text, x10 y62 w456 h16 +0x200, As each item finishes, you can start using it while the others continue to install.
Gui Add, Text, x10 y80 w480 h1 0x10 ; Separator

If (FileExist(A_WinDir . "\System32\ieframe.dll")) {
    Gui Add, Picture, x24 y90 w16 h16 Icon40, ieframe.dll
}
Gui Add, Text, x48 y90 w100 h16 +0x200, Installed
Gui Add, Text, x48 y107 w100 h16 +0x200, Installing
Gui Add, Text, x48 y124 w100 h16 +0x200, 100`% downloaded

Gui Font, w700 c0x0080ff, Segoe UI
Gui Add, Text, x164 y90 w100 h16 +0x200, Start Messenger
Gui Font
Gui Font, s8 w700, Segoe UI
Gui Add, Text, x164 y107 w100 h16 +0x200, Writer
Gui Font
Gui Font, w700 cBlack, Segoe UI
Gui Add, Text, x164 y124 w100 h16 +0x200, Sign-in Assistant
Gui Font

Gui Font,, Segoe UI
Gui Add, Text, x336 y90 w120 h16 +0x200, Done
Gui Font
Gui Add, Progress, x335 y108 w120 h16 -Smooth, 5

Gui Font, w700 cBlack, Segoe UI
Gui Add, Text, x10 y224 w480 h16 +0x200, Select any additional products you want to install.
Gui Font
Gui Add, Text, x10 y243 w480 h2 0x10 ; Separator
Gui Font, w700, Segoe UI
Gui Add, CheckBox, x33 y253 w42 h23, Mail
Gui Add, CheckBox, x33 y282 w60 h23, Toolbar
Gui Add, CheckBox, x33 y311 w92 h23, Photo Gallery
Gui Add, CheckBox, x33 y342 w92 h23, Family Safety
Gui Font

Gui Font,, Segoe UI
Gui Add, Text, x78 y253 w410 h23 +0x200, (15 MB) - Access all your e-mail accounts in one place
Gui Add, Text, x95 y282 w393 h23 +0x200, (5 MB) - Search from any Web page
Gui Add, Text, x126 y311 w362 h23 +0x200, (13 MB) - Easily organize, edit, and share your photos and videos
Gui Add, Text, x126 y341 w364 h23 +0x200, (3 MB) - Help keep your family safe online

Gui Add, Button, x14 y376 w110 h23 Disabled, Add to installation
Gui Font, c0x0080ff, Segoe UI
Gui Add, Text, x10 y400 w263 h25 +0x200, Learn more about these products
Gui Font

Gui Add, Progress, x-1 y430 w502 h49 Border, 0
Gui Font,, Segoe UI
Gui Add, Button, x413 y439 w75 h23 gBodyClose, Cancel

Gui Show, w499 h471, Windows Live Installer

Gui Header: New, -Caption +Parent%hBody%
Gui Header: Color, 0x008EBC
Gui Header: Add, Picture, x24 y6 w28 h28 Icon131, shell32.dll
Gui Font, s14 c0xF3F8FB, Ms Shell Dlg 2
Gui Header: Add, Text, x54 y1 w394 h38 +0x200 BackgroundTrans, Windows Live
Gui Font
Gui Header: Show, x0 y0 w500 h38

Gui Info: New, -Caption +Parent%hBody%
Gui Info: Color, 0xFFFFE1
Gui Info: Font,, Segoe UI
Gui Info: Add, Picture, x4 y4 w16 h16 Icon222, shell32.dll
Gui Info: Add, Text, x25 y0 w480 h23 +0x200, Installation may take a few minutes. Feel free to do other things while you wait.
Gui Info: Font
Gui Info: Show, x10 y196 w480 h23
Return

BodyClose:
  ExitApp

 

非标准Gui系列3

#NoEnv
#SingleInstance, Force
SetBatchLines, -1
SetWinDelay, -1 ; 修改窗口后发生的延迟
SetControlDelay, -1 ; 修改控件后发生的延迟

Application := {} ; Create Application Object
Application.Name := "New AutoHotkey Script"
Application.Version := "0.1"

Window := {} ; Create Window Object
Window.Width := 600
Window.Height := 400
Window.Title := Application.Name

Gui, +LastFound -Resize -Caption -Border +HWNDhGui1 -DPIScale
Gui, Color, FFFFFF
Gui, Margin, 10, 10

; Window Border 【边界线】
Gui, Add, Text, % " x" 0 " y" 0 " w" 1 " h" Window.Height " +0x4E +HWNDhBorderLeft"
Gui, Add, Text, % " x" Window.Width-1 " y" 0 " w" 1 " h" Window.Height " +0x4E +HWNDhBorderRight"
Gui, Add, Text, % "x" 1 " y" Window.Height-1 " w" Window.Width-2 " h" 1 " +0x4E +HWNDhBorderBottom"
DllCall("SendMessage", "Ptr", hBorderLeft, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB("0072C6", 1, 1))
DllCall("SendMessage", "Ptr", hBorderRight, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB("0072C6", 1, 1))
DllCall("SendMessage", "Ptr", hBorderBottom, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB("0072C6", 1, 1))

; Window 标头
Gui, Add, Text, % "x" 1 " y" 0 " w" Window.Width-2 " h" 36 " +0x4E +HWNDhTitleHeader"
DllCall("SendMessage", "Ptr", hTitleHeader, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB("0173C7", 1, 1))

; Window Title
Gui, Font, s9 cFFFFFF, Segoe UI ; Set font options
Gui, Add, Text, % " x" 140 " y" 12 " w" Window.Width-280 " +BackgroundTrans +0x101 +HWNDhTitle", % Window.Title
Gui, Font ; Reset font options

; Window Minimize Button
Gui, Add, Picture, % " x" Window.Width-139 " y" 1 " w" 46 " h" 31 " +0x4E +HWNDhButtonMinimizeN Hidden0"
Gui, Add, Picture, % " x" Window.Width-139 " y" 1 " w" 46 " h" 31 " +0x4E +HWNDhButtonMinimizeH Hidden1"
Gui, Add, Picture, % " x" Window.Width-139 " y" 1 " w" 46 " h" 31 " +0x4E +HWNDhButtonMinimizeP Hidden1"

ButtonMinimize := "####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################@@@@@@@@@@####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################"

ButtonMinimizeN := 图标颜色转换(ButtonMinimize, "0173C7", "FFFFFF")
ButtonMinimizeH := 图标颜色转换(ButtonMinimize, "2A8AD4", "FFFFFF")
ButtonMinimizeP := 图标颜色转换(ButtonMinimize, "015C9F", "FFFFFF")

DllCall("SendMessage", "Ptr", hButtonMinimizeN, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB(ButtonMinimizeN, 46, 31))
DllCall("SendMessage", "Ptr", hButtonMinimizeH, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB(ButtonMinimizeH, 46, 31))
DllCall("SendMessage", "Ptr", hButtonMinimizeP, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB(ButtonMinimizeP, 46, 31))

; Window Maximize Button 【最大化按钮】
Gui, Add, Picture, % " x" Window.Width-93 " y" 1 " w" 46 " h" 31 " +0x4E +HWNDhButtonMaximizeN Hidden0"
Gui, Add, Picture, % " x" Window.Width-93 " y" 1 " w" 46 " h" 31 " +0x4E +HWNDhButtonMaximizeH Hidden1"
Gui, Add, Picture, % " x" Window.Width-93 " y" 1 " w" 46 " h" 31 " +0x4E +HWNDhButtonMaximizeP Hidden1"

ButtonMaximize := "##############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################@@@@@@@@@@####################################@########@####################################@########@####################################@########@####################################@########@####################################@########@####################################@########@####################################@########@####################################@########@####################################@@@@@@@@@@############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################"

ButtonMaximizeN := 图标颜色转换(ButtonMaximize, "0173C7", "FFFFFF")
ButtonMaximizeH := 图标颜色转换(ButtonMaximize, "2A8AD4", "FFFFFF")
ButtonMaximizeP := 图标颜色转换(ButtonMaximize, "015C9F", "FFFFFF")

DllCall("SendMessage", "Ptr", hButtonMaximizeN, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB(ButtonMaximizeN, 46, 31))
DllCall("SendMessage", "Ptr", hButtonMaximizeH, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB(ButtonMaximizeH, 46, 31))
DllCall("SendMessage", "Ptr", hButtonMaximizeP, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB(ButtonMaximizeP, 46, 31))

; Window Restore Button【恢复按钮】
Gui, Add, Picture, % " x" Window.Width-93 " y" 1 " w" 46 " h" 31 " +0x4E +HWNDhButtonRestoreN Hidden1"
Gui, Add, Picture, % " x" Window.Width-93 " y" 1 " w" 46 " h" 31 " +0x4E +HWNDhButtonRestoreH Hidden1"
Gui, Add, Picture, % " x" Window.Width-93 " y" 1 " w" 46 " h" 31 " +0x4E +HWNDhButtonRestoreP Hidden1"

ButtonRestore := "################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################@@@@@@@@######################################@######@####################################@@@@@@@@#@####################################@######@#@####################################@######@#@####################################@######@#@####################################@######@#@####################################@######@@@####################################@######@######################################@@@@@@@@##############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################"

ButtonRestoreN := 图标颜色转换(ButtonRestore, "0173C7", "FFFFFF")
ButtonRestoreH := 图标颜色转换(ButtonRestore, "2A8AD4", "FFFFFF")
ButtonRestoreP := 图标颜色转换(ButtonRestore, "015C9F", "FFFFFF")

DllCall("SendMessage", "Ptr", hButtonRestoreN, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB(ButtonRestoreN, 46, 31))
DllCall("SendMessage", "Ptr", hButtonRestoreH, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB(ButtonRestoreH, 46, 31))
DllCall("SendMessage", "Ptr", hButtonRestoreP, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB(ButtonRestoreP, 46, 31))

; Window Close Button
Gui, Add, Picture, % " x" Window.Width-47 " y" 1 " w" 46 " h" 31 " +0x4E +HWNDhButtonCloseN Hidden0"
Gui, Add, Picture, % " x" Window.Width-47 " y" 1 " w" 46 " h" 31 " +0x4E +HWNDhButtonCloseH Hidden1"
Gui, Add, Picture, % " x" Window.Width-47 " y" 1 " w" 46 " h" 31 " +0x4E +HWNDhButtonCloseP Hidden1"

ButtonClose := "##############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################-$######$-####################################$-$####$-$#####################################$-$##$-$#######################################$-$$-$#########################################$--$##########################################$--$#########################################$-$$-$#######################################$-$##$-$#####################################$-$####$-$####################################-$######$-############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################"

ButtonCloseN := 图标颜色转换(ButtonClose, "0173C7", "4096D5", "FFFFFF")
ButtonCloseH := 图标颜色转换(ButtonClose, "E81123", "EE4C59", "FFFFFF")
ButtonCloseP := 图标颜色转换(ButtonClose, "F1707A", "F4939B", "FFFFFF")

DllCall("SendMessage", "Ptr", hButtonCloseN, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB(ButtonCloseN, 46, 31))
DllCall("SendMessage", "Ptr", hButtonCloseH, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB(ButtonCloseH, 46, 31))
DllCall("SendMessage", "Ptr", hButtonCloseP, "UInt", 0x172, "Ptr", 0, "Ptr", CreateDIB(ButtonCloseP, 46, 31))

Gui, Show, % " w" Window.Width " h" Window.Height, % Window.Title

OnMessage(0x200, "WM_MOUSEMOVE")
OnMessage(0x201, "WM_LBUTTONDOWN")
OnMessage(0x202, "WM_LBUTTONUP")
OnMessage(0x2A3, "WM_MOUSELEAVE")

VarSetCapacity(TME, 16, 0), NumPut(16, TME, 0), NumPut(2, TME, 4), NumPut(hGui1, TME, 8)
return ; End automatic execution
; ==============================================================================


图标颜色转换(iconStr, BackgroundColor, ForeColor1, ForeColor2:="") {
    if (ForeColor2="") {
        StringReplace, iconStr, iconStr, #, %BackgroundColor%|, All
        StringReplace, iconStr, iconStr, @, %ForeColor1%|, All
    } else {
        StringReplace, iconStr, iconStr, #, %BackgroundColor%|, All
        StringReplace, iconStr, iconStr, $, %ForeColor1%|, All
        StringReplace, iconStr, iconStr, -, %ForeColor2%|, All
    }
    StringTrimRight, iconStr, iconStr, 1
    Return iconStr
}

; Labels =======================================================================
GuiSize:
  If (ErrorLevel = 1)
    return ; 窗口已最小化。无需采取任何行动。

  GuiControl, MoveDraw, %hTitleHeader%, % " w" A_GuiWidth-2
  GuiControl, MoveDraw, %hBorderLeft%, % " h" A_GuiHeight
  GuiControl, MoveDraw, %hBorderRight%, % " x"  A_GuiWidth-1 " h" A_GuiHeight
  GuiControl, MoveDraw, %hBorderBottom%, % " y" A_GuiHeight-1 " w" A_GuiWidth-2
  GuiControl, MoveDraw, %hTitle%, % " w" A_GuiWidth-280
  GuiControl, MoveDraw, %hButtonMinimizeN%, % " x" A_GuiWidth-139
  GuiControl, MoveDraw, %hButtonMinimizeH%, % " x" A_GuiWidth-139
  GuiControl, MoveDraw, %hButtonMinimizeP%, % " x" A_GuiWidth-139
  GuiControl, MoveDraw, %hButtonMaximizeN%, % " x" A_GuiWidth-93
  GuiControl, MoveDraw, %hButtonMaximizeH%, % " x" A_GuiWidth-93
  GuiControl, MoveDraw, %hButtonMaximizeP%, % " x" A_GuiWidth-93
  GuiControl, MoveDraw, %hButtonRestoreN%, % " x" A_GuiWidth-93
  GuiControl, MoveDraw, %hButtonRestoreH%, % " x" A_GuiWidth-93
  GuiControl, MoveDraw, %hButtonRestoreP%, % " x" A_GuiWidth-93
  GuiControl, MoveDraw, %hButtonCloseN%, % " x" A_GuiWidth-47
  GuiControl, MoveDraw, %hButtonCloseH%, % " x" A_GuiWidth-47
  GuiControl, MoveDraw, %hButtonCloseP%, % " x" A_GuiWidth-47
return

GuiClose:
ExitSub:
  ExitApp
return
; ==============================================================================

; Functions ====================================================================
WM_MOUSEMOVE(wParam, lParam, Msg, Hwnd) {
  Global

  DllCall("TrackMouseEvent", "UInt", &TME)

  MouseGetPos,,,, MouseCtrl, 2

  GuiControl, % (MouseCtrl = hButtonMinimizeN || MouseCtrl = hButtonMinimizeH) ? "Show" : "Hide", %hButtonMinimizeH%
  GuiControl, % (MouseCtrl = hButtonMaximizeN || MouseCtrl = hButtonMaximizeH) ? "Show" : "Hide", %hButtonMaximizeH%
  GuiControl, % (MouseCtrl = hButtonRestoreN || MouseCtrl = hButtonRestoreH) ? "Show" : "Hide", %hButtonRestoreH%
  GuiControl, % (MouseCtrl = hButtonCloseN || MouseCtrl = hButtonCloseH) ? "Show" : "Hide", %hButtonCloseH%
}

WM_LBUTTONDOWN(wParam, lParam, Msg, Hwnd) {
  Global
  If (MouseCtrl = hTitleHeader || MouseCtrl = hTitle)
    PostMessage, 0xA1, 2

  GuiControl, % (MouseCtrl = hButtonMinimizeH) ? "Show" : "Hide", %hButtonMinimizeP%
  GuiControl, % (MouseCtrl = hButtonMaximizeH) ? "Show" : "Hide", %hButtonMaximizeP%
  GuiControl, % (MouseCtrl = hButtonRestoreH) ? "Show" : "Hide", %hButtonRestoreP%
  GuiControl, % (MouseCtrl = hButtonCloseH) ? "Show" : "Hide", %hButtonCloseP%
}

WM_LBUTTONUP(wParam, lParam, Msg, Hwnd) {
  Global

  If (MouseCtrl = hButtonMinimizeP) {
    WinMinimize
  } Else If (MouseCtrl = hButtonMaximizeP || MouseCtrl = hButtonRestoreP) {
    WinGet, MinMaxStatus, MinMax

    If (MinMaxStatus = 1) {
      WinRestore
      GuiControl, Hide, %hButtonRestoreN%
    } Else {
      WinMaximize
      GuiControl, Show, %hButtonRestoreN%
    }
  } Else If (MouseCtrl = hButtonCloseP) {
    ExitApp
  } 

  GuiControl, Hide, %hButtonMinimizeP%
  GuiControl, Hide, %hButtonMaximizeP%
  GuiControl, Hide, %hButtonRestoreP%
  GuiControl, Hide, %hButtonCloseP%
}

WM_MOUSELEAVE(wParam, lParam, Msg, Hwnd) {
  Global

  GuiControl, Hide, %hButtonMinimizeH%
  GuiControl, Hide, %hButtonMaximizeH%
  GuiControl, Hide, %hButtonRestoreH%
  GuiControl, Hide, %hButtonCloseH%
  GuiControl, Hide, %hButtonMinimizeP%
  GuiControl, Hide, %hButtonMaximizeP%
  GuiControl, Hide, %hButtonRestoreP%
  GuiControl, Hide, %hButtonCloseP%
}

CreateDIB(Input, W, H, ResizeW := 0, ResizeH := 0, Gradient := 1 ) {
  WB := Ceil((W * 3) / 2) * 2, VarSetCapacity(BMBITS, (WB * H) + 1, 0), P := &BMBITS

  Loop, Parse, Input, |
    P := Numput("0x" . A_LoopField, P + 0, 0, "UInt") - (W & 1 && Mod(A_Index * 3, W * 3) = 0 ? 0 : 1)

  hBM := DllCall("CreateBitmap", "Int", W, "Int", H, "UInt", 1, "UInt", 24, "Ptr", 0, "Ptr")
  , hBM := DllCall("CopyImage", "Ptr", hBM, "UInt", 0, "Int", 0, "Int", 0, "UInt", 0x2008, "Ptr")
  , DllCall("SetBitmapBits", "Ptr", hBM, "UInt", WB * H, "Ptr", &BMBITS)

  If (Gradient != 1)
    hBM := DllCall("CopyImage", "Ptr", hBM, "UInt", 0, "Int", 0, "Int", 0, "UInt", 0x0008, "Ptr")

  return DllCall("CopyImage", "Ptr", hBM, "Int", 0, "Int", ResizeW, "Int", ResizeH, "Int", 0x200C, "UPtr")
}

 

非标准Gui系列4

; Script Information ===========================================================
; Name:        Material Design
; Description: Material Design inspired Gui
; AHK Version: 1.1.31.01 (Unicode 32-bit)
; OS Version:  Windows 10
; Language:    English (United States)
; Author:      Weston Campbell (TheDewd) <westoncampbell@gmail.com>
; Filename:    Material Design.ahk
; ==============================================================================

; Revision History =============================================================
; Revision 1 (2019-11-18)
; * Initial release
; ==============================================================================

; Auto-Execute =================================================================
#SingleInstance, Force ; Allow only one running instance of script
#Persistent ; Keep the script permanently running until terminated
#NoEnv ; Avoid checking empty variables for environment variables
;#Warn ; Enable warnings to assist with detecting common errors
;#NoTrayIcon ; Disable the tray icon of the script
#KeyHistory, 0 ; Keystroke and mouse click history
ListLines, Off ; The script lines most recently executed
SetWorkingDir, % A_ScriptDir ; Set the working directory of the script
SetBatchLines, -1 ; The speed at which the lines of the script are executed
SendMode, Input ; The method for sending keystrokes and mouse clicks
;DetectHiddenWindows, On ; The visibility of hidden windows by the script
SetWinDelay, 0 ; The delay to occur after modifying a window
SetControlDelay, 0 ; The delay to occur after modifying a control
OnExit("OnUnload") ; Run a subroutine or function when exiting the script

return ; End automatic execution
; ==============================================================================

; Labels =======================================================================
; TBD
; ==============================================================================

; Functions ====================================================================
OnLoad() {
  Global ; Assume-global mode
  Static Init := OnLoad() ; Call function

  Menu, Tray, Tip, New AutoHotkey Script

  ; GDI+ Startup
  hGdip := DllCall("Kernel32.dll\LoadLibrary", "Str", "Gdiplus.dll") ; Load module
  VarSetCapacity(GdiplusStartupInput, (A_PtrSize = 8 ? 24 : 16), 0) ; GdiplusStartupInput structure
  NumPut(1, GdiplusStartupInput, 0, "UInt") ; GdiplusVersion
  DllCall("Gdiplus.dll\GdiplusStartup", "PtrP", pToken, "Ptr", &GdiplusStartupInput, "Ptr", 0) ; Initialize GDI+

  TitleIcon := "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEVHcEz///+flKJDAAAAAXRSTlMAQObYZgAAAB9JREFUeAFj+FfP0OSIhIBcBhD5z5GBwRFIIssCFQMAWZEOVjbFLUEAAAAASUVORK5CYII="
  ButtonMinimize := "iVBORw0KGgoAAAANSUhEUgAAAC0AAAAdAQMAAAAErnd0AAAABlBMVEVHcEz///+flKJDAAAAAXRSTlMAQObYZgAAAA9JREFUeAFjoAeof0APWwCLxQFgXVzsZwAAAABJRU5ErkJggg=="
  ButtonMaximize := "iVBORw0KGgoAAAANSUhEUgAAAC0AAAAdAQMAAAAErnd0AAAABlBMVEVHcEz///+flKJDAAAAAXRSTlMAQObYZgAAABZJREFUeAFjoBjUPwBTDgokUzDtVAIAW/YFvwYcJbMAAAAASUVORK5CYII="
  ButtonRestore := "iVBORw0KGgoAAAANSUhEUgAAAC0AAAAdAQMAAAAErnd0AAAABlBMVEVHcEz///+flKJDAAAAAXRSTlMAQObYZgAAACJJREFUeAFjoBjIPwBTAgpgqn4BmHLARz2AUA0QDUCKOgAAgGoIrt5ErioAAAAASUVORK5CYII="
  ButtonClose := "iVBORw0KGgoAAAANSUhEUgAAAC0AAAAdAgMAAABDDg2kAAAACVBMVEVHcEz////////mcEUwAAAAAnRSTlMATAn5wIMAAAAtSURBVHgBYxgwoMIggeBIMqQgOGyOExAcxmkOSJoyGTA5CGWYBiCMRlg6OAAAS1UFoW2zwNkAAAAASUVORK5CYII="
  ButtonHoverLight := "iVBORw0KGgoAAAANSUhEUgAAAC0AAAAdAQMAAAAErnd0AAAABlBMVEX///9HcExwQjx2AAAAAnRSTlMPAPEL0fcAAAA/SURBVHgBY/gPAj8wqAf1YIqBH0T9Y2AHUX8YmIEUEDGCqA8MDJjUAwaGeqIoTO1Qo6EWQa2FOQLhJCDAQQEA9kh/fLXD4JsAAAAASUVORK5CYII="
  ButtonHoverDark := "iVBORw0KGgoAAAANSUhEUgAAAC0AAAAdCAYAAAA+YOU3AAAAW0lEQVR4Ae3XtxGAMADAQAZgLvIw7F9BRXQrR3Gn/gHHbty34hJdJPp8+lAMGoCSL8CDATgPBuA8GIAnAt+JLhLNg+8KQYsWLdp1WrQHJgDuJYCGe7FNkGgi0QdIuLX5HAI62QAAAABJRU5ErkJggg=="

  hBMPTitleIcon := GdipCreateHBITMAPFromBase64(TitleIcon)
  hBMPButtonMinimize := GdipCreateHBITMAPFromBase64(ButtonMinimize)
  hBMPButtonMaximize := GdipCreateHBITMAPFromBase64(ButtonMaximize)
  hBMPButtonRestore := GdipCreateHBITMAPFromBase64(ButtonRestore)
  hBMPButtonClose := GdipCreateHBITMAPFromBase64(ButtonClose)

  BMPButtonHoverLight := GdipCreateBitmapFromBase64(ButtonHoverLight)
  BMPButtonHoverDark := GdipCreateBitmapFromBase64(ButtonHoverDark)
  BMPButtonMinimize := GdipCreateBitmapFromBase64(ButtonMinimize)
  BMPButtonMaximize := GdipCreateBitmapFromBase64(ButtonMaximize)
  BMPButtonRestore := GdipCreateBitmapFromBase64(ButtonRestore)
  BMPButtonClose := GdipCreateBitmapFromBase64(ButtonClose)

  hBMPMinimizeHover := GdipCreateHBITMAPFromBitmap(GdiBitmapMerge(BMPButtonHoverLight, BMPButtonMinimize))
  hBMPMaximizeHover := GdipCreateHBITMAPFromBitmap(GdiBitmapMerge(BMPButtonHoverLight, BMPButtonMaximize))
  hBMPRestoreHover := GdipCreateHBITMAPFromBitmap(GdiBitmapMerge(BMPButtonHoverLight, BMPButtonRestore))
  hBMPCloseHover := GdipCreateHBITMAPFromBitmap(GdiBitmapMerge(BMPButtonHoverLight, BMPButtonClose))

  ButtonState := []
  ButtonState["Minimize"] := 0
  ButtonState["Maximize"] := 0
  ButtonState["Restore"] := 0
  ButtonState["Close"] := 0
}

OnUnload(ExitReason, ExitCode) {
  Global ; Assume-global mode

  ; Clean up resources used by GDI+
  DllCall("Gdiplus.dll\GdiplusShutdown", "Ptr", pToken)
}

GdipCreateBitmapFromBase64(B64) {
  VarSetCapacity(B64Len, 0)
  DllCall("Crypt32.dll\CryptStringToBinary", "Ptr", &B64, "UInt", StrLen(B64), "UInt", 0x01, "Ptr", 0, "UIntP", B64Len, "Ptr", 0, "Ptr", 0)
  VarSetCapacity(B64Dec, B64Len, 0) ; pbBinary size
  DllCall("Crypt32.dll\CryptStringToBinary", "Ptr", &B64, "UInt", StrLen(B64), "UInt", 0x01, "Ptr", &B64Dec, "UIntP", B64Len, "Ptr", 0, "Ptr", 0)
  pStream := DllCall("Shlwapi.dll\SHCreateMemStream", "Ptr", &B64Dec, "UInt", B64Len, "UPtr")
  VarSetCapacity(pBitmap, 0)
  DllCall("Gdiplus.dll\GdipCreateBitmapFromStreamICM", "Ptr", pStream, "PtrP", pBitmap)
  ObjRelease(pStream)
  return pBitmap
}

GdipCreateHBITMAPFromBitmap(pBitmap) {
  VarSetCapacity(hBitmap, 0)
  DllCall("Gdiplus.dll\GdipCreateHBITMAPFromBitmap", "UInt", pBitmap, "UInt*", hBitmap, "Int", 0XFFFFFFFF)
  return hBitmap
}

GdipCreateHICONFromBitmap(pBitmap) {
  VarSetCapacity(hIcon, 0)
  DllCall("Gdiplus.dll\GdipCreateHICONFromBitmap", "Ptr", pBitmap, "PtrP", hIcon, "UInt", 0)
  return hIcon
}

GdipCreateHBITMAPFromBase64(B64) {
  pBitmap := GdipCreateBitmapFromBase64(B64)
  return GdipCreateHBITMAPFromBitmap(pBitmap)
}

GuiCreate() {
  Global ; Assume-global mode
  Static Init := GuiCreate() ; Call function

  ; Window Options -----------------------------------------------------------
  Gui, +LastFound -Resize -Caption -Border +HWNDhMaterialDesign +MinSize800x600
  Gui, Margin, 0, 0

  ; Window Border ------------------------------------------------------------
  Gui, Add, Text, x0 y0 w800 h1 +0x4E HWNDhBorderTop
  Gui, Add, Text, x0 y599 w800 h1 +0x4E HWNDhBorderBottom
  Gui, Add, Text, x0 y1 w1 h598 +0x4E HWNDhBorderLeft
  Gui, Add, Text, x799 y1 w1 h598 +0x4E HWNDhBorderRight

  ; Titlebar -----------------------------------------------------------------
  Gui, Add, Text, x1 y1 w798 h30 +0x4E HWNDhTitlebar
  Gui, Add, Picture, x8 y8 w16 h16 HWNDhTitleIcon +BackgroundTrans, % "HBITMAP:*" hBMPTitleIcon
  Gui, Add, Text, x1 y31 w798 h1 +0x4E HWNDhTitlebarLine
  Gui, Font, s9 cFFFFFF, Segoe UI
  Gui, Add, Text, x30 y1 h30 w400 0x200 HWNDhTitlebarText +BackgroundTrans, Application

  ; Window Controls ----------------------------------------------------------
  Gui, Add, Picture, x662 y1 w45 h29 HWNDhButtonMinimize +BackgroundTrans, % "HBITMAP:*" hBMPButtonMinimize
  Gui, Add, Picture, x708 y1 w45 h29 HWNDhButtonMaximize +BackgroundTrans, % "HBITMAP:*" hBMPButtonMaximize
  Gui, Add, Picture, x754 y1 w45 h29 HWNDhButtonClose +BackgroundTrans, % "HBITMAP:*" hBMPButtonClose

  ; Appbar -------------------------------------------------------------------
  Gui, Add, Text, x1 y32 w798 h64 +0x4E HWNDhAppbar

  ; Body ---------------------------------------------------------------------
  Gui, Add, Text, x1 y96 w200 h504 +0x4E HWNDhPanelLeft
  Gui, Add, Text, x201 y96 w1 h504 +0x4E HWNDhDividerVert
  Gui, Add, Text, x202 y96 w597 h504 +0x4E HWNDhPanelRight

  ;Gui, Font, s18 c000000
  ;Gui, Add, Text, x1 y700 +BackgroundTrans, TEST

  CreatePixel(hBorderTop, "2E81D3")
  CreatePixel(hBorderBottom, "2E81D3")
  CreatePixel(hBorderLeft, "2E81D3")
  CreatePixel(hBorderRight, "2E81D3")
  CreatePixel(hTitlebar, "0069C0")
  CreatePixel(hTitlebarLine, "48A8F4")
  CreatePixel(hAppbar, "2196F3")
  CreatePixel(hPanelLeft, "FAFAFA")
  CreatePixel(hDividerVert, "D2D2D2")
  CreatePixel(hPanelRight, "F5F5F5")

  Gui, Show, w800 h600, Example
}

GuiSize(GuiHwnd, EventInfo, Width, Height) {
  Global ; Assume-global mode

  If (ErrorLevel = 1) { ; Window minimized
    return
  }

  GuiControl, Move, % hBorderTop, % "w" Width " h1"
  GuiControl, Move, % hBorderBottom, % "y" Height - 1 " w" Width
  GuiControl, Move, % hBorderLeft, % "h" Height - 2
  GuiControl, Move, % hBorderRight, % "x" Width - 1 " h" Height - 2
  GuiControl, Move, % hTitlebar, % "w" Width - 2
  GuiControl, Move, % hTitlebarText, % "w" Width - 170
  GuiControl, Move, % hTitlebarLine, % "w" Width - 2
  GuiControl, Move, % hAppbar, % "w" Width - 2
  GuiControl, Move, % hPanelLeft, % "h" Height - 97
  GuiControl, Move, % hPanelRight, % "w" Width - 204 " h" Height - 97
  GuiControl, Move, % hDividerVert, % "h" Height - 97

  GuiControl, MoveDraw, % hButtonClose, % "x" Width - 46
  GuiControl, MoveDraw, % hButtonMaximize, % "x" Width - 92
  GuiControl, MoveDraw, % hButtonMinimize, % "x" Width - 138
}

GuiEscape(GuiHwnd) {
  ExitApp ; Terminate the script unconditionally
}

GuiClose(GuiHwnd) {
  ExitApp ; Terminate the script unconditionally
}

WM_SIZE(wParam, lParam, Msg, Hwnd) {
  Global ; Assume-global mode
  Static Init := OnMessage(0x0005, "WM_SIZE") ; Call function

  If (A_Gui = 1) {
    Width := lParam & 0xFFFF, Height := lParam >> 16

    WinGet, WinMax, MinMax

    If (WinMax = 1) {
      GuiControl,, % hButtonMaximize, % "HBITMAP:*" hBMPButtonRestore
    } Else If (WinMax = 0) {
      GuiControl,, % hButtonMaximize, % "HBITMAP:*" hBMPButtonMaximize
    }
  }
}

WM_MOUSEMOVE(wParam, lParam, Msg, Hwnd) {
  Global ; Assume-global mode
  Static Init := OnMessage(0x0200, "WM_MOUSEMOVE")

  MouseGetPos, MouseX, MouseY, MouseWin, MouseCtl, 2

  VarSetCapacity(TME, 16, 0)
  NumPut(16, TME, 0)
  NumPut(2, TME, 4) ; TME_LEAVE
  NumPut(MouseWin, TME, 8)

  DllCall("User32.dll\TrackMouseEvent", "UInt", &TME)

  If (MouseCtl = hButtonMinimize && ButtonState["Minimize"] <> 1) {
    GuiControl,, % hButtonMinimize, % "HBITMAP:*" hBMPMinimizeHover
    ButtonState["Minimize"] := 1
  } Else If (MouseCtl <> hButtonMinimize && ButtonState["Minimize"] = 1) {
    GuiControl,, % hButtonMinimize, % "HBITMAP:*" hBMPButtonMinimize
    ButtonState["Minimize"] := 0
  }

  If (MouseCtl = hButtonMaximize) {
    WinGet, WinMax, MinMax

    If (WinMax = 1 && ButtonState["Restore"] <> 1) {
      GuiControl,, % hButtonMaximize, % "HBITMAP:*" hBMPRestoreHover
      ButtonState["Restore"] := 1
    } Else If (WinMax <> 1 && ButtonState["Maximize"] <> 1) {
      GuiControl,, % hButtonMaximize, % "HBITMAP:*" hBMPMaximizeHover
      ButtonState["Maximize"] := 1
    }
  } Else If (MouseCtl <> hButtonMaximize) {
    WinGet, WinMax, MinMax

    If (WinMax = 1 && ButtonState["Restore"] = 1) {
      GuiControl,, % hButtonMaximize, % "HBITMAP:*" hBMPButtonRestore
      ButtonState["Restore"] := 0
    } Else If (WinMax <> 1 && ButtonState["Maximize"] = 1) {
      GuiControl,, % hButtonMaximize, % "HBITMAP:*" hBMPButtonMaximize
      ButtonState["Maximize"] := 0
    }
  }

  If (MouseCtl = hButtonClose && ButtonState["Close"] <> 1) {
    GuiControl,, % hButtonClose, % "HBITMAP:*" hBMPCloseHover
    ButtonState["Close"] := 1
  } Else If (MouseCtl <> hButtonClose && ButtonState["Close"] = 1) {
    GuiControl,, % hButtonClose, % "HBITMAP:*" hBMPButtonClose
    ButtonState["Close"] := 0
  }
}

WM_MOUSELEAVE(wParam, lParam, Msg, Hwnd) {
  Global ; Assume-global mode
  Static Init := OnMessage(0x02A3, "WM_MOUSELEAVE")

  If (ButtonState["Minimize"] <> 0) {
    GuiControl,, % hButtonMinimize, % "HBITMAP:*" hBMPButtonMinimize
    ButtonState["Minimize"] := 0
  } Else If (ButtonState["Maximize"] <> 0) {
    GuiControl,, % hButtonMaximize, % "HBITMAP:*" hBMPButtonMaximize
    ButtonState["Maximize"] := 0
  } Else If (ButtonState["Restore"] <> 0) {
    GuiControl,, % hButtonMaximize, % "HBITMAP:*" hBMPButtonRestore
    ButtonState["Restore"] := 0
  } Else If (ButtonState["Close"] <> 0) {
    GuiControl,, % hButtonClose, % "HBITMAP:*" hBMPButtonClose
    ButtonState["Close"] := 0
  }
}

WM_LBUTTONDOWN(wParam, lParam, Msg, Hwnd) {
  Global ; Assume-global mode
  Static Init := OnMessage(0x0201, "WM_LBUTTONDOWN") ; Call function

  If (A_Gui = 1) {
    If (MouseCtl = hTitleIcon) {
      PostMessage, 0x112, 0xF100, 0x20 ; WM_SYSCOMMAND := 0x112 ;SC_KEYMENU := 0xF100
    } Else If (MouseCtl = hTitlebarText) {
      PostMessage, 0xA1, 2 ; 0xA1 := WM_NCLBUTTONDOWN / 2 := HTCAPTION
    }
  }
}

WM_LBUTTONUP(wParam, lParam, Msg, Hwnd) {
  Global ; Assume-global mode
  Static Init := OnMessage(0x0202, "WM_LBUTTONUP")

  If (A_Gui = 1) {
    If (MouseCtl = hButtonClose) {
      ExitApp
    } Else If (MouseCtl = hButtonMaximize) {
      WinGet, WinMax, MinMax

      If (WinMax = 1) {
        WinRestore
      } Else If (WinMax = 0) {
        Gui, +Caption
        WinMaximize
        Gui, -Caption
      }
    } Else If (MouseCtl = hButtonMinimize) {
      WinMinimize
    }
  }
}

WM_RBUTTONUP(wParam, lParam, Msg, Hwnd) {
  Global ; Assume-global mode
  Static Init := OnMessage(0x0205, "WM_RBUTTONUP") ; Call function

  If (A_Gui = 1) {
    If (MouseCtl = hTitleIcon) {
      PostMessage, 0x112, 0xF100, 0x20 ; SysMenu
    }
  }
}

WM_LBUTTONDBLCLK(wParam, lParam, Msg, Hwnd) {
  Global ; Assume-global mode
  Static Init := OnMessage(0x0203, "WM_LBUTTONDBLCLK")

  If (A_Gui = 1) {
    If (MouseCtl = hTitlebarText) {
      WinGet, WinMax, MinMax

      If (WinMax = 1) {
        WinRestore
      } Else If (WinMax = 0) {
        Gui, +Caption
        WinMaximize
        Gui, -Caption
      }
    }
  }
}

WM_NCHITTEST(wParam, lParam, Msg, Hwnd) { ; Define sizing borders
  Static Init := OnMessage(0x0084, "WM_NCHITTEST") ; Call function
  Static BSZ := 6 ; Border Size

  If (A_Gui = 1)	{
    WinGetPos, gX, gY, gW, gH

    X := (lParam << 48 >> 48)
    Y := (lParam << 32 >> 48)

    HL := (X < (gX + BSZ))
    HR := (X >= ((gX + gW) - BSZ))
    HT := (Y < (gY + BSZ))
    HB := (Y >= ((gY + gH) - BSZ))

    ; Enable window resizing
    If (HL || HR || HT || HB)
    || (HT & HL || HT & HR || HB & HL || HB & HR) {
      WinGet, Style, Style

      If !(Style & 0x40000) {
        Gui, +Resize
      }
    }

    If (HT) {
      return (HL ? 0xD : HR ? 0xE : 0xC)
    } Else If (HB) {
      return (HL ? 0x10 : HR ? 0x11 : 0xF)
    } Else If (HL) {
      return 0xA
    } Else If (HR) {
      return 0xB
    }
  }
}

WM_NCCALCSIZE(wParam, lParam, Msg, Hwnd) { ; Size the client area to fill entire window
  Static Init := OnMessage(0x0083, "WM_NCCALCSIZE") ; Call function

  If (A_Gui = 1) {
    return 0
  }
}

WM_NCACTIVATE(wParam, lParam, Msg, Hwnd) { ; Prevent drawing border when activating window
  Static Init := OnMessage(0x0086, "WM_NCACTIVATE") ; Call function

  If (A_Gui = 1) {
    return 1
  }
}

CreatePixel(HWND, HexColor) {
  hBitmap := DllCall("Gdi32.dll\CreateBitmap", "Int", 1, "Int", 1, "UInt", 1, "UInt", 24, "Ptr", 0, "Ptr")
  hBM := DllCall("User32.dll\CopyImage", "Ptr", hBitmap, "UInt", 0, "Int", 0, "Int", 0, "UInt", 8, "Ptr")
  VarSetCapacity(BMBITS, 5, 0)
  Numput("0x" HexColor, &BMBITS, 0, "UInt")
  DllCall("Gdi32.dll\SetBitmapBits", "Ptr", hBM, "UInt", 4, "Ptr", &BMBITS)
  DllCall("User32.dll\SendMessage", "Ptr", HWND, "UInt", 0x0172, "Ptr", 0, "Ptr", hBM, "Ptr")
  DllCall("Gdi32.dll\DeleteObject", "Ptr", hBitmap)
}

GdiBitmapMerge(Bitmap1, Bitmap2) {
  DllCall("Gdiplus.dll\GdipGetImageWidth", "UPtr", Bitmap1, "UInt*", Width)
  DllCall("Gdiplus.dll\GdipGetImageHeight", "UPtr", Bitmap1, "UInt*", Height)
  DllCall("Gdiplus.dll\GdipCreateBitmapFromScan0", "Int", Width, "Int", Height, "Int", 0, "Int", 0x26200A, "UPtr", 0, "UPtr*", BitmapNew)
  DllCall("Gdiplus.dll\GdipGetImageGraphicsContext", "UPtr", BitmapNew, "UPtr*", pGraphics)
  DllCall("Gdiplus.dll\GdipDrawImageRectRect", "Ptr", pGraphics, "Ptr", Bitmap1, "Float", 0, "Float", 0, "Float", Width, "Float", Height, "Float", 0, "Float", 0, "Float", Width, "Float", Height, "Int", 2, "Ptr", 0, "Ptr", 0, "Ptr", 0)
  DllCall("Gdiplus.dll\GdipDrawImageRectRect", "Ptr", pGraphics, "Ptr", Bitmap2, "Float", 0, "Float", 0, "Float", Width, "Float", Height, "Float", 0, "Float", 0, "Float", Width, "Float", Height, "Int", 2, "Ptr", 0, "Ptr", 0, "Ptr", 0)
  DllCall("Gdiplus.dll\GdipDeleteGraphics", "UPtr", pGraphics)
  return BitmapNew
}
; ==============================================================================

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。