MsgBox带图标标题栏

MsgBox带图标标题栏

#Requires AutoHotkey v2.0.3+

MsgBox带图标标题栏(Text?, 标题?, 选项?, 图标文件?, 图标编号?)
MsgBox带图标标题栏( , , 'T3')
MsgBox带图标标题栏( , , 'T3', A_AhkPath)
MsgBox带图标标题栏( , , 'T3', 'DDORes.dll', 2)
MsgBox带图标标题栏( , , 'T3', 'DDORes.dll', 87)

; ===============================================================================================================================
; MsgBox带图标标题栏(Text?, 标题?, 选项?, 图标文件?, 图标编号?)
; 功能:           显示一个带图标的MsgBox窗口,图标位于标题栏中。
; 参数:           Text - (可选) 在MsgBox窗口中显示的文本。如果省略,将使用MsgBox函数的默认文本。
;                 标题 - (可选) MsgBox窗口的标题。如果省略,将默认为A_ScriptName。
;                 选项 - (可选) 用于内置MsgBox函数的选项字符串。
;                 图标文件 - (可选) 图标文件的名称,例如A_AhkPath或'shell32.dll'。如果省略,标题栏中将不显示图标。
;                 图标编号 - (可选) 要使用的图标组的编号。如果省略,默认为1。如果省略了图标文件,则忽略此参数。
; 返回值:         表示按下了哪个按钮的字符串。
; 全局变量:       无
; 依赖项:         无
; 要求版本:       AHK v2.0.3+
; 测试版本:       AHK v2.0.12 (U32/U64)
; 测试环境:       Win 10 Pro (x64)
; 作者:           iPhilip
; 论坛链接:       https://www.autohotkey.com/boards/viewtopic.php?f=83&t=128882
; 参考资料:       https://www.autohotkey.com/docs/v2/lib/MsgBox.htm
; ===============================================================================================================================

MsgBox带图标标题栏(Text?, 标题?, 选项?, 图标文件?, 图标编号?) 
{
   static CX图标   := SysGet(11)
   static CY图标   := SysGet(12)
   static CXSM图标 := SysGet(49)
   static CYSM图标 := SysGet(50)
   static WM_COMMNOTIFY := 0x0044
   static Msg编号 := DllCall('User32.dll\RegisterShellHookWindow', 'Ptr', A_ScriptHwnd, 'Int')
                 && DllCall('User32.dll\RegisterWindowMessageW', 'WStr', 'SHELLHOOK', 'UInt')
   
   if IsSet(图标文件) 
   {
      图标编号 := 图标编号 ?? 1
      h图标小 := LoadPicture(图标文件, 'w' CXSM图标 ' h' CYSM图标 ' Icon' 图标编号, &图像类型)
      h图标大   := LoadPicture(图标文件, 'w' CX图标   ' h' CY图标   ' Icon' 图标编号, &图像类型)
      OnMessage WM_COMMNOTIFY, 设置标题栏图标
      OnMessage Msg编号, Shell消息
   }
   return MsgBox(Text?, 标题?, 选项?)
   
   设置标题栏图标(*) 
   {
      static ICON小 := 0
      static ICON大   := 1
      static WM_SETICON := 0x0080
      
      隐藏窗口状态 := A_DetectHiddenWindows 
      DetectHiddenWindows true
      WinExist 'ahk_class #32770'
      SendMessage WM_SETICON, ICON小, h图标小
      SendMessage WM_SETICON, ICON大,   h图标大
      OnMessage WM_COMMNOTIFY, 设置标题栏图标, 0
      DetectHiddenWindows 隐藏窗口状态
   }
   
   Shell消息(wParam, lParam, *) 
   {
      static HSHELL_WINDOWCREATED   := 1
      static HSHELL_WINDOWDESTROYED := 2
      static hwnd
      
      if wParam = HSHELL_WINDOWCREATED
         hwnd := lParam
      else if wParam = HSHELL_WINDOWDESTROYED && lParam = hwnd 
      {
         DllCall('User32.dll\DestroyIcon', 'Ptr', h图标小, 'Int')
         DllCall('User32.dll\DestroyIcon', 'Ptr', h图标大,   'Int')
         OnMessage Msg编号, Shell消息, 0
      }
   }
}

给TA捐赠
共{{data.count}}人
人已捐赠
函数

RandomVar: 一个简单的随机字符串生成器

2024-2-22 11:23:44

教程

通过Acc库控制窗口控件

2020-7-9 10:11:48

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
有新私信 私信列表
搜索