易语言如何隐藏窗口

2025-09-20 22:17:15

1、新建一个Windows窗口程序

易语言如何隐藏窗口

2、双击启动窗口,输入代码:

.版本 2

.支持库 spec

.程序集 窗口程序集1

.程序集变量 原窗口, 整数型

.程序集变量 停靠, 整数型, , , 1左,2上,3右,0为不

.程序集变量 正在收放, 整数型, , , 1收,2放

.程序集变量 计数, 整数型

.程序集变量 已收起, 逻辑型

.程序集变量 时钟, 整数型

.程序集变量 步进长度, 整数型, , , 新加的

.程序集变量 最小尺寸, 整数型, , , 新加的

.子程序 __启动窗口_创建完毕

' 本程序严格按照比赛要求,只限制左,上,右窗口移动和停靠,且只和鼠标在窗口停留或离开后1秒后才有动作-borisc

原窗口 = 设置窗口信息_ (取窗口句柄 (), #GWL_WNDPROC, 到整数 (&处理))

读回窗口位置 ()

步进长度 = 15

最小尺寸 = 5

.子程序 读回窗口位置, , , 移植_

.局部变量 配置文件名, 文本型

配置文件名 = 取运行目录 () + “\窗口位置.INI”

_启动窗口.高度 = 到数值 (读配置项 (配置文件名, “WINDOW”, “高度”, 到文本 (取屏幕高度 () ÷ 2)))

_启动窗口.宽度 = 到数值 (读配置项 (配置文件名, “WINDOW”, “宽度”, 到文本 (取屏幕宽度 () ÷ 4)))

_启动窗口.左边 = 到数值 (读配置项 (配置文件名, “WINDOW”, “左边”, 到文本 (取屏幕宽度 () ÷ 2)))

_启动窗口.顶边 = 到数值 (读配置项 (配置文件名, “WINDOW”, “顶边”, “0”))

.如果真 (_启动窗口.左边 > 取屏幕宽度 () - 30)

    _启动窗口.左边 = (取屏幕宽度 () - _启动窗口.宽度) ÷ 2

.如果真结束

.如果真 (_启动窗口.左边 < 0)

    _启动窗口.左边 = 0

.如果真结束

.如果真 (_启动窗口.顶边 > 取屏幕高度 () - _启动窗口.高度)

    _启动窗口.顶边 = 取屏幕高度 () - _启动窗口.高度

.如果真结束

.如果真 (_启动窗口.顶边 < 0)

    _启动窗口.顶边 = 0

.如果真结束

调试输出 (“_启动窗口.”, _启动窗口.左边, _启动窗口.顶边, _启动窗口.高度, _启动窗口.宽度)

.子程序 将被销毁保存位置, , , 移植_

.局部变量 配置文件名, 文本型

配置文件名 = 取运行目录 () + “\窗口位置.INI”

写配置项 (配置文件名, “WINDOW”, “左边”, 到文本 (_启动窗口.左边))

写配置项 (配置文件名, “WINDOW”, “顶边”, 到文本 (_启动窗口.顶边))

写配置项 (配置文件名, “WINDOW”, “高度”, 到文本 (_启动窗口.高度))

写配置项 (配置文件名, “WINDOW”, “宽度”, 到文本 (_启动窗口.宽度))

.子程序 处理, 整数型

.参数 hwnd, 整数型

.参数 Msg, 整数型

.参数 wp, 整数型

.参数 lp, 整数型

.判断开始 (Msg = #WM_MOVING)  ' 正在移动

    限制移动或大小 (lp, 0)

    .如果真 (停靠 ≠ 0)  ' 移动禁止依靠

        停靠 = 0

        正在收放 = 0

    .如果真结束

.判断 (Msg = #WM_GETMINMAXINFO)  ' 正在获得大小消息

    .如果真 (正在收放 = 0)

        限制移动或大小 (lp, 1)

    .如果真结束

.判断 (Msg = #WM_SIZING)  ' 正在改变大小

    .如果真 (停靠 ≠ 0)  ' 大小禁止依靠

        停靠 = 0

        正在收放 = 0

    .如果真结束

.判断 (Msg = #WM_SIZE)  ' 大小已改变

    判断停靠 ()

.判断 (Msg = #WM_MOVE)  ' 位置已移动

    .如果真 (正在收放 = 0)  ' 无收放动作

        判断停靠 ()

    .如果真结束

.判断 (Msg = #WM_EXITSIZEMOVE)

    判断停靠 ()

.判断 (Msg = #WM_NCLBUTTONDOWN)  ' 标题栏鼠标按下

    .如果真 (停靠 ≠ 0)

        .如果真 ((已收起 或 正在收放 ≠ 0) 且 wp ≠ 2)  ' 禁止大小

            Msg = 0

        .如果真结束

    .如果真结束

.判断 (Msg = #WM_SYSCOMMAND)  ' 系统菜单

    .如果真 ((已收起 或 正在收放 ≠ 0) 且 wp = 61440)  ' 收起了禁止调整大小

        Msg = 0

    .如果真结束

.默认

.判断结束

返回 (呼叫窗口函数地址_ (原窗口, hwnd, Msg, wp, lp))

.子程序 判断停靠

.判断开始 (顶边 < 2)

    _启动窗口.移动 (, 0, , )  ' 这里可写吸附

    停靠 = 2  ' 上

    .如果真 (时钟 = 0)

        时钟 = 设置时钟_ (取窗口句柄 (), 1036, 100, 到整数 (&判断收放))

    .如果真结束

.判断 (左边 < 2)

    停靠 = 1  ' 左

    _启动窗口.移动 (0, , , )

    .如果真 (时钟 = 0)

        时钟 = 设置时钟_ (取窗口句柄 (), 1036, 100, 到整数 (&判断收放))

    .如果真结束

.判断 (左边 > 取屏幕宽度 () - 宽度 - 2)

    停靠 = 3  ' 右

    _启动窗口.移动 (取屏幕宽度 () - 宽度, , , )

    .如果真 (时钟 = 0)

        时钟 = 设置时钟_ (取窗口句柄 (), 1036, 100, 到整数 (&判断收放))

    .如果真结束

.默认

    停靠 = 0

    .如果真 (时钟 ≠ 0)

        销毁时钟_ (取窗口句柄 (), 1036)

        时钟 = 0

    .如果真结束

.判断结束

.如果真 (已收起)

    判断收起 ()

.如果真结束

.子程序 判断收起

.判断开始 (顶边 = 5 - 高度 或 左边 = 5 - 宽度 或 左边 = 取屏幕宽度 () - 5)

    已收起 = 真

.默认

    已收起 = 假

.判断结束

.子程序 限制移动或大小, , , 0移动,非0大小

.参数 lp, 整数型, 参考

.参数 移动或大小, 整数型

.局部变量 a, MINMAXINFO

' 分开子程序是不想鼠标移动等等其它信息也分一个变量空间,个人猜想

.判断开始 (移动或大小 = 0)

    复制内存1_ (a, lp, 40)  ' 40为MINMAXINFO结构长度

    .如果真 (a.ptReserved.横向位置 < 2)  ' 靠边像磁铁一样,为0就不吸啦

        a.ptReserved.横向位置 = 0

        a.ptMaxSize.横向位置 = 0 + 宽度

    .如果真结束

    .如果真 (a.ptReserved.纵向位置 < 2)

        a.ptReserved.纵向位置 = 0

        a.ptMaxSize.纵向位置 = 0 + 高度

    .如果真结束

    .如果真 (a.ptMaxSize.横向位置 > 取屏幕宽度 () - 2)

        a.ptReserved.横向位置 = 取屏幕宽度 () - 宽度

        a.ptMaxSize.横向位置 = 取屏幕宽度 ()

    .如果真结束

    .如果真 (a.ptMaxSize.纵向位置 > 取屏幕高度 ())  ' 这里是限制窗口下边不越出屏幕之外的代码.

        a.ptReserved.纵向位置 = 取屏幕高度 () - 高度

        a.ptMaxSize.纵向位置 = 取屏幕高度 ()

    .如果真结束

    复制内存_ (lp, a, 40)  ' 40为MINMAXINFO结构长度

.默认

    复制内存1_ (a, lp, 40)  ' 40为MINMAXINFO结构长度

    a.ptMinTrackSize.横向位置 = 188  ' 最小X

    a.ptMinTrackSize.纵向位置 = 250  ' 最小Y

    ' ' a.ptMaxTrackSize.横向位置 = 取屏幕宽度 ()  ' 最大X

    ' ' a.ptMaxTrackSize.纵向位置 = 取屏幕高度 ()  ' 最大Y

    复制内存_ (lp, a, 40)  ' 40为MINMAXINFO结构长度

.判断结束

' ZeroMemory (a, 40)

.子程序 判断收放

.局部变量 x, 整数型

.局部变量 y, 整数型

x = 取鼠标水平位置 ()

y = 取鼠标垂直位置 ()

.判断开始 (x < 左边 或 x > 左边 + 宽度 或 y < 顶边 或 y > 顶边 + 高度)

    .如果真 (正在收放 = 2)  ' 正在展开时收起

        正在收放 = 0

        延时 (10)

        .如果真 (停靠 ≠ 0)

            窗口收起 ()

        .如果真结束

    .如果真结束

    .判断开始 (已收起)

        计数 = 0

    .默认

        .判断开始 (停靠 = 0)

            计数 = 0

        .默认

            计数 = 计数 + 1

        .判断结束

        .如果真 (计数 = 10)  ' 1秒收起

            计数 = 0

            .如果真 (正在收放 ≠ 1)

                窗口收起 ()

            .如果真结束

        .如果真结束

    .判断结束

.默认

    .判断开始 (已收起)

        计数 = 计数 + 1

        .如果真 (计数 = 10)  ' 1秒展开

            计数 = 0

            .如果真 (正在收放 ≠ 2 且 停靠 ≠ 0)

                窗口展开 ()

            .如果真结束

        .如果真结束

    .默认

        计数 = 0

    .判断结束

    .如果真 (正在收放 = 1)  ' 正在收起时展开

        正在收放 = 0

        延时 (10)

        .如果真 (正在收放 ≠ 2 且 停靠 ≠ 0)

            窗口展开 ()

        .如果真结束

    .如果真结束

.判断结束

.子程序 窗口收起

.局部变量 x, 整数型

.局部变量 y, 整数型

正在收放 = 1

.判断开始 (停靠 = 1)  ' 左

    x = _启动窗口.左边

    .判断循环首 (x > 7 - _启动窗口.宽度)

        处理事件 ()

        .如果真 (正在收放 ≠ 1 或 停靠 = 0)

            返回 ()

        .如果真结束

        延时 (10)

        x = x - 步进长度  ' 5

        _启动窗口.移动 (x, , , )

    .判断循环尾 ()

    _启动窗口.移动 (最小尺寸 - _启动窗口.宽度, , , )  ' 5

.判断 (停靠 = 3)  ' 右

    x = 左边

    y = 取屏幕宽度 ()

    .判断循环首 (x < y - 7)

        处理事件 ()

        .如果真 (正在收放 ≠ 1 或 停靠 = 0)

            返回 ()

        .如果真结束

        延时 (10)

        x = x + 步进长度  ' 5

        _启动窗口.移动 (x, , , )

    .判断循环尾 ()

    _启动窗口.移动 (y - 最小尺寸, , , )

.判断 (停靠 = 2)  ' 上

    x = 顶边

    .判断循环首 (x > 7 - 高度)

        处理事件 ()

        .如果真 (正在收放 ≠ 1 或 停靠 = 0)

            返回 ()

        .如果真结束

        延时 (10)

        x = x - 步进长度  ' 5

        _启动窗口.移动 (, x, , )

    .判断循环尾 ()

    _启动窗口.移动 (, 最小尺寸 - _启动窗口.高度, , )

.默认

.判断结束

' 销毁时钟_ (取窗口句柄 (), 1036)

' 时钟=0

已收起 = 真

正在收放 = 0

总在最前 = 真

调整层次 (#顶层)

调整层次 (#最高层)

.子程序 窗口展开

.局部变量 x, 整数型

.局部变量 y, 整数型

正在收放 = 2

已收起 = 假

_启动窗口.总在最前 = 真

_启动窗口.总在最前 = 假

.判断开始 (停靠 = 2)  ' 上

    x = _启动窗口.顶边

    .判断循环首 (x < -7)

        处理事件 ()

        .如果真 (正在收放 ≠ 2 或 停靠 = 0)

            返回 ()

        .如果真结束

        延时 (10)

        x = x + 步进长度  ' 5

        _启动窗口.移动 (, x, , )

    .判断循环尾 ()

    _启动窗口.移动 (, 0, , )

.判断 (停靠 = 1)  ' 左

    x = 左边

    .判断循环首 (x < -7)

        处理事件 ()

        .如果真 (正在收放 ≠ 2 或 停靠 = 0)

            返回 ()

        .如果真结束

        延时 (10)

        x = x + 步进长度  ' 5

        _启动窗口.移动 (x, , , )

    .判断循环尾 ()

    _启动窗口.移动 (0, , , )

.判断 (停靠 = 3)  ' 右

    x = 左边

    y = 取屏幕宽度 ()

    .判断循环首 (x > y - _启动窗口.宽度 + 7)

        处理事件 ()

        .如果真 (正在收放 ≠ 2 或 停靠 = 0)

            返回 ()

        .如果真结束

        延时 (10)

        x = x - 步进长度  ' 5

        _启动窗口.移动 (x, , , )

    .判断循环尾 ()

    _启动窗口.移动 (y - _启动窗口.宽度, , , )

.默认

.判断结束

正在收放 = 0

_启动窗口.激活 ()

总在最前 = 真

调整层次 (#顶层)

调整层次 (#最高层)

.子程序 __启动窗口_将被销毁

设置窗口信息_ (取窗口句柄 (), #GWL_WNDPROC, 原窗口)

.如果真 (时钟 ≠ 0)

    销毁时钟_ (取窗口句柄 (), 1036)

.如果真结束

.如果真 (正在收放 ≠ 0)

    正在收放 = 0

.如果真结束

将被销毁保存位置 ()

易语言如何隐藏窗口

3、复制DLL:

.版本 2

.DLL命令 设置窗口信息_, 整数型, "user32", "SetWindowLongA", , 在窗口结构中为指定的窗口设置信息  指定数据的前一个值

    .参数 窗口句柄, 整数型, , hwnd,欲为其取得信息的窗口的句柄

    .参数 窗口信息值, 整数型, , nIndex,请参考GetWindowLong函数的nIndex参数的说明

    .参数 窗口信息新值, 整数型, , dwNewLong,由nIndex指定的窗口信息的新值

.DLL命令 呼叫窗口函数地址_, 整数型, "user32.dll", "CallWindowProcA", , CallWindowProcA将消息传答窗口函数 

    .参数 前一窗口函数地址, 整数型, , lpPrevWndFunc

    .参数 窗口句柄, 整数型, , hwnd

    .参数 消息值, 整数型, , msg

    .参数 附加参数1, 整数型, , wParam

    .参数 附加参数2, 整数型, , lParam

.DLL命令 复制内存_, , "kernel32.dll", "RtlMoveMemory", , CopyMemory

    .参数 pDest, 整数型

    .参数 pSrc, MINMAXINFO

    .参数 ByteLen, 字节型

.DLL命令 复制内存1_, , "kernel32.dll", "RtlMoveMemory", , CopyMemory1 

    .参数 pDest, MINMAXINFO

    .参数 pSrc, 整数型

    .参数 ByteLen, 字节型

.DLL命令 设置时钟_, 整数型, "user32.dll", "SetTimer", , SetTimer

    .参数 窗口句柄, 整数型, , hwnd

    .参数 事件标识符, 整数型, , nIDEvent

    .参数 时钟周期, 整数型, , uElapse

    .参数 回调函数地址, 整数型, , lpTimerFunc

.DLL命令 销毁时钟_, 整数型, "user32.dll", "KillTimer", , KillTimer

    .参数 窗口句柄, 整数型, , hwnd

    .参数 事件标识符, 整数型, , nIDEvent

.DLL命令 内存清零_, , "kernel32.dll", "RtlZeroMemory", , ZeroMemory将一块内存置零

    .参数 目的内存, MINMAXINFO, 传址, Destination

    .参数 长度, 整数型, , Length

易语言如何隐藏窗口

4、复制自定义数据:

.版本 2

.数据类型 坐标, , 坐标;POINTAPI

    .成员 横向位置, 整数型, , , X坐标

    .成员 纵向位置, 整数型, , , Y坐标

.数据类型 MINMAXINFO, , MINMAXINFO

    .成员 ptReserved, 坐标

    .成员 ptMaxSize, 坐标

    .成员 ptMaxPosition, 坐标

    .成员 ptMinTrackSize, 坐标

    .成员 ptMaxTrackSize, 坐标

易语言如何隐藏窗口

5、复制常量数据:

.版本 2

.常量 GWL_WNDPROC, "-4"

.常量 WM_GETMINMAXINFO, "36", , 此消息发送给窗口当它将要改变大小或位置;

.常量 WM_MOUSEMOVE, "512"

.常量 WM_NCMOUSEMOVE, "160"

.常量 WM_EXITSIZEMOVE, "562"

.常量 WM_MOVING, "534"

.常量 WM_MOVE, "3"

.常量 WM_NCHITTEST, "132"

.常量 WM_NCLBUTTONDOWN, "161"

.常量 WM_NCLBUTTONUP, "162"

.常量 WM_SIZE, "5"

.常量 WM_SIZING, "532"

.常量 WM_SYSCOMMAND, "274"

.常量 WM_KEYUP, "257"

.常量 WM_KEYDOWN, "256"

易语言如何隐藏窗口

6、狂击F5调试程序。

易语言如何隐藏窗口

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢