深 圳 陈 生 昌
---- Visual Basic 5.0 具 有 面 向 对 象 的 程 序 设 计 思 想 及 可 视 化 的 编 程 方 式, 可 开 发 出 各 种 多 媒 体 应 用 程 序, 颇 得 软 件 设 计 者 青 睐。 使 用Visual Basic 5.0 可 以 很 容 易 建 立 屏 幕 保 护 程 序。
---- 屏 幕 保 护 程 序 主 要 用 来 保 护 显 示 器 的 屏 幕, 以 免 被 长 时 间 的 静 止 图 象 灼 伤。 此 外, 它 的 富 有 创 意 的 迷 人 的 动 画 效 果 使 人 在 上 机 的 间 隙 也 能 感 受 到 电 脑 带 来 的 诸 多 乐 趣。 很 多 电 脑 爱 好 者 都 会 有 自 己 动 手 制 作 屏 幕 保 护 程 序 的 愿 望, 尤 其 是 想 做 一 款 能 体 现 个 性 特 点、 富 有 生 活 情 趣 的 屏 幕 保 护 程 序。 本 文 介 绍 了 一 种 用Visual Basic 5.0 编 程 语 言 制 作 屏 幕 保 护 程 序 的 方 法, 供 有 创 作 欲 望 和 有 兴 趣 的 爱 好 者 尝 试。
---- 在win95 的 桌 面 点 右 键 弹 出 菜 单 选 属 性, 就 出 现 显 示 器 设 置 界 面, 有 一 个 标 签 是 设 置 屏 幕 保 护 程 序 的。 在 该 页 的 画 面 上, 选 择win95 所 带 的 标 准 屏 幕 保 护 程 序, 可 以 了 解 到 一 个 标 准 屏 幕 保 护 程 序 具 有 以 下 特 点:
---- 1. 可 在 标 签 上 的 小“ 显 示 器” 中 预 显
---- 2. 点 击“ 预 览” 按 钮 直 接 运 行 屏 幕 保 护 程 序, 不 需 等 待 预 定 时 间
---- 3. 点 击“ 设 置” 按 钮 对 屏 幕 保 护 程 序 作 速 度 快 慢 等 设 置
---- 下 面 具 体 探 讨 了 如 何 利 用Visual Basic 5.0 设 计 具 有 以 上 特 点 的 标 准 屏 幕 保 护 程 序, 也 就 是 在 设 计 屏 幕 保 护 程 序 时 应 注 意 的 几 个 问 题:
---- 一、 屏 幕 保 护 程 序 预 备 知 识
---- 屏 幕 保 护 程 序 是 以.SCR 为 后 缀 的 文 件, 实 际 上 就 是 标 准 的Windows 可 执 行 文 件, 在 编 译 时 将 扩 展 名EXE 修 改 为SCR, 不 再 建 立 带 扩 展 名 为EXE 的 可 执 行 文 件。 许 多 谈 论 屏 幕 保 护 的 文 章 都 只 谈 论 了 屏 幕 保 护 程 序 中 的 图 像 显 示 技 巧, 对 于 程 序 与 系 统 之 间 的 接 口 谈 论 极 少 或 不 愿 涉 及, 笔 者 通 过 逆 向 工 程 获 得 了 它 的 使 用 方 法 及 参 数。 屏 幕 保 护 程 序 与 系 统 之 间 接 口 的 使 用 很 简 单, 是 通 过 传 给 屏 幕 保 护 程 序 的 命 令 行 参 数 来 实 现 的, 其 格 式 为:
ScrSave.exe App.scr /X nnnn
---- X 为 命 令 行 参 数,nnnn 为 传 递 给 程 序 的 数 值。
---- 命 令 行 参 数 主 要 有 以 下 几 种:
---- /S 或 /s: 起 动 模 式, 显 示 或 预 览 屏 幕 保 护 程 序
---- /P nnn 或 /p nnn: 预 显 模 式,nnn 为 十 进 制 数, 是 预 显 小 显 示 器 的 窗 口 句 柄
---- /C 或 /c: 设 置 模 式, 调 出 设 置 窗 口 进 行 设 置
---- /A 或 /a: 口 令 模 式, 调 出 口 令 设 置 窗 口( 本 文 暂 不 讨 论 此 参 数, 感 兴 趣 的 朋 友 可 自 己 试 试)
---- 二、 防 止 同 时 运 行 屏 幕 保 护 程 序 的 两 个 实 例
---- Visual Basic 提 供 了 一 个App 对 象, 它 有 一 个PreInstance 属 性, 如 果 当 前Visual Basic 应 用 程 序 的 一 个 实 例 已 经 运 行 时, 便 把 该 属 性 设 置 为True, 从 而 避 免 同 时 运 行 一 个 屏 幕 保 护 程 序 的 多 个 实 例。 对 于 屏 幕 保 护 程 序, 在 屏 幕 保 护 属 性 窗 口 中, 由 于 预 显 程 序 也 调 用 了 一 次 程 序, 还 需 要 通 过 查 找 同 名 程 序 的 方 式 防 止 同 时 运 行 屏 幕 保 护 程 序 的 两 个 实 例。 调 用FindWindow