|
|
本帖最后由 小蜗牛 于 2025-11-4 23:24 编辑
采用别名封装 可以平替 变整数 的窗口句柄.封装了我个人觉得比较常用的..
没有做测试~
这样一看,火山的设计是不是很优秀?不需要自己记住那么多的API啥的...
但是做的就一言难尽...
可以自己把界面库的 取窗口句柄() 返回值改成: 窗口句柄类或者新增 取窗口句柄2 ()
即可这样调用: 取窗口句柄 ().闪烁 ()
简单方便~
没有过多测试.请熟知~
- <火山程序 类型 = "通常" 版本 = 1 />
- 类 系统保留窗口消息 <公开 注释 = "AI生成的,不保证准确性" 折叠 @常量类 = 整数>
- {
- # ✅ 标准窗口消息(WM_ 开头)
- 常量 空 <公开 值 = 0x0000 注释 = "NULL 消息,无操作">
- 常量 创建 <公开 值 = 0x0001 注释 = "WM_CREATE:窗口刚创建,尚未显示">
- 常量 即将被销毁 <公开 值 = 0x0002 注释 = "WM_DESTROY:窗口即将被销毁">
- 常量 移动 <公开 值 = 0x0003 注释 = "WM_MOVE:窗口位置改变;LOWORD(lParam)=x, HIWORD(lParam)=y">
- 常量 大小改变 <公开 值 = 0x0005 注释 = "WM_SIZE:窗口大小改变;wParam=SIZE_*, LOWORD(lParam)=宽, HIWORD(lParam)=高">
- 常量 激活 <公开 值 = 0x0006 注释 = "WM_ACTIVATE:窗口获得或失去激活;wParam=WA_ACTIVE/WA_INACTIVE">
- 常量 设置焦点 <公开 值 = 0x0007 注释 = "WM_SETFOCUS:窗口获得输入焦点">
- 常量 失去焦点 <公开 值 = 0x0008 注释 = "WM_KILLFOCUS:窗口失去输入焦点">
- 常量 重绘 <公开 值 = 0x000F 注释 = "WM_PAINT:窗口需要重绘">
- 常量 关闭 <公开 值 = 0x0010 注释 = "WM_CLOSE:用户请求关闭窗口(如点击×或Alt+F4)">
- 常量 退出 <公开 值 = 0x0012 注释 = "WM_QUIT:退出消息循环,由PostQuitMessage发送">
- 常量 擦背景 <公开 值 = 0x0014 注释 = "WM_ERASEBKGND:擦除窗口背景">
- 常量 查询结束会话 <公开 值 = 0x0011 注释 = "WM_QUERYENDSESSION:系统即将关机或注销">
- 常量 结束会话 <公开 值 = 0x0016 注释 = "WM_ENDSESSION:系统结束会话(关机/注销)">
- 常量 显示窗口 <公开 值 = 0x0018 注释 = "WM_SHOWWINDOW:窗口即将显示或隐藏">
- 常量 启用 <公开 值 = 0x000A 注释 = "WM_ENABLE:窗口启用状态改变">
- 常量 设置重绘 <公开 值 = 0x000B 注释 = "WM_SETREDRAW:允许/禁止窗口重绘">
- 常量 设置文本 <公开 值 = 0x000C 注释 = "WM_SETTEXT:设置窗口文本">
- 常量 获取文本 <公开 值 = 0x000D 注释 = "WM_GETTEXT:获取窗口文本">
- 常量 文本长度 <公开 值 = 0x000E 注释 = "WM_GETTEXTLENGTH:获取窗口文本长度">
- 常量 系统命令 <公开 值 = 0x0112 注释 = "WM_SYSCOMMAND:系统菜单命令(如移动、最小化等)">
- 常量 初始化对话框 <公开 值 = 0x0110 注释 = "WM_INITDIALOG:对话框初始化">
- 常量 命令 <公开 值 = 0x0111 注释 = "WM_COMMAND:菜单项、加速键或控件通知">
- 常量 通知 <公开 值 = 0x004E 注释 = "WM_NOTIFY:高级控件通知,lParam 指向 NMHDR">
- 常量 定时器 <公开 值 = 0x0113 注释 = "WM_TIMER:定时器触发">
- 常量 滚动 <公开 值 = 0x0115 注释 = "WM_VSCROLL:垂直滚动条事件">
- 常量 横向滚动 <公开 值 = 0x0114 注释 = "WM_HSCROLL:水平滚动条事件">
- 常量 复制数据 <公开 值 = 0x004A 注释 = "WM_COPYDATA:跨进程传递数据">
- 常量 拖放文件 <公开 值 = 0x0233 注释 = "WM_DROPFILES:文件拖放到窗口">
- 常量 电源 <公开 值 = 0x0218 注释 = "WM_POWERBROADCAST:电源状态改变(如电池、睡眠)">
- 常量 设备改变 <公开 值 = 0x0219 注释 = "WM_DEVICECHANGE:设备插入/移除">
- 常量 窗口位置改变 <公开 值 = 0x0047 注释 = "WM_WINDOWPOSCHANGED:窗口位置或Z序改变后">
- 常量 移动前 <公开 值 = 0x0046 注释 = "WM_WINDOWPOSCHANGING:窗口位置即将改变">
- 常量 设置光标 <公开 值 = 0x0020 注释 = "WM_SETCURSOR:设置光标形状">
- 常量 鼠标激活 <公开 值 = 0x0021 注释 = "WM_MOUSEACTIVATE:鼠标点击非活动窗口时激活">
- 常量 获取最小最大信息 <公开 值 = 0x0024 注释 = "WM_GETMINMAXINFO:获取窗口最小/最大尺寸限制">
- 常量 样式改变 <公开 值 = 0x007D 注释 = "WM_STYLECHANGED:窗口样式已改变">
- 常量 样式即将改变 <公开 值 = 0x007C 注释 = "WM_STYLECHANGING:窗口样式即将改变">
- 常量 设置图标 <公开 值 = 0x0080 注释 = "WM_SETICON:设置窗口大/小图标">
- 常量 获取图标 <公开 值 = 0x007F 注释 = "WM_GETICON:获取窗口图标">
- 常量 非客户区计算 <公开 值 = 0x0083 注释 = "WM_NCCALCSIZE:计算非客户区大小">
- 常量 非客户区绘制 <公开 值 = 0x0085 注释 = "WM_NCPAINT:绘制非客户区(如边框、标题栏)">
- 常量 非客户区按下 <公开 值 = 0x00A1 注释 = "WM_NCLBUTTONDOWN:非客户区左键按下">
- 常量 非客户区释放 <公开 值 = 0x00A2 注释 = "WM_NCLBUTTONUP:非客户区左键释放">
- 常量 非客户区双击 <公开 值 = 0x00A3 注释 = "WM_NCLBUTTONDBLCLK:非客户区左键双击">
- 常量 取消模式 <公开 值 = 0x001F 注释 = "WM_CANCELMODE:取消模态状态(如菜单、滚动条拖动)">
- 常量 设置消息结果 <公开 值 = 0x0038 注释 = "WM_SETMESSAGERESULT:设置消息返回值(用于对话框)">
- 常量 查询拖动图标 <公开 值 = 0x0049 注释 = "WM_QUERYDRAGICON:查询是否允许拖动窗口图标">
- 常量 捕获改变 <公开 值 = 0x0215 注释 = "WM_CAPTURECHANGED:鼠标捕获权变更">
- 常量 移动中 <公开 值 = 0x0232 注释 = "WM_MOVING:窗口正在被移动(可调整位置)">
- 常量 大小调整中 <公开 值 = 0x0231 注释 = "WM_SIZING:窗口正在被调整大小(可限制尺寸)">
- 常量 输入语言请求 <公开 值 = 0x0050 注释 = "WM_INPUTLANGCHANGEREQUEST:请求切换输入语言">
- 常量 输入语言改变 <公开 值 = 0x0051 注释 = "WM_INPUTLANGCHANGE:输入语言已改变">
- 常量 鼠标悬停 <公开 值 = 0x02A1 注释 = "WM_MOUSEHOVER:鼠标悬停(需TrackMouseEvent)">
- 常量 鼠标离开 <公开 值 = 0x02A3 注释 = "WM_MOUSELEAVE:鼠标离开窗口(需TrackMouseEvent)">
- 常量 热键 <公开 值 = 0x0312 注释 = "WM_HOTKEY:注册的全局热键被按下">
- 常量 主题改变 <公开 值 = 0x031A 注释 = "WM_THEMECHANGED:系统主题或视觉样式改变">
- 常量 桌面合成改变 <公开 值 = 0x0362 注释 = "WM_DWMCOMPOSITIONCHANGED:DWM 启用/禁用">
- 常量 桌面配色改变 <公开 值 = 0x0320 注释 = "WM_DWMCOLORIZATIONCOLORCHANGED:DWM 强调色改变">
- 常量 非客户区渲染改变 <公开 值 = 0x031F 注释 = "WM_DWMNCRENDERINGCHANGED:DWM 非客户区渲染方式改变">
- 常量 打印 <公开 值 = 0x0317 注释 = "WM_PRINT:要求窗口绘制到指定DC(用于打印/截图)">
- 常量 打印客户区 <公开 值 = 0x0318 注释 = "WM_PRINTCLIENT:仅绘制客户区到指定DC">
- 常量 字体改变 <公开 值 = 0x0029 注释 = "WM_FONTCHANGE:系统字体已改变">
- 常量 设置字体 <公开 值 = 0x0030 注释 = "WM_SETFONT:设置控件字体">
- 常量 获取字体 <公开 值 = 0x0031 注释 = "WM_GETFONT:获取控件当前字体">
- 常量 调色板改变 <公开 值 = 0x0311 注释 = "WM_PALETTECHANGED:另一个窗口改变了调色板">
- 常量 查询新调色板 <公开 值 = 0x030F 注释 = "WM_QUERYNEWPALETTE:窗口即将激活,询问是否使用新调色板">
- # ✅ 键盘与鼠标输入消息
- 常量 按键按下 <公开 值 = 0x0100 注释 = "WM_KEYDOWN:非系统键按下">
- 常量 按键释放 <公开 值 = 0x0101 注释 = "WM_KEYUP:非系统键释放">
- 常量 输入字符 <公开 值 = 0x0102 注释 = "WM_CHAR:可打印字符输入(由WM_KEYDOWN转换)">
- 常量 死字符 <公开 值 = 0x0103 注释 = "WM_DEADCHAR:死键字符">
- 常量 系统按键按下 <公开 值 = 0x0104 注释 = "WM_SYSKEYDOWN:Alt+键 或 F10 等系统键按下">
- 常量 系统按键释放 <公开 值 = 0x0105 注释 = "WM_SYSKEYUP:系统键释放">
- 常量 系统字符 <公开 值 = 0x0106 注释 = "WM_SYSCHAR:系统键产生的字符">
- 常量 系统死字符 <公开 值 = 0x0107 注释 = "WM_SYSDEADCHAR:系统死键字符">
- 常量 鼠标移动 <公开 值 = 0x0200 注释 = "WM_MOUSEMOVE:鼠标在窗口内移动">
- 常量 左键按下 <公开 值 = 0x0201 注释 = "WM_LBUTTONDOWN">
- 常量 左键释放 <公开 值 = 0x0202 注释 = "WM_LBUTTONUP">
- 常量 左键双击 <公开 值 = 0x0203 注释 = "WM_LBUTTONDBLCLK">
- 常量 右键按下 <公开 值 = 0x0204 注释 = "WM_RBUTTONDOWN">
- 常量 右键释放 <公开 值 = 0x0205 注释 = "WM_RBUTTONUP">
- 常量 滚轮 <公开 值 = 0x020A 注释 = "WM_MOUSEWHEEL:鼠标滚轮滚动;wParam=按键状态, HIWORD(zDelta)">
- # ✅ 菜单相关消息
- 常量 初始化菜单 <公开 值 = 0x0116 注释 = "WM_INITMENU:菜单即将显示">
- 常量 初始化菜单弹出框 <公开 值 = 0x0117 注释 = "WM_INITMENUPOPUP:弹出菜单即将显示">
- 常量 菜单选择 <公开 值 = 0x011F 注释 = "WM_MENUSELECT:菜单项被选中或取消">
- 常量 菜单命令 <公开 值 = 0x0126 注释 = "WM_MENUCOMMAND:菜单命令(扩展)">
- 常量 上下文菜单 <公开 值 = 0x007B 注释 = "WM_CONTEXTMENU:请求上下文菜单(通常右键)">
- 常量 进入菜单模式 <公开 值 = 0x0211 注释 = "WM_ENTERMENULOOP:进入菜单模态循环">
- 常量 退出菜单模式 <公开 值 = 0x0125 注释 = "WM_EXITMENULOOP:退出菜单模态循环">
- #
- }
- 类 窗口扩展样式 <公开 注释 = "AI生成的,不保证准确性" 折叠 @常量类 = 整数>
- {
- 常量 窗口透明 <公开 值 = 0x00000020 注释 = "WS_EX_LAYERED 窗口透明">
- 常量 置顶 <公开 值 = 0x00000008 注释 = "WS_EX_TOPMOST 总在最前">
- 常量 工具窗口 <公开 值 = 0x00000080 注释 = "WS_EX_TOOLWINDOW 工具栏小窗">
- 常量 接受文件拖放 <公开 值 = 0x00000010 注释 = "WS_EX_ACCEPTFILES 接受文件拖放">
- 常量 应用窗口 <公开 值 = 0x00040000 注释 = "WS_EX_APPWINDOW 任务栏显示">
- 常量 左对齐 <公开 值 = 0x00000000 注释 = "WS_EX_LEFT 默认左对齐">
- 常量 右对齐 <公开 值 = 0x00002000 注释 = "WS_EX_RIGHT 右对齐">
- 常量 从左到右阅读 <公开 值 = 0x00000000 注释 = "WS_EX_LTRREADING 从左到右阅读">
- 常量 从右到左阅读 <公开 值 = 0x00002000 注释 = "WS_EX_RTLREADING 从右到左阅读">
- 常量 左滚动条 <公开 值 = 0x00004000 注释 = "WS_EX_LEFTSCROLLBAR 滚动条在左侧">
- 常量 右滚动条 <公开 值 = 0x00000000 注释 = "WS_EX_RIGHTSCROLLBAR 默认右侧滚动条">
- 常量 静态边缘 <公开 值 = 0x00020000 注释 = "WS_EX_STATICEDGE 静态边框">
- 常量 客户端边缘 <公开 值 = 0x00000200 注释 = "WS_EX_CLIENTEDGE 客户区凹陷边框">
- 常量 窗口边缘 <公开 值 = 0x00000100 注释 = "WS_EX_WINDOWEDGE 窗口凸起边框">
- 常量 控制父窗口 <公开 值 = 0x00010000 注释 = "WS_EX_CONTROLPARENT 允许遍历子控件">
- 常量 上下文帮助 <公开 值 = 0x00000400 注释 = "WS_EX_CONTEXTHELP 标题栏问号帮助">
- 常量 复合层 <公开 值 = 0x00000200 注释 = "WS_EX_COMPOSITED 双缓冲减少闪烁">
- 常量 水平滚动条 <公开 值 = 0x00010000 注释 = "WS_EX_HSCROLL 水平滚动条">
- 常量 垂直滚动条 <公开 值 = 0x00020000 注释 = "WS_EX_VSCROLL 垂直滚动条">
- 常量 对话框模态框 <公开 值 = 0x00000001 注释 = "WS_EX_DLGMODALFRAME 对话框模态边框">
- 常量 无父窗口 <公开 值 = 0x00040000 注释 = "WS_EX_NOPARENTNOTIFY 不通知父窗口">
- 常量 重叠窗口 <公开 值 = 0x00000000 注释 = "WS_EX_OVERLAPPEDWINDOW 重叠窗口样式组合">
- 常量 调色板窗口 <公开 值 = 0x00080000 注释 = "WS_EX_PALETTEWINDOW 调色板窗口样式组合">
- 常量 分层 <公开 值 = 0x00080000 注释 = "WS_EX_LAYERED 分层窗口透明/色键">
- 常量 鼠标透传 <公开 值 = 0x00000020 注释 = "WS_EX_TRANSPARENT 鼠标透传">
- 常量 MDI子窗口 <公开 值 = 0x00000040 注释 = "WS_EX_MDICHILD MDI 子窗口">
- #
- }
- 类 窗口句柄类 <公开 注释 = "by: 小蜗牛" 注释 = "可以平替 变整数 的窗口句柄." 注释 = "可以操作其它进程的窗口,也可以操作自己进程的~" 折叠 @别名 = "HWND"
- @别名类型 = 本地整数基本类型 @有效值范围 = "0">
- {
- 常量 MAX_PATH <类型 = 整数 值 = @MAX_PATH 注释 = "编译器所支持的最长全路径名的长度">
- 方法 子类化回调模板 <静态 类型 = 变整数 折叠>
- 参数 窗口句柄 <类型 = 窗口句柄类>
- 参数 消息 <类型 = 系统保留窗口消息 注释 = "如果是用户数据,或者常量里没有,可以自己转为整数 去判断!">
- 参数 WPARAM <类型 = 变整数>
- 参数 LPARAM <类型 = 变整数>
- {
- 变量 返回值 <类型 = 整数>
- 变量 原先的函数 <类型 = 变整数 注释 = "必须要赋值! 子类化窗口() 的返回值">
- 原先的函数 = 窗口句柄.取用户数据 () // 只是演示用法..需要自己设置才能获取到哦~
- 返回 (窗口句柄.调用原窗口过程 (原先的函数, 消息, WPARAM, LPARAM))
- }
- 方法 子类化窗口 <公开 静态 类型 = 变整数 注释 = "替换窗口过程: HOOK,高级功能" 注释 = "可以用属性表,在回调函数里使用哦~~"
- 返回值注释 = "返回之前的函数地址~在回调中,务必使用此返回值,再使用后,必须还原回去!" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 替换函数 <注释 = "提供所欲执行的线程函数" @匹配方法 = "子类化回调模板">
- {
- @ (INT_P)SetWindowLongPtr (@<当前对象>, GWLP_WNDPROC, (LONG_PTR)&@<替换函数>)
- }
- 方法 调用原窗口过程 <公开 静态 类型 = 变整数 注释 = "高级功能, 将消息信息传递给指定的窗口过程。" 折叠 @嵌入式方法 = "">
- 参数 窗口句柄 <类型 = 窗口句柄类>
- 参数 函数地址 <类型 = 变整数 注释 = "子类化窗口() 的返回值">
- 参数 消息 <类型 = 系统保留窗口消息>
- 参数 参数1 <类型 = 变整数>
- 参数 参数2 <类型 = 变整数>
- {
- @ (INT_P)CallWindowProc ((WNDPROC)@<函数地址>, @<窗口句柄>, (UINT)@<消息>, (WPARAM)@<参数1>, (LPARAM)@<参数2>)
- }
- 方法 发送消息_超时 <公开 静态 类型 = 变整数 注释 = "高级功能, 同步把消息发到指定窗口(或广播到所有顶层窗口),但最多等 uTimeout 毫秒**;"
- 注释 = "时间一到或对方线程“卡死”,函数立即返回,避免自己也被挂死。" 返回值注释 = "如果函数失败或超时,则返回值为 0。" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 消息 <类型 = 系统保留窗口消息 注释 = "如果没有,自己强转">
- 参数 wParam <类型 = 变整数>
- 参数 lParam <类型 = 变整数>
- 参数 行为标志 <类型 = 整数 注释 = "可以自己 连续位或() 来组合~" 注释 = "默认为: SMTO_ABORTIFHUNG | SMTO_BLOCK"
- 注释 = "0x0000=等待时可处理本线程其他非队列消息。 SMTO_NORMAL"
- 注释 = "0x0001=阻塞本线程,等待期间不处理任何其他消息。 SMTO_BLOCK"
- 注释 = "0x0002=若接收线程已“挂起”,立即返回,不等待。 SMTO_ABORTIFHUNG"
- 注释 = "0x0008=只要对方未挂起,就不强制超时,一直等下去。 SMTO_NOTIMEOUTIFNOTHUNG"
- 注释 = "0x0020=窗口被销毁或线程死亡时返回 0 并设 ERROR_SUCCESS。 SMTO_ERRORONEXIT" @默认值 = 3>
- 参数 超时 <类型 = 整数 注释 = "超时期限的持续时间(以毫秒为单位)。 如果消息是广播消息,则每个窗口都可以使用全职超时期限。"
- 注释 = "例如,如果指定了 5 秒超时期限,并且有三个无法处理消息的顶级窗口,则最多可以延迟 15 秒。">
- 参数 接收消息处理结果 <类型 = 变整数 注释 = "可选;接收消息处理结果" @默认值 = 0>
- {
- @ (INT_P)SendMessageTimeout (@<当前对象>, (INT)@<消息>, (WPARAM)@<wParam>, (LPARAM)@<lParam>, (INT)@<行为标志>, @<超时>, (PDWORD_PTR)@<接收消息处理结果>)
- }
- 方法 发送消息 <公开 静态 类型 = 变整数 注释 = "高级功能~" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 消息 <类型 = 系统保留窗口消息 注释 = "如果没有,自己强转">
- 参数 wParam <类型 = 变整数>
- 参数 lParam <类型 = 变整数>
- {
- @ (INT_P)SendMessage (@<当前对象>, (INT)@<消息>,(WPARAM)@<wParam>,(LPARAM)@<lParam>)
- }
- 方法 投递消息 <公开 静态 类型 = 变整数 注释 = "高级功能~" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 消息 <类型 = 系统保留窗口消息 注释 = "如果没有,自己强转">
- 参数 wParam <类型 = 变整数>
- 参数 lParam <类型 = 变整数>
- {
- @ (INT_P)PostMessage (@<当前对象>, (INT)@<消息>,(WPARAM)@<wParam>,(LPARAM)@<lParam>)
- }
- 方法 置父 <公开 静态 类型 = 窗口句柄类 返回值注释 = "返回前一个父窗口句柄!" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 父窗口句柄 <类型 = 窗口句柄类>
- {
- @ SetParent (@<当前对象>, @<父窗口句柄>)
- }
- 方法 是否有效 <公开 静态 类型 = 逻辑型 注释 = "判断一个窗口句柄是否有效" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ IsWindow (@<当前对象>)
- }
- 方法 取DPI <公开 静态 类型 = 整数 注释 = "需要 Win10 1607+,失败返回0" 注释 = "计算DPI放大: @<所欲使用尺寸值> * @<DPI> / 96"
- 注释 = "计算DPI缩小: @<所欲使用尺寸值> * 96 / @<DPI>" 返回值注释 = "返回 96/120/144/192 等,做高 DPI 缩放必备。" 折叠>
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- 变量 回调函数 <类型 = 变整数>
- 变量 DPI <类型 = 整数>
- 回调函数 = 取DLL函数地址 ("User32.dll", "GetDpiForWindow")
- 如果 (回调函数 != 0)
- {
- DPI = 调用静态方法 (回调函数, 整数, 当前对象)
- }
- 返回 (DPI)
- }
- 方法 取DLL函数地址 <静态 类型 = 变整数 折叠 @嵌入式方法 = "">
- 参数 DLL <类型 = 文本型 注释 = "ntdll.dll">
- 参数 函数名称 <类型 = 文本型 @需求类型 = 立即数或常量>
- {
- @ (INT_P)GetProcAddress (GetModuleHandleW (@<DLL>.GetText()), &R@sn<quot>(@pvpt<函数名称>)@sn<quot>[0])
- }
- 方法 "//隐藏" <公开 静态 类型 = 逻辑型 注释 = "隐藏窗口" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ ShowWindow (@<当前对象>, SW_HIDE)
- }
- 方法 显示 <公开 静态 类型 = 逻辑型 注释 = "显示窗口" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 是否显示 <类型 = 逻辑型 @默认值 = 真>
- {
- @ ShowWindow (@<当前对象>, @<是否显示> ? SW_SHOW : SW_HIDE)
- }
- 方法 最小化 <公开 静态 类型 = 逻辑型 注释 = "顾名思义" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类 注释 = "窗口句柄">
- {
- @ (BOOL)ShowWindow(@<当前对象>, SW_MINIMIZE)
- }
- 方法 最大化 <公开 静态 类型 = 逻辑型 注释 = "顾名思义" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类 注释 = "窗口句柄">
- {
- @ (BOOL)ShowWindow(@<当前对象>, SW_MAXIMIZE)
- }
- 方法 是否最大化 <公开 静态 类型 = 逻辑型 注释 = "顾名思义" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ IsZoomed (@<当前对象>)
- }
- 方法 是否最小化 <公开 静态 类型 = 逻辑型 注释 = "顾名思义" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ IsIconic (@<当前对象>)
- }
- 方法 取消最小化 <公开 静态 类型 = 逻辑型 注释 = "顾名思义" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ OpenIcon((HWND)@<当前对象>)
- }
- 方法 取消最大化 <公开 静态 类型 = 逻辑型 注释 = "顾名思义" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ (BOOL)ShowWindow((HWND)@<当前对象>, SW_RESTORE)
- }
- 方法 取类名 <公开 静态 类型 = 文本型 折叠>
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- 变量 类名 <类型 = "字符 [260]">
- @ GetClassName (@<当前对象>, @<类名>, NUM_ELEMENTS_OF (@<类名>));
- 返回 (字符数组到文本 (类名, 取数组成员数 (类名)))
- }
- 方法 取进程ID <公开 静态 类型 = 整数 注释 = "获取窗口的进程ID" 折叠>
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- 变量 进程ID <类型 = 整数>
- 变量 线程标识符 <类型 = 整数 注释 = "如果函数成功,则返回值是创建窗口的线程的标识符。 如果窗口句柄无效,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。">
- @ @<线程标识符> = (INT)GetWindowThreadProcessId ((HWND)@<当前对象>, (LPDWORD)&@<进程ID>);
- 如果 (线程标识符 == 0)
- {
- 返回 (0)
- }
- 返回 (进程ID)
- }
- 方法 取线程ID <公开 静态 类型 = 整数 注释 = "获取窗口所属的线程ID" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ GetWindowThreadProcessId (@<当前对象>, NULL)
- }
- 方法 激活窗口 <公开 静态 类型 = 逻辑型 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ SetForegroundWindow (@<当前对象>)
- }
- 方法 枚举子窗口 <公开 静态 类型 = 变整数数组类 注释 = "自己强制转换后使用~懒得再新建一个类了" 注释 = "仅枚举指定父窗口下面的整个子窗口树" 返回值注释 = "窗口句柄类 数组" 折叠>
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- 变量 返回子窗口句柄数组 <类型 = 变整数数组类>
- 变量 回调函数 <类型 = 变整数>
- 返回子窗口句柄数组.删除所有成员 ()
- 回调函数 = 取静态方法地址 (__窗口枚举过程)
- @ EnumChildWindows (@<当前对象>, (WNDENUMPROC)@<回调函数>, &@<返回子窗口句柄数组>);
- 返回 (返回子窗口句柄数组)
- }
- 方法 __窗口枚举过程 <静态 类型 = 逻辑型 折叠>
- 参数 hWnd <类型 = 变整数>
- 参数 lParam <类型 = 变整数>
- {
- 如果 (hWnd != 0)
- {
- 读指针处对象 (lParam, 变整数数组类).加入成员 (hWnd)
- 返回 (真)
- }
- 返回 (假)
- }
- 方法 移动 <公开 静态 类型 = 逻辑型 注释 = "移动窗口或者组件" 折叠>
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 左边 <类型 = 整数>
- 参数 顶边 <类型 = 整数>
- 参数 新宽度 <类型 = 整数 注释 = "-1为不修改" @默认值 = -1>
- 参数 新高度 <类型 = 整数 注释 = "-1为不修改" @默认值 = -1>
- {
- 变量 矩形 <类型 = 矩形类>
- 如果 (当前对象.是否有效 () == 假)
- {
- 返回 (假)
- }
- 如果 (新宽度 == -1 || 新高度 == -1) // 获取信息~
- {
- 矩形 = 当前对象.取位置 ()
- }
- 如果 (新宽度 == -1)
- {
- 新宽度 = 矩形.宽度
- }
- 如果 (新高度 == -1)
- {
- 新高度 = 矩形.高度
- }
- 返回 (当前对象.置位置 (左边, 顶边, 新宽度, 新高度, 真))
- }
- 方法 置位置 <公开 静态 类型 = 逻辑型 注释 = "更改指定窗口的位置和尺寸。 对于顶级窗口,位置和尺寸是相对于屏幕左上角的。 对于子窗口,它们相对于父窗口工作区的左上角。" 折叠
- @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 左侧位置 <类型 = 整数>
- 参数 顶部位置 <类型 = 整数>
- 参数 新宽度 <类型 = 整数>
- 参数 新高度 <类型 = 整数>
- 参数 是否重画 <类型 = 逻辑型>
- {
- @ MoveWindow(@<当前对象>, @<左侧位置>, @<顶部位置>, @<新宽度>, @<新高度>, @<是否重画>)
- }
- 方法 取位置 <公开 静态 类型 = 矩形类 注释 = "请确保窗口句柄有效" 折叠>
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- 变量 返回矩形变量 <类型 = 矩形类>
- @ RECT rt;
- @ if (GetWindowRect (@<当前对象>,&rt)){
- @ @<返回矩形变量>.Copy (&rt);
- @ }
- 返回 (返回矩形变量)
- }
- 方法 取实例句柄 <公开 静态 类型 = 变整数 注释 = "窗口所属模块" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ GetWindowLongPtr(@<当前对象>, GWLP_HINSTANCE)
- }
- 方法 取文件路径 <公开 静态 类型 = 文本型 注释 = "得到 EXE/DLL 全路径" 折叠 "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- 变量 hInst <类型 = 变整数 注释 = "HINSTANCE">
- 变量 szPath <类型 = "字符 [260]">
- hInst = 当前对象.取实例句柄 ()
- @ GetModuleFileName((HINSTANCE)@<hInst>, @<szPath>, NUM_ELEMENTS_OF (@<szPath>)); // 得到 EXE/DLL 全路径
- 返回 (字符数组到文本 (szPath, 取数组成员数 (szPath)))
- }
- 方法 取窗口标题 <公开 静态 类型 = 文本型 注释 = "窗口标题" 折叠>
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- 变量 标题长度 <类型 = 整数>
- 变量 获取标题 <类型 = 文本型>
- @ @<标题长度> = GetWindowTextLength ((HWND)@<当前对象>);
- 如果 (标题长度 == 0)
- {
- 返回 ("")
- }
- 填充文本 (获取标题, 标题长度 + 1)
- @ GetWindowText ((HWND)@<当前对象>,(LPWSTR)@<获取标题>.GetText(),(INT)@<获取标题>.GetLength ());
- 返回 (获取标题)
- }
- 方法 置窗口标题 <公开 静态 类型 = 逻辑型 注释 = "设置窗口标题" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 要设置的标题 <类型 = 文本型>
- {
- @ SetWindowText ((HWND)@<当前对象>,@<要设置的标题>.GetText())
- }
- 方法 取控件内容 <公开 静态 类型 = 文本型 注释 = "例如取指定编辑框中的内容" 折叠>
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 最大长度 <类型 = 整数 注释 = "0 为不限制~" @默认值 = 0>
- 参数 超时 <类型 = 整数 注释 = "单位: 毫秒 如果是 -1 则不设置超时~" @默认值 = 3000>
- 参数 返回是否成功 <类型 = 逻辑型类 @默认值 = 空对象>
- {
- 变量 返回值 <类型 = 文本型>
- 变量 内容长度 <类型 = 整数>
- 如果 (超时 != -1)
- {
- 内容长度 = (整数)当前对象.发送消息_超时 (系统保留窗口消息.文本长度, 0, 0, , 超时, 0)
- }
- 否则
- {
- 内容长度 = (整数)当前对象.发送消息 (系统保留窗口消息.文本长度, 0, 0)
- }
- 如果 (内容长度 == 0)
- {
- 返回是否成功.值 = 假
- 返回 ("")
- }
- 如果 (最大长度 != 0 && 内容长度 > 最大长度)
- {
- 内容长度 = 最大长度
- }
- 如果 (超时 != -1)
- {
- 返回是否成功.值 = 当前对象.发送消息_超时 (系统保留窗口消息.获取文本, 内容长度, 填充文本 (返回值, 内容长度), , 超时, 0) != 0
- }
- 否则
- {
- 返回是否成功.值 = 当前对象.发送消息 (系统保留窗口消息.获取文本, 内容长度, 填充文本 (返回值, 内容长度)) != 0
- }
- 如果 (返回是否成功.值 == 假)
- {
- 返回 ("")
- }
- 返回 (返回值)
- }
- 方法 置控件内容 <公开 静态 类型 = 逻辑型 注释 = "例如往指定的编辑框里写入内容" 折叠>
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 内容 <类型 = 文本型>
- 参数 超时 <类型 = 整数 注释 = "单位:毫秒, -1为不设置超时" @默认值 = -1>
- {
- 变量 返回值 <类型 = 逻辑型>
- 如果 (超时 != -1)
- {
- 返回值 = 当前对象.发送消息_超时 (系统保留窗口消息.设置文本, 0, 取文本指针 (内容), , 超时, 0) != 0
- }
- 否则
- {
- 返回值 = 当前对象.发送消息 (系统保留窗口消息.设置文本, 0, 取文本指针 (内容)) != 0
- }
- 返回 (返回值)
- }
- 方法 属性表_置值 <公开 静态 类型 = 逻辑型 注释 = "类似独属于"窗口/组件"的,文本到变整数哈希表,每一个窗口/组件,都有一个独立的表" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 属性名称 <类型 = 文本型>
- 参数 属性值 <类型 = 变整数>
- {
- @ ::SetProp (@<当前对象>, @<属性名称>.GetText (), (HANDLE)@<属性值>)
- }
- 方法 属性表_取值 <公开 静态 类型 = 变整数 注释 = "类似独属于"窗口/组件"的,文本到变整数哈希表,每一个窗口/组件,都有一个独立的表" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 属性名称 <类型 = 文本型>
- {
- @ ::GetProp (@<当前对象>, @<属性名称>.GetText ())
- }
- 方法 属性表_删除 <公开 静态 类型 = 变整数 注释 = "类似独属于"窗口/组件"的,文本到变整数哈希表,每一个窗口/组件,都有一个独立的表"
- 返回值注释 = "返回之前记录的值,用于回收, 如果不存在,则为0" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 属性名称 <类型 = 文本型>
- {
- @ (INT_P)RemoveProp (@<当前对象>, @<属性名称>.GetText ())
- }
- 方法 属性表_枚举 <公开 静态 类型 = 整数 注释 = "类似独属于"窗口/组件"的,文本到变整数哈希表,每一个窗口/组件,都有一个独立的表" 折叠>
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 返回主键数组 <类型 = 文本数组类 @默认值 = 空对象>
- 参数 返回值数组 <类型 = 变整数数组类 @默认值 = 空对象>
- {
- 变量 传递参数 <类型 = "变整数 [2]">
- 返回主键数组.删除所有成员 ()
- 返回值数组.删除所有成员 ()
- 传递参数 [0] = 返回主键数组.取对象自身指针 ()
- 传递参数 [1] = 返回值数组.取对象自身指针 ()
- @ EnumPropsEx (@<当前对象>,(PROPENUMPROCEX)&@<窗口句柄类.__属性表_枚举_回调函数>, (LPARAM)&@<传递参数>);
- 返回 (返回主键数组.取成员数 ())
- }
- 方法 属性表_清空 <公开 静态 类型 = 整数 注释 = "类似独属于"窗口/组件"的,文本到变整数哈希表,每一个窗口/组件,都有一个独立的表" 折叠>
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 返回被清空主键数组 <类型 = 文本数组类 @默认值 = 空对象>
- 参数 返回被清空值数组 <类型 = 变整数数组类 @默认值 = 空对象>
- {
- 变量 i <类型 = 整数>
- 当前对象.属性表_枚举 (返回被清空主键数组, 返回被清空值数组)
- 循环 (0, 返回被清空主键数组.取成员数 (), i)
- {
- 当前对象.属性表_删除 (返回被清空主键数组.取成员 (i))
- }
- 返回 (返回被清空主键数组.取成员数 ())
- }
- 方法 __属性表_枚举_回调函数 <静态 类型 = 逻辑型 折叠>
- 参数 窗口句柄 <类型 = 变整数>
- 参数 属性名 <类型 = 文本指针>
- 参数 属性值 <类型 = 变整数>
- 参数 用户数据 <类型 = 变整数>
- {
- 变量 主键数组 <类型 = 变整数>
- 变量 值数组 <类型 = 变整数>
- 主键数组 = 读指针处值 (用户数据, 变整数)
- 值数组 = 读指针处值 (用户数据 + 取变整数尺寸 (), 变整数)
- 读指针处对象 (主键数组, 文本数组类).加入成员 (属性名.取文本 ())
- 读指针处对象 (值数组, 变整数数组类).加入成员 (属性值)
- 返回 (真) // 返回 TRUE → 继续枚举下一项
- }
- 方法 取用户数据 <公开 静态 类型 = 变整数 注释 = "组件/窗口的用户数据,类似 对象.标记值" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ GetWindowLongPtr(@<当前对象>, GWLP_USERDATA)
- }
- 方法 置用户数据 <公开 静态 类型 = 变整数 注释 = "组件/窗口的用户数据,类似 对象.标记值" 返回值注释 = "返回之前的用户数据" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 数据指针 <类型 = 变整数>
- {
- @ (INT_P)SetWindowLongPtr(@<当前对象>, GWLP_USERDATA, @<数据指针>)
- }
- 方法 重画 <公开 静态 类型 = 逻辑型 注释 = "更新窗口(立即重绘,不经过消息队列)" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ UpdateWindow(@<当前对象>)
- }
- 方法 取用户区矩形 <公开 静态 类型 = 矩形类 注释 = "获取并返回当前组件的用户区矩形位置,对窗口而言,用户区域为窗口区域减去标题栏+菜单栏+边框后的区域." 折叠>
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- 变量 返回矩形变量 <类型 = 矩形类>
- @ RECT rt;
- @ if( GetClientRect (@<当前对象>,&rt)){
- @ @<返回矩形变量>.Copy (&rt); // 取回所获得的位置矩形
- @ }
- 返回 (返回矩形变量)
- }
- 方法 置顶 <公开 静态 类型 = 逻辑型 注释 = "对窗口进行置顶、激活等操作(注:非强制显示隐藏窗口)" 折叠 @禁止流程检查 = 真>
- 参数 当前对象 <类型 = 窗口句柄类 注释 = "窗口句柄">
- 参数 是否总在最前 <类型 = 逻辑型 注释 = "默认为假:取消总在最前 真:总在最前" @默认值 = 真>
- 参数 是否激活 <类型 = 逻辑型 注释 = "默认为激活,如果为假,窗口显示后不激活,不获取键盘焦点" @默认值 = 真>
- {
- 常量 HWND_NOTOPMOST <类型 = 整数 值 = @HWND_NOTOPMOST 注释 = "-2">
- 常量 HWND_TOPMOST <类型 = 整数 值 = @HWND_TOPMOST 注释 = "-1">
- 常量 SWP_NOMOVE <类型 = 整数 值 = @SWP_NOMOVE 注释 = "2">
- 常量 SWP_NOSIZE <类型 = 整数 值 = @SWP_NOSIZE 注释 = "1">
- 常量 SWP_SHOWWINDOW <类型 = 整数 值 = @SWP_NOSIZE 注释 = "64">
- 常量 SWP_NOACTIVATE <类型 = 整数 值 = @SWP_NOACTIVATE
- 注释 = "16 不激活窗口。如果未设置此标志,则激活窗口并将其移到最顶层或非顶层组的顶部(取决于hWndInsertAfter参数的设置)。">
- 变量 uFlags <类型 = 整数>
- 变量 返回值 <类型 = 逻辑型>
- uFlags = 连续位或 (SWP_NOMOVE, SWP_NOSIZE, 选择 (是否激活, SWP_SHOWWINDOW, SWP_NOACTIVATE)) // 连续位或 (SWP_NOMOVE, SWP_NOSIZE, SWP_SHOWWINDOW)
- @ @<返回值> = SetWindowPos (@<当前对象>, @ @<是否总在最前> ? HWND_TOPMOST : HWND_NOTOPMOST,0,0,0,0,uFlags);
- 如果 (返回值 && 是否激活)
- {
- @ SwitchToThisWindow (@<当前对象>, true);
- }
- 返回 (返回值)
- }
- 方法 取父句柄 <公开 静态 类型 = 窗口句柄类 注释 = "如果窗口是子窗口,则返回值是父窗口的句柄。 如果窗口是具有 WS_POPUP 样式的顶级窗口,则返回值是所有者窗口的句柄。" 折叠
- @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ GetParent (@<当前对象>)
- }
- 方法 取扩展样式 <公开 静态 类型 = 窗口扩展样式 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ (@dt<窗口扩展样式>)GetWindowLongPtr(@<当前对象>, GWL_EXSTYLE)
- }
- 方法 扩展样式是否存在 <公开 静态 类型 = 逻辑型 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 判断样式 <类型 = 窗口扩展样式 注释 = "WS_EX_*">
- {
- @ (INT)GetWindowLongPtr(@<当前对象>, GWL_EXSTYLE) & (INT)@<判断样式> != 0
- }
- 方法 置扩展样式 <公开 静态 类型 = 窗口扩展样式 注释 = "添加扩展样式" 返回值注释 = "返回旧样式" 折叠>
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 新增样式 <类型 = 窗口扩展样式 注释 = "WS_EX_* 位或组合">
- {
- 变量 旧样式 <类型 = 窗口扩展样式>
- 旧样式 = 当前对象.取扩展样式 ()
- @ SetWindowLongPtr(@<当前对象>, GWL_EXSTYLE, (INT)@<旧样式> | (INT)@<新增样式>);
- 返回 (旧样式)
- }
- 方法 置透明度 <公开 静态 类型 = 逻辑型 注释 = "分层窗口透明度(需 WS_EX_LAYERED) 只对窗口有效!" 折叠 @禁止流程检查 = 真>
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 透明度 <类型 = 整数 注释 = "0-255, 255=不透明">
- 参数 添加样式 <类型 = 逻辑型 @默认值 = 真>
- {
- 如果 (添加样式 == 真 && 当前对象.扩展样式是否存在 (窗口扩展样式.分层) == 假)
- {
- 当前对象.置扩展样式 (窗口扩展样式.分层)
- }
- @ return SetLayeredWindowAttributes(@<当前对象>, 0, @<透明度>, LWA_ALPHA);
- }
- 方法 闪烁 <公开 静态 类型 = 逻辑型 折叠 @禁止流程检查 = 真>
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 闪烁次数 <类型 = 整数 @默认值 = 5>
- 参数 闪烁间隔 <类型 = 整数 注释 = "使用系统默认间隔" @默认值 = 0>
- {
- @ FLASHWINFO info ;
- @ info.cbSize = sizeof (info);
- @ info.hwnd = @<当前对象>;
- @ info.dwFlags = FLASHW_CAPTION | FLASHW_TRAY; // 标题栏+任务栏
- @ info.uCount = @<闪烁次数>;
- @ info.dwTimeout = @<闪烁间隔>; // 使用系统默认间隔
- @ return FlashWindowEx(&info);
- }
- 方法 是否可见 <公开 静态 类型 = 逻辑型 注释 = "它只判断“自身样式”+“父链”,不判断是否被别的窗口遮挡、不判断是否被最小化、不判断是否在屏幕外。"
- 返回值注释 = "真=窗口本身体式可见且从顶层到它的父链全部没被隐藏"
- 返回值注释 = "假=只要有一层 ShowWindow(SW_HIDE)、SetWindowPos 带 SWP_HIDEWINDOW、WS_VISIBLE 样式被清掉,就返回 FALSE" 折叠
- @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ IsWindowVisible (@<当前对象>)
- }
- 方法 是否置顶 <公开 静态 类型 = 逻辑型 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ ((INT)GetWindowLongPtr (@<当前对象>, GWL_EXSTYLE) & WS_EX_TOPMOST) != 0
- }
- 方法 通知关闭窗口 <公开 静态 注释 = "将指定窗口销毁(无返回值)" 折叠 @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- {
- @ PostMessage (@<当前对象>, WM_CLOSE, NULL, NULL)
- }
- 方法 通知退出程序 <公开 静态 注释 = "通知退出程序啦~" @嵌入式方法 = "">
- 参数 当前对象 <类型 = 窗口句柄类>
- 参数 退出码 <类型 = 整数 @默认值 = 0>
- {
- @ PostMessage (@<当前对象>, WM_QUIT, @<退出码>, NULL)
- }
- #
- }
复制代码
|
|