当前位置: 主页 > 百科 > 计算机编程 > 易语言源码 >
-14 Comments

计时关机的源代码是什么?

发布于:2016-07-04  |   作者:http://www.zxjsq.net  |   已聚集:人围观

.版本 2


.程序集 窗口程序集_启动窗口

.程序集变量 程_配置文件, 文本型

.程序集变量 程_剩余时间, 整数型, , , 单位:秒

.程序集变量 程_运行状态, 整数型, , , 0=运行,1=停止。

.程序集变量 程_线程句柄, 整数型


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


程_配置文件 = 取运行目录 () + “\CloseComputer.ini”

读取设置函数 ()


.子程序 __启动窗口_可否被关闭, 逻辑型


保存设置函数 ()


.子程序 保存设置函数

.局部变量 Int, 整数型


.判断开始 (单选框_关机.选中)

    Int = #EWX_SHUTDOWN

.判断 (单选框_重启.选中)

    Int = #EWX_REBOOT

.默认

    Int = #EWX_LOGOFF

.判断结束

.如果真 (选择框_强制终止.选中)

    Int = 位或 (Int, #EWX_FORCE)

.如果真结束

写配置项 (程_配置文件, “设置”, “类型”, 到文本 (Int))

Int = 到整数 (编辑框_时.内容)

.如果真 (Int < 1)

    Int = 0

.如果真结束

写配置项 (程_配置文件, “设置”, “小时”, 到文本 (Int))

Int = 到整数 (编辑框_分.内容)

.如果真 (Int < 1)

    Int = 0

.如果真结束

写配置项 (程_配置文件, “设置”, “分钟”, 到文本 (Int))


Int = 到整数 (编辑框_秒.内容)

.如果真 (Int < 1)

    Int = 0

.如果真结束

写配置项 (程_配置文件, “设置”, “秒钟”, 到文本 (Int))



.子程序 读取设置函数

.局部变量 Int, 整数型


Int = 到整数 (读配置项 (程_配置文件, “设置”, “类型”, ))

.如果真 (位与 (Int, #EWX_LOGOFF) = #EWX_LOGOFF)

    单选框_注销.选中 = 真

    单选框_关机.选中 = 假

    单选框_重启.选中 = 假

.如果真结束

.如果真 (位与 (Int, #EWX_SHUTDOWN) = #EWX_SHUTDOWN)

    单选框_注销.选中 = 假

    单选框_关机.选中 = 真

    单选框_重启.选中 = 假

.如果真结束

.如果真 (位与 (Int, #EWX_REBOOT) = #EWX_REBOOT)

    单选框_注销.选中 = 假

    单选框_关机.选中 = 假

    单选框_重启.选中 = 真

.如果真结束

.判断开始 (位与 (Int, #EWX_FORCE) = #EWX_FORCE)

    选择框_强制终止.选中 = 真

.默认

    选择框_强制终止.选中 = 假

.判断结束

Int = 到整数 (读配置项 (程_配置文件, “设置”, “小时”, ))

.如果真 (Int < 1)

    Int = 0

.如果真结束

编辑框_时.内容 = 到文本 (Int)

Int = 到整数 (读配置项 (程_配置文件, “设置”, “分钟”, ))

.如果真 (Int < 1)

    Int = 0

.如果真结束

编辑框_分.内容 = 到文本 (Int)

Int = 到整数 (读配置项 (程_配置文件, “设置”, “秒钟”, ))

.如果真 (Int < 1)

    Int = 0

.如果真结束

编辑框_秒.内容 = 到文本 (Int)


.子程序 _按钮_开始_被单击

.局部变量 mProcess, 整数型

.局部变量 mType, 整数型


.如果真 (程_线程句柄 ≠ 0)

    返回 ()

.如果真结束

连续赋值 (真, 按钮_开始.禁止, 按钮_取消.禁止)

mProcess = GetCurrentProcess ()

.如果真 (获取进程关机权限 (mProcess) = 假)

    信息框 (“获取关机权限失败!”, #信息图标, “提示”, _启动窗口)

    连续赋值 (假, 按钮_开始.禁止, 按钮_取消.禁止)

    返回 ()

.如果真结束

程_剩余时间 = 到整数 (编辑框_时.内容) × 60 × 60

.如果真 (程_剩余时间 < 1)

    程_剩余时间 = 0

.如果真结束

程_剩余时间 = 程_剩余时间 + 到整数 (编辑框_分.内容) × 60

.如果真 (程_剩余时间 < 1)

    程_剩余时间 = 0

.如果真结束

程_剩余时间 = 程_剩余时间 + 到整数 (编辑框_秒.内容)

.如果真 (程_剩余时间 < 1)

    程_剩余时间 = 0

    信息框 (“关机时间不能留空或者为小于 1 秒!”, #信息图标, “提示”, _启动窗口)

    连续赋值 (假, 按钮_开始.禁止, 按钮_取消.禁止)

    返回 ()

.如果真结束

.判断开始 (单选框_关机.选中)

    mType = #EWX_SHUTDOWN

.判断 (单选框_重启.选中)

    mType = #EWX_REBOOT

.默认

    mType = #EWX_LOGOFF

.判断结束

.如果真 (选择框_强制终止.选中)

    mType = 位或 (mType, #EWX_FORCE)

.如果真结束

程_运行状态 = 0

保存设置函数 ()  ' 关机前先保存配置

程_线程句柄 = CreateThread (0, 0, &关机计时函数, mType, 0, 0)

.如果真 (程_线程句柄 = 0)

    信息框 (“启动计时线程失败!”, #信息图标, “提示”, _启动窗口)

    连续赋值 (假, 按钮_开始.禁止, 按钮_取消.禁止)

    返回 ()

.如果真结束

按钮_取消.禁止 = 假


.子程序 _按钮_取消_被单击

.局部变量 mRet, 整数型

.局部变量 Code, 整数型


.如果真 (程_线程句柄 = 0)

    返回 ()

.如果真结束

连续赋值 (真, 按钮_开始.禁止, 按钮_取消.禁止)

程_运行状态 = 1  ' 需要取消关机

.计次循环首 (15, )

    mRet = GetExitCodeThread (程_线程句柄, Code)

    .如果真 (mRet = 0)  ' 线程句柄已无效

        程_线程句柄 = 0

        跳出循环 ()

    .如果真结束

    .如果真 (Code = 1)  ' 线程已安全退出

        CloseHandle (程_线程句柄)

        程_线程句柄 = 0

        跳出循环 ()

    .如果真结束

    高级延时 (1000)

.计次循环尾 ()

.如果真 (程_线程句柄 ≠ 0)

    mRet = TerminateThread (程_线程句柄, 0)

    .如果真 (mRet ≠ 0)

        程_线程句柄 = 0

    .如果真结束


.如果真结束

.判断开始 (程_线程句柄 = 0)

    连续赋值 (假, 按钮_开始.禁止, 按钮_取消.禁止)

.默认

    按钮_取消.禁止 = 假

    信息框 (“关闭计时线程失败!”, #信息图标, “提示”, _启动窗口)

.判断结束



.子程序 关机计时函数, 整数型, , 返回1表示已正常退出

.参数 关机类型, 整数型

.局部变量 倒计时, 整数型

.局部变量 显示, 文本型


.如果真 (位与 (关机类型, #EWX_LOGOFF) = #EWX_LOGOFF)

    显示 = “注销用户”

.如果真结束

.如果真 (位与 (关机类型, #EWX_SHUTDOWN) = #EWX_SHUTDOWN)

    显示 = “关闭系统”

.如果真结束

.如果真 (位与 (关机类型, #EWX_REBOOT) = #EWX_REBOOT)

    显示 = “重启系统”

.如果真结束

倒计时 = 程_剩余时间

标签4.标题 = “倒计时:” + 到文本 (倒计时) + “ 秒后” + 显示

.计次循环首 (程_剩余时间, )

    .如果真 (程_运行状态 = 1)

        跳出循环 ()

    .如果真结束

    高级延时 (1000)

    倒计时 = 倒计时 - 1

    标签4.标题 = “倒计时:” + 到文本 (倒计时) + “ 秒后” + 显示

.计次循环尾 ()

.如果真 (程_运行状态 = 0)

    保存设置函数 ()  ' 关机前先保存配置

    ExitWindowsEx (关机类型, 0)

.如果真结束

返回 (1)


.子程序 获取进程关机权限, 逻辑型, , 为指定进程获取关机权限,成功返回真,失败返回假。

.参数 hProcess, 整数型, , 需要获取关机权限进程的句柄。

.局部变量 mToken, 整数型, , , 进程令牌

.局部变量 Tkp, TOKEN_PRIVILEGES, , , 令牌状态


.如果真 (OpenProcessToken (hProcess, 位或 (#TOKEN_QUERY, #TOKEN_ADJUST_PRIVILEGES), mToken) = 0)

    输出调试文本 (“获取进程令牌失败!”)

    返回 (假)

.如果真结束

.如果真 (LookupPrivilegeValue (0, #SE_SHUTDOWN_NAME, Tkp.Privileges [1].Luid) = 0)

    CloseHandle (mToken)

    输出调试文本 (“查询进程权限失败!”)

    返回 (假)

.如果真结束

Tkp.PrivilegeCount = 1

Tkp.Privileges [1].Attributes = #SE_PRIVILEGE_ENABLED

.如果真 (AdjustTokenPrivileges (mToken, 假, Tkp, 0, 0, 0) = 0)

    输出调试文本 (“调整进程权限失败!”)

    返回 (假)

.如果真结束

CloseHandle (mToken)

返回 (真)


.子程序 高级延时, 逻辑型, , 暂停当前线程的运行并等待指定的时间,成功返回真,失败返回假(失败时可能已经等待了部分时间)。

.参数 欲等待的时间, 整数型, , 欲暂停线程执行的时间,单位为毫秒。

.局部变量 等待时间, 长整数型

.局部变量 定时器对象, 整数型


等待时间 = -10 × 欲等待的时间 × 1000  ' 换算成微秒

定时器对象 = CreateWaitableTimerA (0, 0, 0)

.如果真 (定时器对象 = 0)

    返回 (假)

.如果真结束

.如果真 (SetWaitableTimer (定时器对象, 等待时间, 0, 0, 0, 0) = 0)  ' 启动一个可等待的定时器

    返回 (假)

.如果真结束

.循环判断首 ()

    等待时间 = MsgWaitForMultipleObjects (1, 定时器对象, 0, -1, 255)

    .如果真 (等待时间 = -1)

        跳出循环 ()

    .如果真结束

    处理事件 ()

.循环判断尾 (等待时间 ≠ 0)

CloseHandle (定时器对象)  ' 关闭计时器对象,释放资源

.判断开始 (等待时间 = 0)

    返回 (真)

.默认

    返回 (假)

.判断结束


标签:                   喜欢:收藏