#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
}
}
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。