Documentation
¶
Overview ¶
Package wapi 封装了windows系统的api.
Index ¶
- Constants
- func DispatchMessage(pMsg *MSG) int
- func DragFinish(hDrop uintptr)
- func GetMessage(pMsg *MSG, hWnd uintptr, wMsgFilterMin uint32, wMsgFilterMax uint32) int32
- func RegisterWindowMessageW(lpString string) int
- func TranslateMessage(pMsg *MSG) bool
- func XCloseHandle(对象句柄 uintptr) bool
- func X全局内存分配(内存分配属性 GMEM_, 字节数 uint) uintptr
- func X全局内存对象关闭(内存对象句柄 uintptr) uintptr
- func X全局内存对象取大小(内存对象句柄 uintptr) uint
- func X全局内存对象解锁(内存对象句柄 uintptr) bool
- func X全局内存对象锁定(内存对象句柄 uintptr) uintptr
- func X内存复制(目标内存块指针 uintptr, 源内存块指针 uintptr, 字节数 uint)
- func X创建保存对话框(选项结构指针 *OpenFileNameW) bool
- func X创建打开对话框(选项结构指针 *OpenFileNameW) bool
- func X创建颜色对话框(选项结构指针 *ChooseColor) bool
- func X剪贴板内容格式判断(格式 CF_) bool
- func X剪贴板取指定格式内容(格式 CF_) uintptr
- func X剪贴板设置数据(格式 CF_, 指定格式数据句柄 uintptr) uintptr
- func X剪辑版关闭() bool
- func X剪辑版打开(关联窗口句柄 uintptr) bool
- func X剪辑版清空() bool
- func X加载图像W(模块句柄 uintptr, 名称 string, 类型 IMAGE_, 宽度, cy int32, ...) uintptr
- func X取最后一个错误() int32
- func X图标创建并按资源(presbits uintptr, dwResSize uint32, fIcon bool, dwVer uint32) (uintptr, error)
- func X图标销毁(图标句柄 uintptr) bool
- func X复制到缓冲区(文本指针1, 文本指针2 uintptr) uintptr
- func X对指定文件执行操作(父窗口句柄 uintptr, ...) int
- func X对话框打开文件夹(对话框选项 *BrowseInfoW) uintptr
- func X延时(毫秒 uint32)
- func X延时EX(毫秒 uint32, bAlertable bool) uint32
- func X拖放文件取路径(hDrop uintptr, iFile uint32, lpszFile *string, cch uint32) int
- func X拖放文件取鼠标位置(句柄 uintptr, 接收鼠标指针的坐标 *炫彩基类.POINT) bool
- func X文件夹指针取实际路径(文件夹指针 uintptr, 返回文件路径 *string) bool
- func X检索指定模块句柄(已加载模块名称 string) uintptr
- func X窗口发送消息(窗口句柄 uintptr, 消息值 int32, 参数1, 参数2 uint) int
- func X窗口取屏幕坐标(窗口句柄 uintptr, 坐标指针 *POINT) bool
- func X窗口取标题(窗口或控件句柄 uintptr, 接收文本 *string, 最大字符数 int) int
- func X窗口取标题长度(窗口或控件句柄 uintptr) int
- func X窗口取桌面句柄() uintptr
- func X窗口取顶级句柄(窗口类名, 窗口标题 string) uintptr
- func X窗口句柄是否有效(窗口的句柄 uintptr) bool
- func X窗口投递消息(窗口句柄 uintptr, 消息值 int32, 参数1, 参数2 uint) bool
- func X窗口模糊搜索子窗口(窗口句柄, 子窗口句柄 uintptr, 类名, 窗口标题 string) uintptr
- func X窗口激活(窗口句柄 uintptr) bool
- func X窗口设置位置(窗口句柄 uintptr, 置顶方式 HWND_, ...) bool
- func X结束(结束代码 int32)
- func X键盘热键注册(窗口句柄 uintptr, 热键标识符 int32, 组合键, 热键代码 uint32) bool
- func X键盘热键释放(窗口句柄 uintptr, 热键标识符 int32) bool
- func X鼠标取光标坐标(坐标指针 *POINT) bool
- type BIF_
- type BrowseInfoW
- type CC_
- type CF_
- type ChooseColor
- type GMEM_
- type HWND_
- type ID_
- type IMAGE_
- type LR_
- type MB_
- type MSG
- type Mod_
- type OFN_
- type OpenFileNameW
- type POINT
- type SWP_
Constants ¶
const ( IMAGE_BITMAP = 0 // 加载位图 IMAGE_ICON = 1 // 加载图标 IMAGE_CURSOR = 2 // 加载游标 )
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 颜色。 )
const ( NULL = "\x00" NULL2 = NULL + NULL // 2个 NULL )
Variables ¶
This section is empty.
Functions ¶
func GetMessage ¶
ff: wMsgFilterMax: wMsgFilterMin: hWnd: pMsg:
func X对指定文件执行操作 ¶
ff:对指定文件执行操作 nShowCmd:显示Cmd lpDirectory:默认完整路径 lpParameters:参数 lpFile:文件名 lpOperation:操作类型 hwnd:父窗口句柄
func X拖放文件取鼠标位置 ¶
ff:拖放文件取鼠标位置 ppt:接收鼠标指针的坐标 hDrop:句柄
func X文件夹指针取实际路径 ¶
ff:文件夹指针取实际路径 pszPath:返回文件路径 pidl:文件夹指针
func X窗口模糊搜索子窗口 ¶
ff:窗口模糊搜索子窗口 lpszWindow:窗口标题 lpszClass:类名 hWndChildAfter:子窗口句柄 hWndParent:窗口句柄
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 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 // 是按钮被单击. )
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_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 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 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 // 显示窗口。 )