炫彩WinApi类

package
v0.0.0-...-c3b73c6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 11, 2024 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

Package wapi 封装了windows系统的api.

Index

Constants

View Source
const (
	IMAGE_BITMAP = 0 // 加载位图
	IMAGE_ICON   = 1 // 加载图标
	IMAGE_CURSOR = 2 // 加载游标
)
View Source
const (
	LR_CREATEDIBSECTION = 0x00002000 // 当 uType 参数指定 IMAGE_BITMAP 时,会导致函数返回 DIB 节位图而不是兼容的位图。 此标志可用于加载位图而不将其映射到显示设备的颜色。
	LR_DEFAULTCOLOR     = 0          // 默认标志;它不执行任何工作。 它的意思是“不 LR_MONOCHROME ”。
	LR_DEFAULTSIZE      = 0x00000040 // 如果 cxDesired 或 cyDesired 值设置为零,则使用游标或图标的系统指标值指定的宽度或高度。 如果未指定此标志,并且 cxDesired 和 cyDesired 设置为零,则函数将使用实际资源大小。 如果资源包含多个图像,则 函数使用第一个图像的大小。
	LR_LOADFROMFILE     = 0x00000010 // 从 名称 (图标、光标或位图文件指定的文件) 加载独立图像。

	// 在颜色表中搜索图像,并将以下灰色底纹替换为相应的三维颜色
	//	- Dk 灰色,RGB (128,128,128) 与 COLOR_3DSHADOW
	//	- 灰色,RGB (192,192,192) ,带 COLOR_3DFACE
	//	- Lt Gray,RGB (223,223,223) 与 COLOR_3DLIGHT
	LR_LOADMAP3DCOLORS = 0x00001000

	// 检索图像中第一个像素的颜色值,并将颜色表中的相应条目替换为默认窗口颜色 (COLOR_WINDOW) 。 图像中使用该条目的所有像素都将成为默认的窗口颜色。 此值仅适用于具有相应颜色表的图像。
	//
	// 如果要加载颜色深度大于 8bpp 的位图,请不要使用此选项。
	//
	// 如果 fuLoad 同时包含 LR_LOADTRANSPARENT 值和 LR_LOADMAP3DCOLORS 值, LR_LOADTRANSPARENT 优先。 但是,颜色表条目将替换为 COLOR_3DFACE 而不是 COLOR_WINDOW。
	LR_LOADTRANSPARENT = 0x00000020
	LR_MONOCHROME      = 0x00000001 // 加载黑白图像。

	// 如果多次加载映像,则共享映像句柄。 如果未设置 LR_SHARED ,则对同一资源的第二次 LoadImageW 调用将再次加载映像并返回不同的句柄。
	//
	// 使用此标志时,系统将在不再需要资源时销毁资源。
	//
	// 对于非标准大小、加载后可能会更改或从文件加载的图像,请勿使用 LR_SHARED 。
	//
	// 加载系统图标或光标时,必须使用 LR_SHARED 否则函数将无法加载资源。
	//
	// 无论请求的大小如何,此函数都会查找缓存中具有请求的资源名称的第一个映像。
	LR_SHARED   = 0x00008000
	LR_VGACOLOR = 0x00000080 // 使用真正的 VGA 颜色。
)
View Source
const (
	NULL  = "\x00"
	NULL2 = NULL + NULL // 2个 NULL
)

Variables

This section is empty.

Functions

func DispatchMessage

func DispatchMessage(pMsg *MSG) int

DispatchMessage 向窗口过程发送消息。它通常用于发送由 GetMessage 函数检索到的消息。

@Description: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-DispatchMessageW.
@param pMsg 指向包含消息的结构的指针。
@return int 返回值指定窗口过程返回的值。尽管它的含义取决于所发送的消息,但返回值通常会被忽略。

func DragFinish

func DragFinish(hDrop uintptr)

DragFinish 释放系统分配用于将文件名传输到应用程序的内存.

@Description 详见: https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-DragFinish.
@param hDrop 句柄.

func GetMessage

func GetMessage(pMsg *MSG, hWnd uintptr, wMsgFilterMin uint32, wMsgFilterMax uint32) int32

GetMessage 从调用线程的消息队列中检索消息。应用程序通常使用返回值来确定是否结束主消息循环并退出程序。该函数分派传入的已发送消息,直到发布的消息可用于检索。 与 GetMessage 不同, PeekMessage 函数在返回之前不会等待消息发布。

@Description: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-GetMessageW.
@param pMsg 指向从线程的消息队列接收消息信息的 MSG 结构的指针。
@param hWnd 要检索其消息的窗口的句柄。窗口必须属于当前线程。如果hWnd为0, GetMessage 检索属于当前线程的任何窗口的消息,以及当前线程的消息队列中hwnd值为0的任何消息(参见 MSG 结构)。因此,如果hWnd为0,则同时处理窗口消息和线程消息。如果hWnd为-1, GetMessage 仅检索当前线程的消息队列中hwnd值为0的消息,即 PostMessage (当hWnd参数为0时)或 PostThreadMessage 发布的线程消息。
@param wMsgFilterMin 要检索的最低消息值的整数值。使用WM_KEYFIRST (0x0100) 指定第一条键盘消息或WM_MOUSEFIRST (0x0200) 指定第一条鼠标消息。
@param wMsgFilterMax 要检索的最高消息值的整数值。使用WM_KEYLAST指定最后一个键盘消息或WM_MOUSELAST指定最后一个鼠标消息。
@return int32 如果函数检索到 WM_QUIT 以外的消息,则返回值非零。如果函数检索到 WM_QUIT 消息,则返回值为零。如果有错误,返回值为-1。

func RegisterWindowMessageW

func RegisterWindowMessageW(lpString string) int

RegisterWindowMessageW 定义保证在整个系统中唯一的新窗口消息。 发送或发布消息时可以使用消息值.

详见: https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-RegisterWindowMessageW.
@param lpString 要注册的消息。
@return int 如果成功注册消息,则返回值是范围0xC000到0xFFFF的消息标识符. 如果函数失败,则返回值为零.

func TranslateMessage

func TranslateMessage(pMsg *MSG) bool

TranslateMessage 将虚拟键消息转换为字符消息。字符消息被发布到调用线程的消息队列中,以便在线程下次调用 GetMessage 或 PeekMessage 函数时读取。

@Description: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-TranslateMessage.
@param pMsg 一个指向 MSG 结构的指针,该结构包含使用 GetMessage 或 PeekMessage 函数从调用线程的消息队列中检索到的消息信息。
@return bool

func XCloseHandle

func XCloseHandle(对象句柄 uintptr) bool

CloseHandle 关闭一个内核对象.

详情: https://learn.microsoft.com/zh-cn/windows/win32/api/handleapi/nf-handleapi-closehandle.
@param handle 对象句柄.
@return int

func X全局内存分配

func X全局内存分配(内存分配属性 GMEM_, 字节数 uint) uintptr

GlobalAlloc 从堆中分配指定数量的字节.

@Description 详情: https://docs.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-GlobalAlloc.
@param uFlags 内存分配属性。如果指定为零,则默认为 GMEM_Fixed. 该参数可以是以下值中的一个或多个: wapi.GMEM_ .
@param dwBytes 要分配的字节数。如果此参数为0并且uFlags参数指定 GMEM_Moveable ,则该函数返回标记为已丢弃的内存对象的句柄.
@return uintptr 如果函数成功,则返回值是新分配的内存对象的句柄. 如果函数失败,则返回值为NULL.

func X全局内存对象关闭

func X全局内存对象关闭(内存对象句柄 uintptr) uintptr

GlobalFree 释放指定的全局内存对象并使其句柄无效.

@Description 详情: https://docs.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-GlobalFree.
@param hMem 全局内存对象的句柄. 此句柄由 GlobalAlloc 或 GlobalReAlloc 函数返回. 释放使用 LocalAlloc 分配的内存是不安全的.
@return uintptr 如果函数成功, 则返回值为NULL. 如果函数失败, 则返回值等于全局内存对象的句柄.

func X全局内存对象取大小

func X全局内存对象取大小(内存对象句柄 uintptr) uint

GlobalSize 检索指定全局内存对象的当前大小,以字节为单位.

@Description 内存块的大小可能大于分配内存时请求的大小. 要验证指定对象的内存块是否未被丢弃, 请在调用 GlobalSize 之前使用 GlobalFlags 函数.
详情: https://docs.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-GlobalSize.
@param hMem 全局内存对象的句柄。此句柄由 GlobalAlloc 或 GlobalReAlloc 函数返回.
@return uint64 如果函数成功,则返回值是指定全局内存对象的大小,以字节为单位. 如果指定的句柄无效或对象已被丢弃,则返回值为0.

func X全局内存对象解锁

func X全局内存对象解锁(内存对象句柄 uintptr) bool

GlobalUnlock 减少与使用 GMEM_Moveable 分配的内存对象关联的锁计数。此函数对使用 GMEM_Fixed 分配的内存对象没有影响.

@Description 详情: https://docs.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-GlobalUnlock.
@param hMem 全局内存对象的句柄。此句柄由 GlobalAlloc 或 GlobalReAlloc 函数返回.
@return bool

func X全局内存对象锁定

func X全局内存对象锁定(内存对象句柄 uintptr) uintptr

GlobalLock 锁定一个全局内存对象并返回一个指向对象内存块第一个字节的指针.

@Description 详情: https://docs.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-GlobalLock.
@param hMem 全局内存对象的句柄。此句柄由 GlobalAlloc 或 GlobalReAlloc 函数返回.
@return uintptr 如果函数成功,则返回值是指向内存块第一个字节的指针. 如果函数失败,则返回值为NULL.

func X内存复制

func X内存复制(目标内存块指针 uintptr, 源内存块指针 uintptr, 字节数 uint)

RtlMoveMemory 将源内存块的内容复制到目标内存块,并支持重叠的源内存块和目标内存块.

@Description 详情: https://docs.microsoft.com/zh-cn/windows/win32/devnotes/rtlmovememory.
@param Destination 指向要复制字节的目标内存块的指针.
@param Source 指向要复制字节的源内存块的指针.
@param Length 从源复制到目标中的字节数.

func X创建保存对话框

func X创建保存对话框(选项结构指针 *OpenFileNameW) bool

GetSaveFileNameW 创建一个保存对话框,让用户指定要保存的文件的驱动器、目录和名称。

@Description 详情: https://docs.microsoft.com/zh-cn/windows/win32/api/commdlg/nf-commdlg-GetSaveFileNameW.
@param unnamedParam1 指向包含用于初始化对话框的信息的 wapi.OpenFileNameW 结构的指针。当函数返回时,此结构包含有关用户文件选择的信息。
@return bool

func X创建打开对话框

func X创建打开对话框(选项结构指针 *OpenFileNameW) bool

GetOpenFileNameW 创建一个打开对话框,让用户指定要打开的文件或文件集的驱动器、目录和名称。

@Description 详情: https://docs.microsoft.com/zh-cn/windows/win32/api/commdlg/nf-commdlg-getopenfilenamew.
@param unnamedParam1 指向包含用于初始化对话框的信息的 wapi.OpenFileNameW 结构的指针。当函数返回时,此结构包含有关用户文件选择的信息。
@return bool

func X创建颜色对话框

func X创建颜色对话框(选项结构指针 *ChooseColor) bool

ChooseColorW 创建一个颜色对话框,使用户能够选择一种颜色。

@Description 详情: https://docs.microsoft.com/zh-cn/previous-versions/windows/desktop/legacy/ms646912(v=vs.85).
@param lpcc 指向 wapi.ChooseColor 结构的指针,该结构包含用于初始化对话框的信息。当函数返回时,此结构包含有关用户颜色选择的信息。
@return bool

func X剪贴板内容格式判断

func X剪贴板内容格式判断(格式 CF_) bool

IsClipboardFormatAvailable 确定剪贴板是否包含指定格式的数据.

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-IsClipboardFormatAvailable.
@param uFormat 标准或注册的剪贴板格式, wapi.CF_ .
@return bool

func X剪贴板取指定格式内容

func X剪贴板取指定格式内容(格式 CF_) uintptr

GetClipboardData 从剪贴板中检索指定格式的数据。剪贴板必须先前已打开.

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-GetClipboardData.
@param uFormat 剪贴板格式, wapi.CF_ .
@return uintptr 如果函数成功,则返回值是指定格式的剪贴板对象的句柄. 如果函数失败,则返回值为NULL.

func X剪贴板设置数据

func X剪贴板设置数据(格式 CF_, 指定格式数据句柄 uintptr) uintptr

SetClipboardData 以指定的剪贴板格式将数据放在剪贴板上。该窗口必须是当前剪贴板所有者,并且应用程序必须调用 OpenClipboard 函数.

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-setclipboarddata.
@param uFormat 标准或注册的剪贴板格式, wapi.CF_ .
@param hMem 指定格式的数据的句柄。该参数可以为0,表示窗口根据请求提供指定剪贴板格式的数据(渲染格式).
@return uintptr 如果函数成功,则返回值是数据的句柄. 如果函数失败,则返回值为NULL.

func X剪辑版关闭

func X剪辑版关闭() bool

CloseClipboard 关闭剪贴板.

@Description 当窗口完成检查或更改剪贴板时,通过调用 CloseClipboard 关闭剪贴板。这使其他窗口能够访问剪贴板.
详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-CloseClipboard.
@return bool

func X剪辑版打开

func X剪辑版打开(关联窗口句柄 uintptr) bool

OpenClipboard 打开剪贴板进行检查并防止其他应用程序修改剪贴板内容.

@Description 如果另一个窗口打开了剪贴板,则 OpenClipboard 会失败.
应用程序应在每次成功调用 OpenClipboard 后调用 CloseClipboard 函数.
除非调用 EmptyClipboard 函数,否则由hWndNewOwner参数标识的窗口不会成为剪贴板所有者.
如果应用程序在 hwnd 设置为0的情况下调用 OpenClipboard, EmptyClipboard 会将剪贴板所有者设置为NULL;这会导致 SetClipboardData 失败.
详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-OpenClipboard.
@param hWnd 要与打开的剪贴板关联的窗口句柄。如果此参数为0,则打开的剪贴板与当前任务相关联.
@return bool

func X剪辑版清空

func X剪辑版清空() bool

EmptyClipboard 清空剪贴板并释放剪贴板中数据的句柄。然后该函数将剪贴板的所有权分配给当前打开剪贴板的窗口。

@Description 在调用 EmptyClipboard 之前,应用程序必须使用 OpenClipboard 函数打开剪贴板。
如果应用程序在打开剪贴板时指定了NULL窗口句柄,则 EmptyClipboard 会成功,但会将剪贴板所有者设置为NULL。请注意,这会导致 SetClipboardData 失败。
详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-EmptyClipboard.
@return bool

func X加载图像W

func X加载图像W(模块句柄 uintptr, 名称 string, 类型 IMAGE_, 宽度, cy int32, fuLoad LR_) uintptr

LoadImageW 加载图标、光标、动画光标或位图.

详见: https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-loadimagew.
@param hInst 包含要加载的图像的 DLL 或可执行文件 (.exe) 模块的句柄。 有关详细信息,请参阅 GetModuleHandle。若要 (图标、光标或位图文件) 加载预定义图像或独立资源,请将此参数设置为0.
@param name 要加载的图像。如果 hInst 参数为非0且 fuLoad 参数省略 LR_LOADFROMFILE, 则 name 指定 hInst 模块中的图像资源。如果要按名称从模块加载图像资源, 则 name 参数是指向包含映像资源名称的字符串。
@param Type 要加载的图像的类型。 wapi.IMAGE_ .
@param cx 图标或光标的宽度(以像素为单位)。 如果此参数为零且 fuLoad 参数 为LR_DEFAULTSIZE,则函数使用 SM_CXICON 或 SM_CXCURSOR 系统指标值来设置宽度。 如果此参数为零且未使用 LR_DEFAULTSIZE ,则函数使用实际资源宽度。
@param cy 图标或光标的高度(以像素为单位)。 如果此参数为零且 fuLoad 参数 为LR_DEFAULTSIZE,则函数使用 SM_CYICON 或 SM_CYCURSOR 系统指标值来设置高度。 如果此参数为零且未使用 LR_DEFAULTSIZE ,则函数使用实际资源高度。
@param fuLoad 此参数可使用以下一个或多个值: wapi.LR_ .
@return 返回HICON。

func X取最后一个错误

func X取最后一个错误() int32

GetLastError 检索调用线程的最后一个错误代码值。最后一个错误代码是在每个线程的基础上维护的。多个线程不会覆盖彼此的最后一个错误代码。

@Description 详情: https://docs.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-GetLastError.
@return 返回值是调用线程的最后一个错误代码。

func X图标创建并按资源

func X图标创建并按资源(presbits uintptr, dwResSize uint32, fIcon bool, dwVer uint32) (uintptr, error)

CreateIconFromResource 从描述图标的资源位创建图标或光标。若要指定所需的高度或宽度,请使用 CreateIconFromResourceEx 函数。

@Description 使用完图标后,请使用 DestroyIcon 函数销毁它。

详见: https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-createiconfromresource.

@param presbits 包含图标或游标资源位的 DWORD 对齐缓冲区指针。通常通过调用 LookupIconIdFromDirectory、 LookupIconIdFromDirectoryEx 和 LoadResource 函数来加载这些位。
@param dwResSize 参数指向的位集的大小(以字节为单位)。
@param fIcon 指示是要创建图标还是游标。 如果此参数为 TRUE,则创建图标。 如果为 FALSE,则创建游标。LOCALHEADER 结构定义游标热点,是从游标资源位读取的第一个数据。
@param dwVer presbits 参数指向的资源位的图标或光标格式的版本号。 该值必须大于或等于 0x00020000 且小于或等于 0x00030000。 此参数通常设置为 0x00030000。
@return HICON

func X图标销毁

func X图标销毁(图标句柄 uintptr) bool

DestroyIcon 销毁图标并释放图标占用的任何内存。

@Description 只需为使用以下函数创建的图标和游标调用 DestroyIcon : CreateIconFromResourceEx (如果调用时没有 LR_SHARED 标志) 、 CreateIconIndirect 和 CopyIcon。 请勿使用此函数销毁共享图标。 只要从中加载共享图标的模块保留在内存中,共享图标就有效。
详见: https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-destroyicon.
@param hIcon 要销毁的图标的句柄。 图标不得处于使用中。

func X复制到缓冲区

func X复制到缓冲区(文本指针1, 文本指针2 uintptr) uintptr

LstrcpyW 将字符串复制到缓冲区.

@Description 详情: https://docs.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-LstrcpyW.
@param lpString1 用于接收 lpString2 参数指向的字符串内容的缓冲区. 缓冲区必须足够大以包含字符串,包括终止空字符.
@param lpString2 要复制的以 null 结尾的字符串.
@return uintptr 如果函数成功,则返回值是指向缓冲区的指针. 如果函数失败,则返回值为NULL, 并且lpString1可能不是以 null 结尾的.

func X对指定文件执行操作

func X对指定文件执行操作(父窗口句柄 uintptr, 操作类型, 文件名, 参数, 默认完整路径 string, 显示Cmd 炫彩常量类.SW_) int

ShellExecuteW 对指定文件执行操作.

@Description 详见: https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutew.
@param hwnd 用于显示 UI 或错误消息的父窗口的句柄。如果操作与窗口无关,则此值可以为0.
@param lpOperation 填“open”则打开lpFlie文档.
@param lpFile 想用关联的程序打印或打开的一个程序名或文件名.
@param lpParameters 如果lpFile是一个可执行文件,则这个字串包含了传递给执行程序的参数.
@param lpDirectory 想使用的默认路径完整路径.
@param nShowCmd 定义了如何显示启动程序的常数值, xcc.SW_.
@return int 如果函数成功,则返回大于32的值。如果函数失败,则返回指示失败原因的错误值.

func X对话框打开文件夹

func X对话框打开文件夹(对话框选项 *BrowseInfoW) uintptr

SHBrowseForFolderW 显示一个对话框,使用户能够选择文件夹。

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/shlobj_core/nf-shlobj_core-shbrowseforfolderw.
@param browseInfo 指向 wapi.BrowseInfoW 结构的指针,该结构包含用于显示对话框的信息。
@return uintptr 返回一个 PIDL,它指定所选文件夹相对于命名空间根的位置。如果用户在对话框中选择取消按钮,则返回值为NULL。返回的 PIDL 可能是文件夹快捷方式而不是文件夹。

func X延时

func X延时(毫秒 uint32)

Sleep 暂停当前线程的执行,直到超时间隔结束。若要进入可警报等待状态,请使用 SleepEx 函数。

详情: https://learn.microsoft.com/zh-cn/windows/win32/api/synchapi/nf-synchapi-sleep.

@param ms 毫秒.

func X延时EX

func X延时EX(毫秒 uint32, bAlertable bool) uint32

SleepEx 挂起当前线程,直到满足指定的条件。 发生以下情况之一时,将继续执行:

- 调用 I/O 完成回调函数。 - 异步过程调用 (APC) 排队到线程。 - 超时间隔已过。

详情: https://learn.microsoft.com/zh-cn/windows/win32/api/synchapi/nf-synchapi-sleepex.

@param dwMilliseconds 暂停执行的时间间隔(以毫秒为单位)。
@param bAlertable 如果此参数为 FALSE,则函数在超时期限过后才会返回。 如果发生 I/O 完成回调,该函数不会立即返回,并且不会执行 I/O 完成函数。 如果 APC 已排队到线程,该函数不会立即返回,并且不会执行 APC 函数。如果 参数为 TRUE,并且调用此函数的线程与调用扩展 I/O 函数 (ReadFileEx 或 WriteFileEx) 的线程相同,则当超时期限已过或发生 I/O 完成回调函数时,函数将返回 。 如果发生 I/O 完成回调,则调用 I/O 完成函数。 如果将 APC 排队到 queueUserAPC) (线程,则当超时期限已过或调用 APC 函数时,函数将返回 。
@return 如果指定的时间间隔过期,则返回值为零。如果函数由于一个或多个 I/O 完成回调函数而返回,则返回值WAIT_IO_COMPLETION。 仅当 bAlertable 为 TRUE,并且调用 SleepEx 函数的线程与调用扩展 I/O 函数的线程相同时,才会发生这种情况。

func X拖放文件取路径

func X拖放文件取路径(hDrop uintptr, iFile uint32, lpszFile *string, cch uint32) int

DragQueryFileW 检索由成功的拖放操作产生的文件路径.

@Description 详见: https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-DragQueryFileW.
@param hDrop 句柄.
@param iFile 文件索引.
@param lpszFile 返回的文件路径.
@param cch 接收的文件路径的字符数, 通常为260.
@return int 返回文件路径的字符数.

func X拖放文件取鼠标位置

func X拖放文件取鼠标位置(句柄 uintptr, 接收鼠标指针的坐标 *炫彩基类.POINT) bool

DragQueryPoint 检索在拖放文件时鼠标指针的位置.

@Description 详见: https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-DragQueryPoint.
@param hDrop 句柄.
@param ppt 接收鼠标指针的坐标.
@return bool 如果拖放发生在窗口的客户区, 返回true;否则返回false.

func X文件夹指针取实际路径

func X文件夹指针取实际路径(文件夹指针 uintptr, 返回文件路径 *string) bool

SHGetPathFromIDListW 将 SHBrowseForFolderW 的返回值转换为文件路径。

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/shlobj_core/nf-shlobj_core-shgetpathfromidlistw.
@param pidl SHBrowseForFolderW 的返回值.
@param pszPath 返回的文件路径。
@return bool

func X检索指定模块句柄

func X检索指定模块句柄(已加载模块名称 string) uintptr

GetModuleHandleW 检索指定模块的模块句柄。 模块必须已由调用进程加载。

详情: https://learn.microsoft.com/zh-cn/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulehandlew.

@param lpModuleName 加载的模块的名称 (.dll 或 .exe 文件) 。 如果省略文件扩展名,则会追加默认库扩展名 .dll。 文件名字符串可以包含尾随点字符 (.) ,以指示模块名称没有扩展名。 字符串不必指定路径。 指定路径时,请务必使用反斜杠 (\) ,而不是使用 /) (正斜杠。 名称 (大小写独立比较,) 当前映射到调用进程的地址空间的模块的名称。如果此参数为空, 则 GetModuleHandleW 返回用于创建调用进程 (.exe 文件) 的文件的句柄。
@return uintptr

func X窗口发送消息

func X窗口发送消息(窗口句柄 uintptr, 消息值 int32, 参数1, 参数2 uint) int

SendMessageW 将指定的消息发送到一个或多个窗口。SendMessage函数调用指定窗口的窗口过程,直到窗口过程处理完消息才返回。

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-SendMessageW.
@param hWnd 窗口句柄,其窗口过程将接收消息。如果该参数为 HWND_BROADCAST ((HWND)0xffff),则将消息发送到系统中的所有顶层窗口,包括禁用或不可见的无主窗口、重叠窗口和弹出窗口;但消息不会发送到子窗口。
@param Msg 要发送的消息。有关系统提供的消息的列表,请参阅: https://docs.microsoft.com/en-us/windows/win32/winmsg/about-messages-and-message-queues.
@param wParam 其他特定于消息的信息。
@param lParam 其他特定于消息的信息。
@return int 返回值指定消息处理的结果;这取决于发送的消息。

func X窗口取屏幕坐标

func X窗口取屏幕坐标(窗口句柄 uintptr, 坐标指针 *POINT) bool

ClientToScreen 将指定点的客户区坐标转换为屏幕坐标。

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-ClientToScreen.
@param hWnd 窗口真实句柄
@param lpPoint wapi.POINT 指针. 如果函数成功,则将新的屏幕坐标复制到此结构中.
@return bool

func X窗口取标题

func X窗口取标题(窗口或控件句柄 uintptr, 接收文本 *string, 最大字符数 int) int

GetWindowTextW 将指定窗口标题栏(如果有)的文本复制到缓冲区中。如果指定的窗口是控件,则复制控件的文本。但是无法检索另一个应用程序中控件的文本。

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-GetWindowTextW.
@param hWnd 包含文本的窗口或控件的句柄。
@param lpString 接收文本.
@param nMaxCount 复制到缓冲区的最大字符数,包括空字符。如果文本超出此限制,则将其截断.
@return int 如果函数成功,则返回值是复制字符串的长度(以字符为单位),不包括终止空字符。如果窗口没有标题栏或文本,如果标题栏为空,或者窗口或控制句柄无效,则返回值为零。

func X窗口取标题长度

func X窗口取标题长度(窗口或控件句柄 uintptr) int

GetWindowTextLengthW 检索指定窗口标题栏文本的长度(以字符为单位)(如果窗口有标题栏)。如果指定的窗口是控件,则该函数检索控件内文本的长度。但是无法检索另一个应用程序中编辑控件的文本长度。

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-GetWindowTextLengthW.
@param hWnd 窗口或控件的句柄。
@return int 如果成功,则返回值是文本的长度(以字符为单位)。在某些情况下,此值可能大于文本的长度。如果窗口没有文本,则返回值为零。

func X窗口取桌面句柄

func X窗口取桌面句柄() uintptr

GetDesktopWindow 获取桌面窗口的句柄.

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-GetDesktopWindow.
@return int

func X窗口取顶级句柄

func X窗口取顶级句柄(窗口类名, 窗口标题 string) uintptr

FindWindowW 检索顶级窗口的句柄,该窗口的类名称和窗口名称与指定的字符串匹配。 此函数不搜索子窗口。 此函数不执行区分大小写的搜索.

@Description 如果 lpWindowName 参数不 为 NULL, FindWindowW 将调用 GetWindowTextW 函数以检索窗口名称进行比较。 有关可能出现的潜在问题的说明,请参阅 GetWindowTextW 的备注。
详见: https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-FindWindowW.
@param lpClassName 窗口类名, 可为空.
@param lpWindowName 窗口名称(窗口的标题), 可为空.
@return 返回窗口句柄。

func X窗口句柄是否有效

func X窗口句柄是否有效(窗口的句柄 uintptr) bool

IsWindow 判断一个窗口句柄是否有效.

@Description 线程不应将 IsWindow 用于未创建的窗口,因为调用此函数后可能会销毁该窗口。 此外,由于窗口句柄被回收,句柄甚至可以指向其他窗口.
详见: https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-iswindow.
@param hWnd 要测试的窗口的句柄。
@return bool

func X窗口投递消息

func X窗口投递消息(窗口句柄 uintptr, 消息值 int32, 参数1, 参数2 uint) bool

PostMessageW 在与创建指定窗口的线程关联的消息队列中放置(发布)一条消息,并在不等待线程处理消息的情况下返回。

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-postmessagew.
@param hWnd 窗口句柄,其窗口过程将接收消息。如果该参数为 HWND_BROADCAST ((HWND)0xffff),则将消息发送到系统中的所有顶层窗口,包括禁用或不可见的无主窗口、重叠窗口和弹出窗口;但消息不会发送到子窗口。
@param Msg 要发送的消息。有关系统提供的消息的列表,请参阅: https://docs.microsoft.com/en-us/windows/win32/winmsg/about-messages-and-message-queues.
@param wParam 其他特定于消息的信息。
@param lParam 其他特定于消息的信息。
@return bool

func X窗口模糊搜索子窗口

func X窗口模糊搜索子窗口(窗口句柄, 子窗口句柄 uintptr, 类名, 窗口标题 string) uintptr

FindWindowExW 检索类名称和窗口名称与指定字符串匹配的窗口的句柄. 该函数搜索子窗口,从指定子窗口后面的那个开始. 此函数不执行区分大小写的搜索.

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-FindWindowExW.
@param hWndParent 要搜索其子窗口的父窗口的句柄. 如果hwndParent为0,该函数使用桌面窗口作为父窗口. 该函数在作为桌面子窗口的窗口中进行搜索.
@param hWndChildAfter 子窗口的句柄。搜索从 Z 顺序中的下一个子窗口开始。子窗口必须是hwndParent的直接子窗口,而不仅仅是后代窗口。 如果hwndChildAfter为0,则搜索从hwndParent的第一个子窗口开始。 请注意,如果hwndParent和hwndChildAfter都是0,则该函数将搜索所有顶级和仅消息窗口。
@param lpszClass 窗口类名, 可空.
@param lpszWindow 窗口名称(窗口的标题), 可空.
@return uintptr

func X窗口激活

func X窗口激活(窗口句柄 uintptr) bool

SetForegroundWindow 将创建指定窗口的线程带到前台并激活窗口. 键盘输入被定向到窗口, 并且为用户改变了各种视觉提示. 系统为创建前台窗口的线程分配比其他线程稍高的优先级.

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-SetForegroundWindow.
@param hWnd 应激活并置于前台的窗口句柄.
@return bool

func X窗口设置位置

func X窗口设置位置(窗口句柄 uintptr, 置顶方式 HWND_, 新x坐标, 新y坐标, 新宽度, 新高度 int32, 大小和定位标志 SWP_) bool

SetWindowPos 改变一个子窗口,弹出式窗口或顶层窗口的尺寸,位置和Z序。子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口.

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-SetWindowPos.
@param hWnd 欲定位的窗口句柄.
@param hWndInsertAfter 在Z序中位于定位窗口之前的窗口句柄. 此参数必须是窗口句柄或以下值之一: wapi.HWND_.
@param x 窗口新的x坐标。如hwnd是一个子窗口,则x用父窗口的客户区坐标表示.
@param y 窗口新的y坐标。如hwnd是一个子窗口,则y用父窗口的客户区坐标表示.
@param cx 指定新的窗口宽度.
@param cy 指定新的窗口高度.
@param wFlags 窗口大小和定位的标志. 该参数可以是以下值的组合: wapi.SWP_.
@return bool

func X结束

func X结束(结束代码 int32)

PostQuitMessage 向系统指示线程已请求终止(退出)。它通常用于响应 WM_DESTROY 消息。

@Description: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-PostQuitMessage.
@param nExitCode 应用程序退出代码。该值用作 WM_QUIT 消息的wParam参数。

func X键盘热键注册

func X键盘热键注册(窗口句柄 uintptr, 热键标识符 int32, 组合键, 热键代码 uint32) bool

RegisterHotKey 注册系统范围的热键.

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-registerhotkey.
@param hWnd 真实窗口句柄。将接收由热键生成的 WM_HOTKEY 消息的窗口句柄。如果此参数为0,则 WM_HOTKEY 消息将发布到调用线程的消息队列中,并且必须在消息循环中进行处理。
@param id 热键的标识符。如果hWnd参数为0,则热键与当前线程相关联,而不是与特定窗口相关联。如果已存在具有相同hWnd和id参数的热键,请参阅备注了解所采取的操作。
@param fsModifiers 为了生成 WM_HOTKEY 消息,必须与vk参数指定的键组合按下的键 。fsModifiers参数可以是以下值的组合: xcc.Mod_ .
@param vk 热键的虚拟键代码: xcc.VK_ . 请参阅虚拟键码: https://docs.microsoft.com/zh-cn/windows/win32/inputdev/virtual-key-codes.
@return bool

func X键盘热键释放

func X键盘热键释放(窗口句柄 uintptr, 热键标识符 int32) bool

UnregisterHotKey 释放先前注册的热键.

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-unregisterHotKey.
@param hWnd 真实窗口句柄。与要释放的热键关联的窗口句柄。如果热键与窗口无关,则此参数应为0.
@param id 要释放的热键的标识符.
@return bool

func X鼠标取光标坐标

func X鼠标取光标坐标(坐标指针 *POINT) bool

GetCursorPos 检索鼠标光标的位置,以屏幕坐标表示.

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-getcursorpos.
@param lpPoint 指向接收光标屏幕坐标的 wapi.POINT 结构的指针.
@return bool

Types

type BIF_

type BIF_ uint32

BIF_ 是指定对话框选项的标志.

const (
	BIF_RETURNONLYFSDIRS BIF_ = 0x00000001 // 仅返回文件系统目录。如果用户选择不属于文件系统的文件夹,则“确定”按钮将变灰。注意对于“\\server”项目以及“\\server\share”和目录项目,“确定”按钮仍处于启用  状态。但是,如果用户选择“\\server”项,则将 SHBrowseForFolderW 返回的 PIDL 传递给 SHGetPathFromIDListW 将失败。

	BIF_DONTGOBELOWDOMAIN BIF_ = 0x00000002 // 不要在对话框的树视图控件中包含域级别以下的网络文件夹。

	BIF_STATUSTEXT BIF_ = 0x00000004 // 在对话框中包含一个状态区域。回调函数可以通过向对话框发送消息来设置状态文本。指定 BIF_NEWDIALOGSTYLE 时不支持此标志。

	BIF_RETURNFSANCESTORS BIF_ = 0x00000008 // 仅返回文件系统祖先。祖先是命名空间层次结构中根文件夹下的子文件夹。如果用户选择了不属于文件系统的根文件夹的祖先,则“确定”按钮将变灰。

	BIF_EDITBOX BIF_ = 0x00000010 // 在允许用户键入项目名称的浏览对话框中包含一个编辑控件。

	BIF_VALIDATE BIF_ = 0x00000020 // 如果用户在编辑框中输入了无效的名称,浏览对话框将调用应用程序的BrowseCallbackProc并发送BFFM_VALIDATEFAILED消息。如果未指定 BIF_EDITBOX,则忽略此标志。

	BIF_NEWDIALOGSTYLE BIF_ = 0x00000040 // 使用新的用户界面。设置此标志为用户提供了一个可以调整大小的更大对话框。该对话框具有多项新功能,包括:对话框内的拖放功能、重新排序、快捷菜单、新文件夹、删除和其他快捷菜单命令。注意  如果 COM 是通过CoInitializeEx初始化并设置了 COINIT_MULTITHREADED 标志,如果传递了 BIF_NEWDIALOGSTYLE,则 SHBrowseForFolderW 将失败。

	BIF_BROWSEINCLUDEURLS BIF_ = 0x00000080 // 浏览对话框可以显示 URL. BIF_USENEWUI 和 BIF_BROWSEINCLUDEFILES 标志也必须设置。如果未设置这三个标志中的任何一个,浏览器对话框将拒绝 URL。即使设置了这些标志,只有在包含所选项目的文件夹支持 URL 时,浏览对话框才会显示 URL。当调用文件夹的IShellFolder::GetAttributesOf方法来请求所选项目的属性时,文件夹必须设置SFGAO_FOLDER属性标志。否则,浏览对话框将不会显示 URL。

	BIF_USENEWUI = BIF_EDITBOX | BIF_NEWDIALOGSTYLE // 使用新的用户界面,包括一个编辑框。这个标志相当于 BIF_EDITBOX | BIF_NEWDIALOGSTYLE。

	BIF_UAHINT BIF_ = 0x00000100 // 与 BIF_NEWDIALOGSTYLE 结合使用时,会在对话框中添加使用提示来代替编辑框。BIF_EDITBOX 会覆盖此标志。

	BIF_NONEWFOLDERBUTTON BIF_ = 0x00000200 // 不要在浏览对话框中包含新建文件夹按钮。

	BIF_NOTRANSLATETARGETS BIF_ = 0x00000400 // 当所选项目是快捷方式时,返回快捷方式本身的 PIDL 而不是其目标。

	BIF_BROWSEFORCOMPUTER BIF_ = 0x00001000 // 只退回电脑。如果用户选择计算机以外的任何东西,则“确定”按钮将变灰。

	BIF_BROWSEFOPRINTER BIF_ = 0x00002000 // 只允许选择打印机。如果用户选择打印机以外的任何东西,则“确定”按钮将变灰。在 Windows XP 和更高版本的系统中,最佳做法是使用 Windows XP 样式的对话框,将对话框的根设置为Printers and Faxes文件夹 (CSIDL_PRINTERS)。

	BIF_BROWSEINCLUDEFILES BIF_ = 0x00004000 // 浏览对话框显示文件和文件夹。

	BIF_SHAREABLE BIF_ = 0x00008000 // 浏览对话框可以显示远程系统上的共享资源。这适用于希望在本地系统上公开远程共享的应用程序。BIF_NEWDIALOGSTYLE 标志也必须设置。

	BIF_BROWSEFILEJUNCTIONS BIF_ = 0x00010000 // Windows 7 及更高版本。允许浏览文件夹连接,例如库或具有 .zip 文件扩展名的压缩文件。
)

type BrowseInfoW

type BrowseInfoW struct {
	HwndOwner      uintptr // 父窗口句柄
	PidlRoot       uintptr // 指定开始浏览的根文件夹的位置。只有命名空间层次结构中的指定文件夹及其子文件夹出现在对话框中。该成员可以为NULL;在这种情况下,将使用默认位置.
	PszDisplayName uintptr // 指向缓冲区的指针,用于接收用户选择的文件夹的显示名称。此缓冲区的大小假定为 260 个字符.
	LpszTitle      uintptr // 指向显示在对话框中树视图控件上方的以空字符结尾的字符串的指针。使用 common.StrPtr()函数生成.
	UlFlags        BIF_    // 指定对话框选项的标志。可以为0,也可以是 wapi.BIF_ 的组合.
	Lpfn           uintptr // 指向应用程序定义函数的指针,当事件发生时对话框调用该函数.
	LParam         uintptr // 对话框传递给回调函数的应用程序定义的值(如果在lpfn中指定) .
	IImage         int32   // 接收与所选文件夹关联的图像索引,存储在系统图像列表中。
}

BrowseInfoW 包含用于显示对话框的信息。

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/shlobj_core/ns-shlobj_core-browseinfow.

type CC_

type CC_ uint32

CC_ 是可用于初始化颜色对话框的位标志。

const (
	CC_ANYCOLOR CC_ = 0x00000100 // 使对话框显示一组基本颜色中的所有可用颜色。

	CC_ENABLEHOOK CC_ = 0x00000010 // 启用在此结构的lpfnHook成员中指定的挂钩过程。此标志仅用于初始化对话框。

	CC_ENABLETEMPLATE CC_ = 0x00000020 // hInstance和 lpTemplateName成员指定一个对话框模板来代替默认模板。此标志仅用于初始化对话框。

	CC_ENABLETEMPLATEHANDLE CC_ = 0x00000040 // hInstance成员标识包含预加载对话框模板的数据块 。如果指定了此标志,系统将忽略lpTemplateName成员。此标志仅用于初始化对话框。

	CC_FULLOPEN CC_ = 0x00000002 // 使对话框显示允许用户创建自定义颜色的附加控件。如果未设置此标志,用户必须单击定义自定义颜色按钮以显示自定义颜色控件。

	CC_PREVENTFULLOPEN CC_ = 0x00000004 // 禁用定义自定义颜色按钮。

	CC_RGBINIT CC_ = 0x00000001 // 使对话框使用rgbResult成员中指定的颜色作为初始颜色选择。

	CC_SHOWHELP CC_ = 0x00000008 // 使对话框显示“帮助”按钮。hwndOwner成员必须指定窗口以接收当用户单击帮助按钮 时对话框发送的 HELPMSGSTRING 注册消息。

	CC_SOLIDCOLOR CC_ = 0x00000080 // 使对话框仅显示基本颜色集中的纯色。
)

type CF_

type CF_ uint32

CF_ 标准剪贴板格式.

const (
	CF_TEXT         CF_ = 1  // 文字格式。每行以回车/换行(CR-LF)组合结束。空字符表示数据的结尾。对ANSI文本使用此格式。
	CF_BITMAP       CF_ = 2  // 位图的句柄(HBITMAP)
	CF_METAFILEPICT CF_ = 3  // 处理由METAFILEPICT结构定义的图元文件图片格式。通过动态数据交换(DDE)传递CF_METAFILEPICT句柄时,负责删除【HMEM】的应用程序也应该释放CF_METAFILEPICT句柄引用的元文件。
	CF_SYLK         CF_ = 4  // Microsoft符号链接(SYLK)格式。
	CF_DIF          CF_ = 5  // 软件艺术数据交换格式。
	CF_TIFF         CF_ = 6  // 标记图像文件格式。
	CF_OEMTEXT      CF_ = 7  // 文字格式包含OEM字符集中的字符。每行以回车/换行(CR-LF)组合结束。空字符表示数据的结尾。
	CF_DIB          CF_ = 8  // 一个包含BITMAPINFO结构的内存对象,后跟位图位。
	CF_PALETTE      CF_ = 9  // 处理调色板。每当应用程序将数据放置在依赖于或假定调色板的剪贴板中时,它也应将调色板放在剪贴板上。如果剪贴板包含CF_PALETTE(逻辑调色板)格式的数据,则应用程序应使用SelectPalette和RealizePalette函数来实现(比较)剪贴板中与该逻辑调色板的任何其他数据。当显示剪贴板数据时,Windows剪贴板始终将剪贴板上的任何对象用作CF_PALETTE格式的当前调色板。
	CF_PENDATA      CF_ = 10 // 用于Pen Computing的Microsoft Windows笔的扩展数据。
	CF_RIFF         CF_ = 11 // 表示音频数据比CF_WAVE标准波形格式更复杂。
	CF_WAVE         CF_ = 12 // 以诸如11 kHz或22 kHz脉冲编码调制(PCM)的标准波形格式之一表示音频数据。
	CF_UNICODETEXT  CF_ = 13 // 仅Windows NT: Unicode文字格式。每行以回车/换行(CR-LF)组合结束。空字符表示数据的结尾。
	CF_ENHMETAFILE  CF_ = 14 // 增强图元文件的句柄(HENHMETAFILE)。
	CF_HDROP        CF_ = 15 // 类型为HDROP的句柄,用于标识文件列表。应用程序可以通过将句柄传递给DragQueryFile函数来检索有关文件的信息。
)

type ChooseColor

type ChooseColor struct {
	// 结构的长度(以字节为单位)。
	//	cc := wapi.ChooseColor{...}
	//	cc.LStructSize = uint32(unsafe.Sizeof(cc))
	LStructSize uint32

	// 拥有对话框的窗口句柄。此成员可以是任何有效的窗口句柄,或者如果对话框没有所有者,它可以为NULL 。
	HwndOwner uintptr

	// 如果在Flags成员中设置了 CC_ENABLETEMPLATEHANDLE 标志,则hInstance是包含对话框模板的内存对象的句柄。如果设置了 CC_ENABLETEMPLATE 标志,则hInstance是一个模块句柄,该模块包含一个由lpTemplateName成员命名的对话框模板。如果既未设置 CC_ENABLETEMPLATEHANDLE 也未设置 CC_ENABLETEMPLATE,则忽略此成员。
	HInstance uintptr

	// 如果设置了 CC_RGBINIT 标志,则rgbResult指定创建对话框时最初选择的颜色。如果指定的颜色值不在可用颜色中,则系统选择最接近的可用纯色。如果rgbResult为零或未设置 CC_RGBINIT,则最初选择的颜色为黑色。如果用户单击OK按钮,则 rgbResult指定用户的颜色选择。要创建RGB颜色值,请使用: xc.RGB().
	RgbResult uint32

	// 指向包含对话框中自定义颜色框的红、绿、蓝 (RGB) 值的 16 个值的数组的指针。如果用户修改了这些颜色,系统将使用新的 RGB 值更新数组。要在调用 ChooseColorW 函数之间保留新的自定义颜色,您应该为数组分配静态内存。要创建RGB颜色值,请使用: xc.RGB().
	//	例子:
	//	var lpCustColors [16]uint32
	//	然后填 &lpCustColors[0]
	LpCustColors *uint32

	// 一组可用于初始化颜色对话框的位标志。当对话框返回时,它会设置这些标志来指示用户的输入。该成员可以是 wapi.CC_ 的组合。
	Flags CC_

	// 系统传递给由lpfnHook成员标识的钩子过程的应用程序定义的数据。当系统向挂钩过程发送 WM_INITDIALOG 消息时,该消息的lParam参数是一个指向对话框创建时指定的 ChooseColor 结构的指针。挂钩过程可以使用此指针来获取lCustData值。
	LCustData uintptr

	// 指向可以处理用于对话框的消息的CCHookProc挂钩过程的指针。除非在Flags成员中设置了 CC_ENABLEHOOK 标志,否则该成员将被忽略。
	LpfnHook uintptr

	// hInstance成员标识的模块中对话框模板资源的名称。此模板替代了标准对话框模板。对于编号的对话框资源,lpTemplateName可以是 MAKEINTRESOURCE宏返回的值。除非在Flags成员中设置了 CC_ENABLETEMPLATE 标志,否则此成员将被忽略。
	LpTemplateName uintptr
}

ChooseColor 包含 ChooseColorW 函数用于初始化Color对话框的信息。用户关闭对话框后,系统在此结构中返回有关用户选择的信息。

type GMEM_

type GMEM_ uint32

GMEM_ 内存分配属性.

const (
	GHND          GMEM_ = 0x0042 // 结合 GMEM_Moveable 和 GMEM_ZeroInit
	GMEM_Fixed    GMEM_ = 0x0000 // 分配固定内存。返回值是一个指针。
	GMEM_Moveable GMEM_ = 0x0002 // 分配可移动内存。内存块永远不会在物理内存中移动,但它们可以在默认堆内移动。返回值是内存对象的句柄。要将句柄转换为指针,请使用 GlobalLock 函数。此值不能与 GMEM_Fixed 结合使用。

	GMEM_ZeroInit GMEM_ = 0x0040 // 将内存内容初始化为零。
	GPTR          GMEM_ = 0x0040 // 结合 GMEM_Fixed 和 GMEM_ZeroInit
)

type HWND_

type HWND_ int
const (
	HWND_NOTOPMOST HWND_ = -2 // 将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口已经是非顶层窗口则该标志不起作用。
	HWND_TOPMOST   HWND_ = -1 // 将窗口置于所有非顶层窗口之上。即使窗口未被激活, 窗口也将保持顶级位置。
	HWND_TOP       HWND_ = 0  // 将窗口置于Z序的顶部。
	HWND_BOTTOM    HWND_ = 1  // 将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在所有其他窗口的底部。
)

type ID_

type ID_ uint32

ID_ 指示 MessageBoxW 的返回值.

const (
	ID_Abort    ID_ = 3  // 失败按钮被单击.
	ID_Cancel   ID_ = 2  // 取消按钮被单击.
	ID_Continue ID_ = 11 // 继续按钮被单击.
	ID_Ignore   ID_ = 5  // 忽略按钮被单击.
	ID_NO       ID_ = 7  // 否按钮被单击.
	ID_OK       ID_ = 1  // 确定按钮被单击.
	ID_Retry    ID_ = 4  // MB_RetryCancel 和 MB_AbortRetryIgnore 里的重试按钮被单击.
	ID_TryAgain ID_ = 10 // MB_CanaelTryContinue 里的重试按钮被单击.
	ID_YES      ID_ = 6  // 是按钮被单击.
)

func X窗口消息框W

func X窗口消息框W(父窗口句柄 uintptr, 显示消息, 标题 string, 类型 MB_) ID_

MessageBoxW 显示一个模式对话框,其中包含一个系统图标、一组按钮和一条特定于应用程序的简短消息.

@Description 详见: https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-MessageBoxW.
@param hWnd 要创建的消息框的所有者窗口的句柄。如果此参数为0,则消息框没有所有者窗口.
@param lpText 要显示的消息。如果字符串由多行组成,您可以在每行之间使用换行符分隔各行.
@param lpCaption 对话框标题。如果此参数为空,则默认标题为Error.
@param uType 对话框的内容和行为, 是以下值的组合: wapi.MB_.
@return wapi.ID_ 如果函数失败,则返回值为0; 成功则返回一个整数,指示用户单击了哪个按钮.

type IMAGE_

type IMAGE_ uint32

type LR_

type LR_ uint32

type MB_

type MB_ uint32

MB_ 指示消息框的内容和行为.

const (
	MB_AbortRetryIgnore  MB_ = 0x00000002 // 消息框包含三个按钮:失败、重试和忽略。
	MB_CanaelTryContinue MB_ = 0x00000006 // 消息框包含三个按钮:取消、重试、继续。使用此消息框类型而不是 MB_AbortRetryIgnore。
	MB_Help              MB_ = 0x00004000 // 向消息框 添加帮助按钮。当用户单击帮助按钮或按 F1 时,系统会向所有者 发送WM_HELP消息。
	MB_OK                MB_ = 0x00000000 // 消息框包含一个按钮:确认。这是默认设置。
	MB_OkCancel          MB_ = 0x00000001 // 消息框包含两个按钮:确认和取消。
	MB_RetryCancel       MB_ = 0x00000005 // 消息框包含两个按钮:重试和取消。
	MB_YesNo             MB_ = 0x00000004 // 消息框包含两个按钮:是和否。
	MB_YesNoCancel       MB_ = 0x00000003 // 消息框包含三个按钮:是、否和取消。
)
const (
	MB_IconExclamation MB_ = 0x00000030 // 消息框中会出现一个感叹号图标。
	MB_IconWarning     MB_ = 0x00000030 // 消息框中会出现一个感叹号图标。
	MB_IconInformation MB_ = 0x00000040 // 一个由圆圈中的小写字母i组成的图标出现在消息框中。
	MB_IconAsterisk    MB_ = 0x00000040 // 一个由圆圈中的小写字母i组成的图标出现在消息框中。
	MB_IconQuestion    MB_ = 0x00000020 // 问号图标出现在消息框中。不再推荐使用问号消息图标,因为它不能清楚地表示特定类型的消息,并且作为问题的消息措辞可能适用于任何消息类型。此外,用户可能会将消息符号问号与帮助信息混淆。因此,请勿在消息框中使用此问号消息符号。系统继续支持它的包含只是为了向后兼容。
	MB_IconStop        MB_ = 0x00000010 // 一个停止标志图标出现在消息框中。
	MB_IconError       MB_ = 0x00000010 // 一个停止标志图标出现在消息框中。
	MB_IconHand        MB_ = 0x00000010 // 一个停止标志图标出现在消息框中。
)
const (
	MB_DefButton1 MB_ = 0x00000000 // 第一个按钮是默认按钮. MB_DefButton1 是默认值, 除非指定了 MB_DefButton2, MB_DefButton3 或 MB_DefButton4.
	MB_DefButton2 MB_ = 0x00000100 // 第二个按钮是默认按钮.
	MB_DefButton3 MB_ = 0x00000200 // 第三个按钮是默认按钮.
	MB_DefButton4 MB_ = 0x00000300 // 第四个按钮是默认按钮.
)
const (
	MB_ApplModal MB_ = 0x00000000 // 用户必须先响应消息框,然后才能在hWnd参数标识的窗口中继续工作。但是,用户可以移动到其他线程的窗口并在这些窗口中工作。根据应用程序中窗口的层次结构,用户可能能够移动到线程内的其他窗口。消息框父级的所有子窗口都会自动禁用,但弹出窗口不会。如果未指定 MB_SystemModal 或 MB_TaskModal, 则 MB_ApplModal 是默认值。

	MB_SystemModal MB_ = 0x00001000 // 与 MB_ApplModal 相同,只是消息框具有 WS_EX_TOPMOST 样式。使用系统模式消息框来通知用户需要立即注意的严重的、具有潜在破坏性的错误(例如,内存不足)。此标志对用户与除与hWnd关联的窗口之外的窗口进行交互的能力没有影响。

	MB_TaskModal MB_ = 0x00002000 // 与 MB_ApplModal 相同,除了如果hWnd参数为0则禁用所有属于当前线程的顶级窗口。当调用应用程序或库没有可用的窗口句柄但仍需要防止输入到调用线程中的其他窗口而不暂停其他线程时,请使用此标志。
)
const (
	MB_Default_Desktop_Only MB_ = 0x00020000 // 与交互式窗口站的桌面相同。有关详细信息,请参阅窗口站。 如果当前输入桌面不是默认桌面,MessageBox不会返回,直到用户切换到默认桌面。

	MB_Right         MB_ = 0x00080000 // 文本右对齐。
	MB_RtlReading    MB_ = 0x00100000 // 在希伯来语和阿拉伯语系统上使用从右到左的阅读顺序显示消息和标题文本。
	MB_SetForeground MB_ = 0x00010000 // 消息框成为前台窗口。在内部,系统为消息框调用 SetForegroundWindow 函数。
	MB_TopMost       MB_ = 0x00040000 // 消息框是使用 WS_EX_TOPMOST 窗口样式创建的。

	MB_Service_Notification MB_ = 0x00200000 // 调用者是通知用户事件的服务。即使没有用户登录到计算机,该功能也会在当前活动桌面上显示一个消息框。终端服务:如果调用线程具有模拟令牌,则该函数将消息框定向到模拟令牌中指定的会话。如果设置了此标志,则hWnd参数必须为NULL。这是为了使消息框可以出现在与hWnd对应的桌面以外的桌面上。有关使用此标志的安全注意事项的信息,请参阅交互式服务。特别要注意,此标志可以在锁定的桌面上生成交互式内容,因此只能用于非常有限的一组场景,例如资源耗尽。
)

type MSG

type MSG struct {
	Hwnd    uintptr
	Message uint32
	WParam  uint
	LParam  uint
	Time    uint32
	Pt      POINT
}

type Mod_

type Mod_ uint32
const (
	Mod_Alt      Mod_ = 0x0001 // 必须按住任一 ALT 键。
	Mod_Control  Mod_ = 0x0002 // 必须按住任一 CTRL 键。
	Mod_Norepeat Mod_ = 0x4000 // 更改热键行为,以便键盘自动重复不会产生多个热键通知。Windows Vista:  不支持此标志。
	Mod_Shift    Mod_ = 0x0004 // 必须按住任一 SHIFT 键。
	Mod_Win      Mod_ = 0x0008 // 任一 WINDOWS 键被按住。这些键标有 Windows 徽标。涉及 WINDOWS 键的键盘快捷键保留供操作系统使用。
)

type OFN_

type OFN_ uint32

OFN_ 是用于初始化对话框的位标志

const (
	OFN_ALLOWMULTISELECT OFN_ = 0x00000200 // 文件名列表框允许多选 。如果您还设置了 OFN_EXPLORER 标志,则对话框使用资源管理器样式的用户界面;否则,它使用旧式用户界面。如果用户选择了多个文件,lpstrFile缓冲区会返回当前目录的路径,后跟所选文件的文件名。nFileOffset成员是第一个文件名的偏移量,以字节或字符为单位,并且不使用nFileExtension成员。对于资源管理器样式的对话框,目录和文件名字符串是NULL分隔的,最后一个文件名后有一个额外的NULL字符。这种格式使 Explorer 样式的对话框能够返回包含空格的长文件名。对于旧式对话框,目录和文件名字符串用空格分隔,函数使用短文件名作为带空格的文件名。您可以使用FindFirstFile函数在长文件名和短文件名之间进行转换。如果为旧式对话框指定自定义模板,则文件名列表框的定义必须包含LBS_EXTENDEDSEL值。

	OFN_CREATEPROMPT OFN_ = 0x00002000 // 如果用户指定的文件不存在,则此标志会导致对话框提示用户授予创建文件的权限。如果用户选择创建文件,对话框关闭并且函数返回指定的名称;否则,对话框保持打开状态。如果将此标志与 OFN_ALLOWMULTISELECT 标志一起使用,则对话框允许用户仅指定一个不存在的文件。

	OFN_DONTADDDTORECENT OFN_ = 0x02000000 // 防止系统在包含用户最近使用的文档的文件系统目录中添加指向选定文件的链接。要检索此目录的位置,请使用 CSIDL_RECENT 标志 调用 SHGetSpecialFolderLocation 函数。

	OFN_ENABLEHOOK OFN_ = 0x00000020 // 启用在lpfnHook成员中指定的钩子函数。

	OFN_ENABLEINCLUDENOTIFY OFN_ = 0x00400000 // 当用户打开文件夹时, 使对话框将 CDN_INCLUDEITEM 通知消息发送到您的 OFNHookProc 挂钩过程。该对话框会为新打开的文件夹中的每个项目发送通知。这些消息使您能够控制对话框在文件夹的项目列表中显示的项目。

	OFN_ENABLESIZING OFN_ = 0x00800000 // 允许使用鼠标或键盘调整资源管理器样式对话框的大小。默认情况下,资源管理器样式的打开和另存为对话框允许调整对话框的大小,无论是否设置了此标志。仅当您提供挂钩过程或自定义模板时,才需要此标志。旧式对话框不允许调整大小。

	OFN_ENABLETEMPLATE OFN_ = 0x00000040 // lpTemplateName成员是指向模块中由 hInstance 成员标识的对话模板资源名称 的指针。如果设置了 OFN_EXPLORER 标志,系统将使用指定的模板创建一个对话框,该对话框是默认资源管理器样式对话框的子对话框。如果未设置 OFN_EXPLORER 标志,则系统使用模板创建旧式对话框,替换默认对话框。

	OFN_ENABLETEMPLATEHANDLE OFN_ = 0x00000080 // hInstance成员标识包含预加载对话框模板的数据块 。如果指定了此标志,系统将忽略lpTemplateName 。如果设置了 OFN_EXPLORER 标志,系统将使用指定的模板创建一个对话框,该对话框是默认资源管理器样式对话框的子对话框。如果未设置 OFN_EXPLORER 标志,则系统使用模板创建旧式对话框,替换默认对话框。

	OFN_EXPLORER OFN_ = 0x00080000 // 指示对“打开”或“另存为”对话框所做的任何自定义都使用资源管理器样式的自定义方法。有关详细信息,请参阅Explorer-Style Hook Procedures和Explorer-Style Custom Templates。默认情况下,无论是否设置了此标志,“打开”和“另存为”对话框都使用资源管理器样式的用户界面。仅当您提供挂钩过程或自定义模板或设置 OFN_ALLOWMULTISELECT 标志时,才需要此标志。如果您想要旧式用户界面,请省略 OFN_EXPLORER 标志并提供替换旧式模板或挂钩过程。如果您想要旧样式但不需要自定义模板或挂钩过程,只需提供一个始终返回FALSE的挂钩过程。

	OFN_EXTENSIONDIFFERENT OFN_ = 0x00000400 // 用户键入的文件扩展名与lpstrDefExt 指定的扩展名不同。如果lpstrDefExt为NULL ,则该函数不使用此标志。

	OFN_FILEMUSTEXIST OFN_ = 0x00001000 // 用户只能在文件名输入字段中键入现有文件的名称。如果指定了此标志并且用户输入了无效名称,则对话框过程会在消息框中显示警告。如果指定了此标志,则还使用 OFN_PATHMUSTEXIST 标志。此标志可在打开对话框中使用。它不能与另存为对话框一起使用。

	OFN_FORCESHOWHIDDEN OFN_ = 0x10000000 // 强制显示系统和隐藏文件,从而覆盖用户设置以显示或不显示隐藏文件。但是,未显示标记为系统和隐藏的文件。

	OFN_HIDEREADONLY OFN_ = 0x00000004 // 隐藏只读复选框。

	OFN_LONGNAMES OFN_ = 0x00200000 // 对于旧式对话框,此标志使对话框使用长文件名。如果未指定此标志,或者还设置了 OFN_ALLOWMULTISELECT 标志,则旧式对话框使用短文件名(8.3 格式)作为带空格的文件名。资源管理器样式的对话框忽略此标志并始终显示长文件名。

	OFN_NOCHANGEDIR OFN_ = 0x00000008 // 如果用户在搜索文件时更改了目录,则将当前目录恢复为其原始值。此标志对 GetOpenFileNameW 无效。

	OFN_NODEREFERENCELINKS OFN_ = 0x00100000 // 指示对话框返回所选快捷方式 (.LNK) 文件的路径和文件名。如果未指定此值,则对话框返回快捷方式引用的文件的路径和文件名。

	OFN_NOLONGNAMES OFN_ = 0x00040000 // 对于旧式对话框,此标志使对话框使用短文件名(8.3 格式)。资源管理器样式的对话框忽略此标志并始终显示长文件名。

	OFN_NONETWORKBUTTON OFN_ = 0x00020000 // 隐藏和禁用网络按钮。

	OFN_NOREADONLYRETURN OFN_ = 0x00008000 // 返回的文件没有选中只读复选框,并且不在写保护目录中。

	OFN_NOTESTFILECREATE OFN_ = 0x00010000 // 在关闭对话框之前不会创建文件。如果应用程序将文件保存在创建非修改网络共享上,则应指定此标志。当应用程序指定此标志时,库不检查写保护、磁盘已满、驱动器门打开或网络保护。使用此标志的应用程序必须小心执行文件操作,因为文件一旦关闭就无法重新打开。

	OFN_NOVALIDATE OFN_ = 0x00000100 // 常用对话框允许在返回的文件名中包含无效字符。通常,调用应用程序使用一个挂钩过程,该过程使用FILEOKSTRING消息检查文件名。如果编辑控件中的文本框为空或只包含空格,则更新文件和目录列表。如果编辑控件中的文本框包含其他任何内容,则 nFileOffset和nFileExtension将设置为通过解析文本生成的值。文本中没有添加默认扩展名,文本也没有复制到lpstrFileTitle指定的缓冲区。如果nFileOffset指定的值小于零,则文件名无效。否则,文件名有效,nFileExtension并且nFileOffset可以像未指定 OFN_NOVALIDATE 标志一样使用。

	OFN_OVERWRITEPROMPT OFN_ = 0x00000002 // 如果所选文件已存在,则使“另存为”对话框生成一个消息框。用户必须确认是否覆盖文件。

	OFN_PATHMUTEXIST OFN_ = 0x00000800 // 用户只能键入有效的路径和文件名。如果使用此标志并且用户在“文件名”输入字段中键入了无效的路径和文件名,则对话框功能会在消息框中显示警告。

	OFN_READONLY OFN_ = 0x00000001 // 导致在创建对话框时最初选中只读复选框。此标志指示对话框关闭时 只读复选框的状态。

	OFN_SHAREAWARE OFN_ = 0x00004000 // 指定如果对 OpenFile函数的调用由于网络共享冲突而失败,则忽略该错误并且对话框返回选定的文件名。如果未设置此标志,则当用户指定的文件名发生网络共享冲突时,对话框会通知您的挂钩过程。如果设置了 OFN_EXPLORER 标志,对话框将CDN_SHAREVIOLATION消息发送到挂钩过程。如果不设置OFN_EXPLORER,对话框会发送SHAREVISTRING注册消息到钩子过程。

	OFN_SHOWHELP OFN_ = 0x00000010 // 使对话框显示“帮助”按钮。hwndOwner成员必须指定窗口以接收当用户单击帮助按钮时对话框发送的HELPMSGSTRING注册消息。当用户单击“帮助”按钮 时,资源管理器样式的对话框会向您的挂钩过程发送CDN_HELP通知消息。
)

type OpenFileNameW

type OpenFileNameW struct {
	// 结构体大小.
	//	ofn := wapi.OpenFileNameW{...}
	//	ofn.LStructSize = uint32(unsafe.Sizeof(ofn))
	LStructSize uint32

	// 拥有对话框的窗口句柄。此成员可以是任何有效的窗口句柄,或者如果对话框没有所有者,它可以为NULL 。
	HwndOwner uintptr

	// 如果在Flags成员中设置了OFN_ENABLETEMPLATEHANDLE标志,则hInstance是包含对话框模板的内存对象的句柄。如果设置了OFN_ENABLETEMPLATE标志,则hInstance是一个模块句柄,该模块包含一个由lpTemplateName成员命名的对话框模板。如果两个标志都没有设置,则忽略此成员。如果设置了OFN_EXPLORER标志,系统将使用指定的模板创建一个对话框,该对话框是默认资源管理器样式对话框的子对话框。如果未设置OFN_EXPLORER标志,则系统使用模板创建旧式对话框,替换默认对话框。
	HInstance uintptr

	// 过滤器. 包含成对的以 null 结尾的过滤器字符串的缓冲区。缓冲区中的最后一个字符串必须以两个NULL字符终止。
	//
	//	每对中的第一个字符串是描述过滤器的显示字符串(例如:“文本文件”),第二个字符串指定过滤器模式(例如:“ .TXT”)。要为单个显示字符串指定多个过滤器模式,请使用分号分隔模式(例如:“ .TXT; .DOC; .BAK”)。模式字符串可以是有效文件名字符和星号 (*) 通配符的组合。不要在模式字符串中包含空格。
	//
	//	系统不会更改过滤器的顺序。它按照lpstrFilter中指定的顺序将它们显示在文件类型组合框中。
	//
	//	如果lpstrFilter为NULL,则对话框不显示任何过滤器。
	//
	//	例子:
	//	lpstrFilter := strings.Join([]string{"Text Files(*txt)", "*.txt", "All Files(*.*)", "*.*"}, wapi.NULL) + wapi.NULL2
	//	common.StringToUint16Ptr(lpstrFilter)
	LpstrFilter *uint16

	// 一个静态缓冲区,其中包含一对以空值结尾的过滤器字符串,用于保存用户选择的过滤器模式。第一个字符串是描述自定义过滤器的显示字符串,第二个字符串是用户选择的过滤器模式。当您的应用程序第一次创建对话框时,您指定第一个字符串,它可以是任何非空字符串。当用户选择一个文件时,对话框将当前过滤模式复制到第二个字符串。保留的过滤器模式可以是lpstrFilter缓冲区中指定的模式之一,也可以是用户键入的过滤器模式。下次创建对话框时,系统使用字符串初始化用户定义的文件过滤器。如果nFilterIndex成员为零,对话框使用自定义过滤器。
	//
	//	如果此成员为NULL,则对话框不保留用户定义的过滤器模式。
	//
	//	如果此成员不是NULL,则nMaxCustFilter成员的值必须指定lpstrCustomFilter缓冲区的大小(以字符为单位) 。
	LpstrCustomFilter *uint16

	// 由lpstrCustomFilter标识的缓冲区的大小(以字符为单位) 。此缓冲区应至少有 40 个字符长。如果lpstrCustomFilter为NULL或指向NULL字符串,则忽略此成员。
	NMaxCustFilter uint32

	// 当前选定过滤器的索引。lpstrFilter指向的缓冲区包含定义过滤器的字符串对。第一对字符串的索引值为 1,第二对字符串的索引值为 2,依此类推。索引为零表示由 lpstrCustomFilter指定的自定义过滤器。您可以在输入上指定一个索引,以指示对话框的初始过滤器描述和过滤器模式。当用户选择一个文件时,nFilterIndex返回当前显示的过滤器的索引。如果nFilterIndex为零且lpstrCustomFilter为NULL,则系统使用lpstrFilter中的第一个过滤器缓冲。如果所有三个成员都为零或NULL,则系统不使用任何过滤器,并且不会在对话框的文件列表控件中显示任何文件。
	NFilterIndex uint32

	// 用于初始化文件名编辑控件的文件名。如果不需要初始化,此缓冲区的第一个字符必须为NULL 。当 GetOpenFileNameW 或 GetSaveFileNameW 函数成功返回时,此缓冲区包含所选文件的驱动器指示符、路径、文件名和扩展名。
	//
	//	如果设置了 OFN_ALLOWMULTISELECT 标志并且用户选择了多个文件,则缓冲区包含当前目录,后跟所选文件的文件名。对于资源管理器样式的对话框,目录和文件名字符串是NULL分隔的,最后一个文件名后有一个额外的NULL字符。对于旧式对话框,字符串以空格分隔,函数使用短文件名作为带空格的文件名。您可以使用 FindFirstFile 函数在长文件名和短文件名之间进行转换。如果用户只选择一个文件,lpstrFile字符串在路径和文件名之间没有分隔符。
	//
	//	如果缓冲区太小,该函数返回FALSE并且 CommDlgExtendedError 函数返回 FNERR_BUFFERTOOSMALL 。在这种情况下,lpstrFile缓冲区的前两个字节包含所需的大小,以字节或字符为单位。
	//
	//	例子:
	//	lpstrFile := make([]uint16, 260)//初始大小如果是单选文件的话, 就填260. 多选文件的话, 可根据情况增大
	//	然后填写: &lpstrFile[0]
	LpstrFile *uint16

	// lpstrFile指向的缓冲区的大小(以字符为单位)。缓冲区必须足够大以存储路径和文件名字符串或字符串,包括终止NULL字符。如果缓冲区太小而无法包含文件信息, GetOpenFileNameW 和 GetSaveFileNameW 函数将返回FALSE 。缓冲区的长度应至少为 256 个字符。
	NMaxFile uint32

	// 所选文件的文件名和扩展名(不含路径信息)。该成员可以是NULL。
	//	例子:
	//	lpstrFileTitle := make([]uint16, 260)
	//	然后填写: &lpstrFileTitle[0]
	LpstrFileTitle *uint16

	// lpstrFileTitle指向的缓冲区的大小(以字符为单位)。如果lpstrFileTitle为NULL ,则忽略此成员。
	NMaxFileTitle uint32

	// 初始目录.
	//	例: common.StrPtr("D:").
	LpstrInitialDir uintptr

	// 要放置在对话框标题栏中的字符串。如果此成员为NULL,则系统使用默认标题(即"另存为"或"打开")。
	//	例: common.StrPtr("打开文件")
	LpstrTitle uintptr

	// 标志: wapi.OFN_ , 可组合, 可为0.
	Flags OFN_

	// 从路径开头到lpstrFile指向的字符串中的文件名的从零开始的偏移量(以字符为单位)。对于 Unicode 版本,这是字符数。例如,如果lpstrFile指向以下字符串“c:\dir1\dir2\file.ext”,则该成员包含值 13 以指示“file.ext”字符串的偏移量。如果用户选择了多个文件,nFileOffset是第一个文件名的偏移量。
	NFileOffset uint16

	// 从路径开头到lpstrFile指向的字符串中的文件扩展名的从零开始的偏移量(以字符为单位)。对于 Unicode 版本,这是字符数。通常,文件扩展名是最后一次出现的点(“.”)字符之后的子字符串。例如txt是文件名readme.txt的扩展名,html是readme.txt.html的扩展名。因此,如果lpstrFile指向字符串“c:\dir1\dir2\readme.txt”,则该成员包含值 20。如果lpstrFile指向字符串“c:\dir1\dir2\readme.txt.html”,则此成员成员包含值 24。如果lpstrFile指向字符串“c:\dir1\dir2\readme.txt.html.”,该成员包含值 29。如果lpstrFile指向的字符串不包含任何“.” 字符如“c:\dir1\dir2\readme”,该成员包含零。
	NFileExtension uint16

	// 默认扩展名。如果用户未能键入扩展名, GetOpenFileNameW 和 GetSaveFileNameW 会将此扩展名附加到文件名中。此字符串可以是任意长度,但仅附加前三个字符。该字符串不应包含句点 (.)。如果此成员为NULL并且用户未能键入扩展名,则不会附加任何扩展名。
	//
	//	例子: common.StrPtr("txt")
	LpstrDefExt uintptr

	// 系统传递给由lpfnHook成员标识的钩子过程的应用程序定义的数据。当系统向挂钩过程发送 WM_INITDIALOG 消息时,该消息的lParam参数是一个指向对话框创建时指定的 OpenFileNameW 结构的指针。挂钩过程可以使用此指针来获取lCustData值。
	LCustData uintptr

	// 指向钩子过程的指针。除非Flags成员包含 OFN_ENABLEHOOK 标志,否则此成员将被忽略。
	//
	//	如果在Flags成员中没有设置 OFN_EXPLORER 标志, lpfnHook是一个指向 OFNHookProcOldStyle 挂钩过程的指针,该过程接收用于对话框的消息。挂钩过程返回FALSE以将消息传递给默认对话框过程,或返回TRUE以丢弃消息。
	//
	//	如果设置了 OFN_EXPLORER,lpfnHook是一个指向 OFNHookProc 挂钩过程的指针。挂钩过程接收从对话框发送的通知消息。挂钩过程还接收您通过指定子对话框模板定义的任何其他控件的消息。挂钩过程不接收用于默认对话框的标准控件的消息。
	LpfnHook uintptr

	// 由hInstance成员标识的模块中对话模板资源的名称。对于编号的对话框资源,这可以是 MAKEINTRESOURCE 宏返回的值。除非在Flags成员中设置了 OFN_ENABLETEMPLATE 标志,否则该成员将被忽略。如果设置了 OFN_EXPLORER 标志,系统将使用指定的模板创建一个对话框,该对话框是默认资源管理器样式对话框的子对话框。如果未设置 OFN_EXPLORER 标志,则系统使用模板创建旧式对话框,替换默认对话框。
	LpTemplateName uintptr
}

OpenFileNameW 包含 GetOpenFileNameW 和 GetSaveFileNameW 函数用于初始化“打开”或“另存为”对话框的信息。用户关闭对话框后,系统在此结构中返回有关用户选择的信息。

详见: https://docs.microsoft.com/zh-cn/windows/win32/api/commdlg/ns-commdlg-openfilenamea.

type POINT

type POINT struct {
	X int32
	Y int32
}

type SWP_

type SWP_ uint32

SWP_ 是窗口大小和定位的标志.

const (
	SWP_ASYNCWINDOWPOS SWP_ = 0x4000 // 如果调用线程和拥有窗口的线程连接到不同的输入队列,系统会将请求发布到拥有窗口的线程。这可以防止调用线程在其他线程处理请求时阻塞其执行。
	SWP_DEFERERASE     SWP_ = 0x2000 // 防止生成WM_SYNCPAINT消息。
	SWP_DRAWFRAME      SWP_ = 0x0020 // 在窗口周围绘制一个框架(在窗口的类描述中定义)。
	SWP_FRAMECHANGED   SWP_ = 0x0020 // 应用使用 SetWindowLong 函数 设置的新框架样式。向窗口发送WM_NCCALCSIZE消息,即使窗口大小没有改变。如果未指定此标志,则仅在更改窗口大小时发送 WM_NCCALCSIZE 。
	SWP_HIDEWINDOW     SWP_ = 0x0080 // 隐藏窗口。
	SWP_NOACTIVATE     SWP_ = 0x0010 // 不激活窗口。如果未设置此标志,则窗口被激活并移动到最顶层或非最顶层组的顶部(取决于hWndInsertAfter参数的设置)。
	SWP_NOCOPYBITS     SWP_ = 0x0100 // 丢弃客户区的全部内容。如果未指定此标志,则在调整窗口大小或重新定位后,将保存客户区的有效内容并将其复制回客户区。
	SWP_NOMOVE         SWP_ = 0x0002 // 保留当前位置(忽略X和Y参数)。
	SWP_NOOWNERZORDER  SWP_ = 0x0200 // 不改变所有者窗口在 Z 顺序中的位置。
	SWP_NOREDRAW       SWP_ = 0x0008 // 不重绘更改。如果设置了此标志,则不会发生任何类型的重新绘制。这适用于客户区、非客户区(包括标题栏和滚动条)以及由于窗口移动而未覆盖的父窗口的任何部分。设置此标志时,应用程序必须显式地使需要重绘的窗口和父窗口的任何部分无效或重绘。
	SWP_NOREPOSITION   SWP_ = 0x0200 // 与SWP_NOOWNERZORDER标志相同。
	SWP_NOSENDCHANGING SWP_ = 0x0400 // 阻止窗口接收WM_WINDOWPOSCHANGING消息。
	SWP_NOSIZE         SWP_ = 0x0001 // 保留当前大小(忽略cx和cy参数)。
	SWP_NOZORDER       SWP_ = 0x0004 // 保留当前 Z 顺序(忽略hWndInsertAfter参数)。
	SWP_SHOWWINDOW     SWP_ = 0x0040 // 显示窗口。
)

Directories

Path Synopsis
Package wnd 调用 wapi 封装了对窗口的操作.
Package wnd 调用 wapi 封装了对窗口的操作.
Package wutil 调用 wapi 封装了部分常用功能.
Package wutil 调用 wapi 封装了部分常用功能.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL