窗口拖到屏幕边缘自动隐藏成细条,鼠标移上去自动弹出,和QQ/VX侧边栏效果一模一样。
码字不易,觉得好用的话麻烦点个好评,让我知道没白忙活~
1.纯源码,无任何模块依赖
2.支持四个方向:左、右、上、下
3.销毁时记得关闭隐藏效果
4.支持多个窗口独立使用,比如创建的窗口
5.自动修正窗口位置(移出屏幕部分自动归位).版本 2
.程序集 窗口程序集_启动窗口
.子程序 _按钮1_被单击
靠边隐藏开启 (_启动窗口.取窗口句柄 (), 5) ' 5隐藏漏出来的宽度
.子程序 _按钮2_被单击
载入 (窗口1, , 假)
.子程序 __启动窗口_将被销毁
靠边隐藏关闭 (_启动窗口.取窗口句柄 ())
.子程序 靠边隐藏开启, 逻辑型, 公开
.参数 窗口句柄, 整数型
.参数 隐藏宽度, 整数型, 可空
.局部变量 新窗口过程, 子程序指针
.局部变量 已安装, 逻辑型
.如果真 (窗口句柄 = 0)
返回 (假)
.如果真结束
已安装 = 读窗口数据 (窗口句柄, “靠边_已安装”) = 1
.如果真 (已安装)
返回 (假)
.如果真结束
.如果真 (是否为空 (隐藏宽度))
隐藏宽度 = 10
.如果真结束
.如果真 (隐藏宽度 < 2)
隐藏宽度 = 2
.如果真结束
.如果真 (隐藏宽度 > 50)
隐藏宽度 = 50
.如果真结束
写窗口数据 (窗口句柄, “靠边_隐藏条宽度”, 隐藏宽度)
写窗口数据 (窗口句柄, “靠边_正常宽度”, 取窗口宽度 (窗口句柄))
写窗口数据 (窗口句柄, “靠边_正常高度”, 取窗口高度 (窗口句柄))
写窗口数据 (窗口句柄, “靠边_正常左边”, 取窗口左边 (窗口句柄))
写窗口数据 (窗口句柄, “靠边_正常顶边”, 取窗口顶边 (窗口句柄))
新窗口过程 = &窗口过程回调_靠边
写窗口数据 (窗口句柄, “靠边_旧窗口过程”, SetWindowLongA (窗口句柄, -4, 到整数 (新窗口过程)))
写窗口数据 (窗口句柄, “靠边_定时器ID”, SetTimer (窗口句柄, 1, 50, 0))
写窗口数据 (窗口句柄, “靠边_已安装”, 1)
写窗口数据 (窗口句柄, “靠边_隐藏方向”, 0)
写窗口数据 (窗口句柄, “靠边_鼠标在窗口上”, 0)
写窗口数据 (窗口句柄, “靠边_正在隐藏”, 0)
写窗口数据 (窗口句柄, “靠边_禁止隐藏时间”, 0)
返回 (真)
.子程序 靠边隐藏关闭, 逻辑型, 公开
.参数 窗口句柄, 整数型
.局部变量 隐藏方向, 整数型
.局部变量 定时器ID, 整数型
.局部变量 旧窗口过程, 整数型
.局部变量 正常左边, 整数型
.局部变量 正常顶边, 整数型
.局部变量 正常宽度, 整数型
.局部变量 正常高度, 整数型
.局部变量 已安装, 逻辑型
.如果真 (窗口句柄 = 0)
返回 (假)
.如果真结束
已安装 = 读窗口数据 (窗口句柄, “靠边_已安装”) = 1
.如果真 (已安装 = 假)
返回 (假)
.如果真结束
隐藏方向 = 读窗口数据 (窗口句柄, “靠边_隐藏方向”)
.如果真 (隐藏方向 ≠ 0)
正常左边 = 读窗口数据 (窗口句柄, “靠边_正常左边”)
正常顶边 = 读窗口数据 (窗口句柄, “靠边_正常顶边”)
正常宽度 = 读窗口数据 (窗口句柄, “靠边_正常宽度”)
正常高度 = 读窗口数据 (窗口句柄, “靠边_正常高度”)
MoveWindow (窗口句柄, 正常左边, 正常顶边, 正常宽度, 正常高度, 真)
.如果真结束
定时器ID = 读窗口数据 (窗口句柄, “靠边_定时器ID”)
.如果真 (定时器ID ≠ 0)
KillTimer (窗口句柄, 定时器ID)
.如果真结束
旧窗口过程 = 读窗口数据 (窗口句柄, “靠边_旧窗口过程”)
.如果真 (旧窗口过程 ≠ 0 且 旧窗口过程 ≠ -1)
SetWindowLongA (窗口句柄, -4, 旧窗口过程)
.如果真结束
写窗口数据 (窗口句柄, “靠边_已安装”, 0)
写窗口数据 (窗口句柄, “靠边_定时器ID”, 0)
写窗口数据 (窗口句柄, “靠边_旧窗口过程”, 0)
写窗口数据 (窗口句柄, “靠边_隐藏方向”, 0)
写窗口数据 (窗口句柄, “靠边_鼠标在窗口上”, 0)
写窗口数据 (窗口句柄, “靠边_正在隐藏”, 0)
写窗口数据 (窗口句柄, “靠边_正常宽度”, 0)
写窗口数据 (窗口句柄, “靠边_正常高度”, 0)
写窗口数据 (窗口句柄, “靠边_正常左边”, 0)
写窗口数据 (窗口句柄, “靠边_正常顶边”, 0)
写窗口数据 (窗口句柄, “靠边_隐藏条宽度”, 0)
写窗口数据 (窗口句柄, “靠边_禁止隐藏时间”, 0)
返回 (真)
.子程序 窗口过程回调_靠边, 整数型
.参数 窗口句柄, 整数型
.参数 消息, 整数型
.参数 参数1, 整数型
.参数 参数2, 整数型
.局部变量 返回值, 整数型
.局部变量 旧窗口过程, 整数型
.局部变量 定时器ID, 整数型
.局部变量 正在隐藏, 整数型
.判断开始 (消息 = 275)
处理定时器_靠边 (窗口句柄)
.判断 (消息 = 561)
定时器ID = 读窗口数据 (窗口句柄, “靠边_定时器ID”)
.如果真 (定时器ID ≠ 0)
KillTimer (窗口句柄, 定时器ID)
写窗口数据 (窗口句柄, “靠边_定时器ID”, 0)
.如果真结束
.判断 (消息 = 562)
正在隐藏 = 读窗口数据 (窗口句柄, “靠边_正在隐藏”)
.如果真 (正在隐藏 = 0)
定时器ID = 读窗口数据 (窗口句柄, “靠边_定时器ID”)
.如果真 (定时器ID = 0)
写窗口数据 (窗口句柄, “靠边_定时器ID”, SetTimer (窗口句柄, 1, 50, 0))
.如果真结束
.如果真结束
.判断 (消息 = 2)
定时器ID = 读窗口数据 (窗口句柄, “靠边_定时器ID”)
.如果真 (定时器ID ≠ 0)
KillTimer (窗口句柄, 定时器ID)
.如果真结束
旧窗口过程 = 读窗口数据 (窗口句柄, “靠边_旧窗口过程”)
.如果真 (旧窗口过程 ≠ 0 且 旧窗口过程 ≠ -1)
SetWindowLongA (窗口句柄, -4, 旧窗口过程)
.如果真结束
写窗口数据 (窗口句柄, “靠边_已安装”, 0)
.默认
.判断结束
旧窗口过程 = 读窗口数据 (窗口句柄, “靠边_旧窗口过程”)
.如果真 (旧窗口过程 ≠ 0 且 旧窗口过程 ≠ -1)
返回值 = CallWindowProcA (旧窗口过程, 窗口句柄, 消息, 参数1, 参数2)
.如果真结束
返回 (返回值)
.子程序 处理定时器_靠边
.参数 窗口句柄, 整数型
.局部变量 鼠标坐标, POINT
.局部变量 窗口矩形, RECT
.局部变量 鼠标在内, 逻辑型
.局部变量 当前方向, 整数型
.局部变量 隐藏方向, 整数型
.局部变量 鼠标在窗口上, 整数型
.局部变量 正常左边, 整数型
.局部变量 正常顶边, 整数型
.局部变量 正常宽度, 整数型
.局部变量 正常高度, 整数型
.局部变量 隐藏条宽度, 整数型
.局部变量 屏幕宽, 整数型
.局部变量 屏幕高, 整数型
.局部变量 禁止时间, 整数型
.局部变量 当前时间, 整数型
GetCursorPos (鼠标坐标)
GetWindowRect (窗口句柄, 窗口矩形)
鼠标在内 = 鼠标坐标.横 ≥ 窗口矩形.左边 且 鼠标坐标.横 ≤ 窗口矩形.右边 且 鼠标坐标.纵 ≥ 窗口矩形.顶边 且 鼠标坐标.纵 ≤ 窗口矩形.底边
隐藏方向 = 读窗口数据 (窗口句柄, “靠边_隐藏方向”)
鼠标在窗口上 = 读窗口数据 (窗口句柄, “靠边_鼠标在窗口上”)
当前时间 = GetTickCount ()
.如果 (鼠标在内)
鼠标在窗口上 = 1
写窗口数据 (窗口句柄, “靠边_鼠标在窗口上”, 1)
.如果真 (隐藏方向 ≠ 0)
正常左边 = 读窗口数据 (窗口句柄, “靠边_正常左边”)
正常顶边 = 读窗口数据 (窗口句柄, “靠边_正常顶边”)
正常宽度 = 读窗口数据 (窗口句柄, “靠边_正常宽度”)
正常高度 = 读窗口数据 (窗口句柄, “靠边_正常高度”)
MoveWindow (窗口句柄, 正常左边, 正常顶边, 正常宽度, 正常高度, 真)
写窗口数据 (窗口句柄, “靠边_隐藏方向”, 0)
写窗口数据 (窗口句柄, “靠边_禁止隐藏时间”, 当前时间 + 500)
.如果真结束
.否则
.如果真 (鼠标在窗口上 = 1)
鼠标在窗口上 = 0
写窗口数据 (窗口句柄, “靠边_鼠标在窗口上”, 0)
.如果真结束
.如果真 (隐藏方向 = 0)
禁止时间 = 读窗口数据 (窗口句柄, “靠边_禁止隐藏时间”)
.如果真 (当前时间 < 禁止时间)
返回 ()
.如果真结束
当前方向 = 检测靠边方向 (窗口句柄, 窗口矩形)
.如果真 (当前方向 ≠ 0)
执行隐藏_靠边 (窗口句柄, 当前方向)
写窗口数据 (窗口句柄, “靠边_隐藏方向”, 当前方向)
.如果真结束
.如果真结束
.如果结束
.子程序 检测靠边方向, 整数型
.参数 窗口句柄, 整数型
.参数 窗口矩形, RECT
.局部变量 屏幕宽, 整数型
.局部变量 屏幕高, 整数型
.局部变量 窗口宽, 整数型
.局部变量 窗口高, 整数型
.局部变量 隐藏条宽度, 整数型
窗口宽 = 窗口矩形.右边 - 窗口矩形.左边
窗口高 = 窗口矩形.底边 - 窗口矩形.顶边
隐藏条宽度 = 读窗口数据 (窗口句柄, “靠边_隐藏条宽度”)
.如果真 (窗口宽 ≤ 隐藏条宽度 × 3 或 窗口高 ≤ 隐藏条宽度 × 3)
返回 (0)
.如果真结束
屏幕宽 = GetSystemMetrics (0)
屏幕高 = GetSystemMetrics (1)
.如果真 (窗口矩形.左边 ≤ 10)
返回 (1)
.如果真结束
.如果真 (屏幕宽 - 窗口矩形.右边 ≤ 10)
返回 (2)
.如果真结束
.如果真 (窗口矩形.顶边 ≤ 10)
返回 (3)
.如果真结束
.如果真 (屏幕高 - 窗口矩形.底边 ≤ 10)
返回 (4)
.如果真结束
返回 (0)
.子程序 执行隐藏_靠边
.参数 窗口句柄, 整数型
.参数 方向, 整数型
.局部变量 屏幕宽, 整数型
.局部变量 屏幕高, 整数型
.局部变量 正常左边, 整数型
.局部变量 正常顶边, 整数型
.局部变量 正常宽度, 整数型
.局部变量 正常高度, 整数型
.局部变量 隐藏条宽度, 整数型
.局部变量 新左边, 整数型
.局部变量 新顶边, 整数型
.局部变量 当前宽度, 整数型
.局部变量 当前高度, 整数型
当前宽度 = 取窗口宽度 (窗口句柄)
当前高度 = 取窗口高度 (窗口句柄)
隐藏条宽度 = 读窗口数据 (窗口句柄, “靠边_隐藏条宽度”)
.如果真 (当前宽度 ≤ 隐藏条宽度 + 5 或 当前高度 ≤ 隐藏条宽度 + 5)
返回 ()
.如果真结束
正常左边 = 取窗口左边 (窗口句柄)
正常顶边 = 取窗口顶边 (窗口句柄)
正常宽度 = 取窗口宽度 (窗口句柄)
正常高度 = 取窗口高度 (窗口句柄)
屏幕宽 = GetSystemMetrics (0)
屏幕高 = GetSystemMetrics (1)
.如果真 (正常左边 < 0)
正常左边 = 0
.如果真结束
.如果真 (正常顶边 < 0)
正常顶边 = 0
.如果真结束
.如果真 (正常左边 + 正常宽度 > 屏幕宽)
正常左边 = 屏幕宽 - 正常宽度
.如果真结束
.如果真 (正常顶边 + 正常高度 > 屏幕高)
正常顶边 = 屏幕高 - 正常高度
.如果真结束
写窗口数据 (窗口句柄, “靠边_正常左边”, 正常左边)
写窗口数据 (窗口句柄, “靠边_正常顶边”, 正常顶边)
写窗口数据 (窗口句柄, “靠边_正常宽度”, 正常宽度)
写窗口数据 (窗口句柄, “靠边_正常高度”, 正常高度)
写窗口数据 (窗口句柄, “靠边_正在隐藏”, 1)
.判断开始 (方向 = 1) ' 左
新左边 = 0 - 正常宽度 + 隐藏条宽度
MoveWindow (窗口句柄, 新左边, 正常顶边, 正常宽度, 正常高度, 真)
.判断 (方向 = 2) ' 右
新左边 = 屏幕宽 - 隐藏条宽度
MoveWindow (窗口句柄, 新左边, 正常顶边, 正常宽度, 正常高度, 真)
.判断 (方向 = 3) ' 上
新顶边 = 0 - 正常高度 + 隐藏条宽度
MoveWindow (窗口句柄, 正常左边, 新顶边, 正常宽度, 正常高度, 真)
.判断 (方向 = 4) ' 下
新顶边 = 屏幕高 - 隐藏条宽度
MoveWindow (窗口句柄, 正常左边, 新顶边, 正常宽度, 正常高度, 真)
.默认
.判断结束
写窗口数据 (窗口句柄, “靠边_正在隐藏”, 0)
.子程序 写窗口数据
.参数 窗口句柄, 整数型
.参数 名称, 文本型
.参数 值, 整数型
SetPropA (窗口句柄, 名称, 值)
.子程序 读窗口数据, 整数型
.参数 窗口句柄, 整数型
.参数 名称, 文本型
返回 (GetPropA (窗口句柄, 名称))
.子程序 取窗口宽度, 整数型
.参数 窗口句柄, 整数型
.局部变量 矩形, RECT
GetWindowRect (窗口句柄, 矩形)
返回 (矩形.右边 - 矩形.左边)
.子程序 取窗口高度, 整数型
.参数 窗口句柄, 整数型
.局部变量 矩形, RECT
GetWindowRect (窗口句柄, 矩形)
返回 (矩形.底边 - 矩形.顶边)
.子程序 取窗口左边, 整数型
.参数 窗口句柄, 整数型
.局部变量 矩形, RECT
GetWindowRect (窗口句柄, 矩形)
返回 (矩形.左边)
.子程序 取窗口顶边, 整数型
.参数 窗口句柄, 整数型
.局部变量 矩形, RECT
GetWindowRect (窗口句柄, 矩形)
返回 (矩形.顶边)
.版本 2
.DLL命令 GetWindowLongA, 整数型, "user32.dll", "GetWindowLongA"
.参数 窗口句柄, 整数型
.参数 nIndex, 整数型
.DLL命令 SetWindowLongA, 整数型, "user32.dll", "SetWindowLongA"
.参数 窗口句柄, 整数型
.参数 nIndex, 整数型
.参数 dwNewValue, 整数型
.DLL命令 CallWindowProcA, 整数型, "user32.dll", "CallWindowProcA"
.参数 原窗口过程, 整数型
.参数 窗口句柄, 整数型
.参数 消息, 整数型
.参数 参数1, 整数型
.参数 参数2, 整数型
.DLL命令 SetTimer, 整数型, "user32.dll", "SetTimer"
.参数 窗口句柄, 整数型
.参数 事件标识符, 整数型
.参数 毫秒数, 整数型
.参数 回调函数地址, 整数型
.DLL命令 KillTimer, 逻辑型, "user32.dll", "KillTimer"
.参数 窗口句柄, 整数型
.参数 事件标识符, 整数型
.DLL命令 GetCursorPos, 逻辑型, "user32.dll", "GetCursorPos"
.参数 鼠标坐标, POINT
.DLL命令 GetWindowRect, 逻辑型, "user32.dll", "GetWindowRect"
.参数 窗口句柄, 整数型
.参数 窗口矩形, RECT
.DLL命令 GetSystemMetrics, 整数型, "user32.dll", "GetSystemMetrics"
.参数 nIndex, 整数型
.DLL命令 MoveWindow, 逻辑型, "user32.dll", "MoveWindow"
.参数 窗口句柄, 整数型
.参数 左边, 整数型
.参数 顶边, 整数型
.参数 宽度, 整数型
.参数 高度, 整数型
.参数 是否重画, 逻辑型
.DLL命令 SetPropA, 逻辑型, "user32.dll", "SetPropA"
.参数 窗口句柄, 整数型
.参数 字符串, 文本型
.参数 数据, 整数型
.DLL命令 GetPropA, 整数型, "user32.dll", "GetPropA"
.参数 窗口句柄, 整数型
.参数 字符串, 文本型
.DLL命令 GetTickCount, 整数型, "kernel32.dll", "GetTickCount"
.版本 2
.数据类型 RECT
.成员 左边, 整数型
.成员 顶边, 整数型
.成员 右边, 整数型
.成员 底边, 整数型
.数据类型 POINT
.成员 横, 整数型
.成员 纵, 整数型
|