---- 系 统 注 册 登 记 表 是Windows 9x 中 所 有 配 制 信 息 的 中 央 仓 库。 它 除 了 保 存 操 作 系 统 自 身 的 软 件、 硬 件 及 环 境 信 息 外, 另 一 个 用 途 就 是 保 存 应 用 程 序 中 用 户 定 制 的 配 制 信 息。 把 应 用 程 序 保 存 到 系 统 注 册 登 记 表 中 的 方 法 是 使 应 用 程 序 的 适 用 性 提 高 的 最 佳 方 法 之 一。
---- 在Power Builder 应 用 程 序 中, 通 过 使 用PB 内 嵌 的 注 册 函 数 对 系 统 注 册 登 记 表 的 访 问, 可 以 方 便 地 设 置 和 获 取 应 用 程 序 及 用 户 设 置 的 信 息: 如 进 入 应 用 程 序 时, 通 过 访 问 系 统 注 册 登 记 表 来 获 取 主 窗 口 的 原 有 大 小 及 位 置 信 息, 而 退 出 程 序 时 可 保 存 用 户 改 变 了 的 窗 口 大 小 及 位 置 信 息; 可 以 将 用 户 的 设 置 保 存 到 系 统 注 册 登 记 表 中, 在 必 要 时 从 系 统 注 册 登 记 表 中 取 出; 亦 可 创 建 一 个.REG 文 件( 注 册 登 记) 来 安 装 自 己 的 应 用 程 序, 以 及 实 现 存 取ODBC 驱 动 信 息 等 等。
---- PB 注 册(Registry) 函 数
---- 在Power Builder 6.0 中 内 嵌 的 注 册 函 数 有5 条, 分 别 是RegistrySet、RegistryGet、RegistryDelete、RegistryKeys、 和RegistryValues, 需 要 注 意 的 是, 这 组 函 数 只 能 在Microsoft Windows 系 统 中 使 用, 下 面 是 这 五 个 函 数 的 详 细 用 法:
---- 1. RegistrySet(key, valuename, valuetype, value)
| key | string 类 型, 指 定 键 名 |
| valuename | string 类 型, 指 定 要 访 问 值 或 创 建 新 值 的 名 称 |
| valuetype | RegistryValueType 枚 举 类 型, 指 定 值 的 数 据 类 型 |
| value | 要 设 置 的 值, 其 数 据 类 型 应 与valuetype 参 数 指 定 的 类 型 相 匹 配 |
| 返 回 值 | 函 数 执 行 成 功 时 返 回1, 发 生 错 误 时 返 回 -1 |
---- RegistrySet() 的 功 能 是 在 系 统 注 册 登 记 表 中 设 置 或 创 建 指 定 键 和 值, 如 果 要 设 置 的 键 名 或 要 设 置 的 值 不 存 在, 则 先 建 立 再 赋 值。
---- 如 下 面 的 代 码 在 系 统 注 册 登 记 表 中 设 置 或 创 建 了 应 用 程 序MyApp 运 行 时 读 写 文 件 或 访 问 图 形 及 其 他 对 象 时 的 路 径:
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\PB6\MYAPP\Application", &
"Path", RegString!, "C:\MyApp")
---- 2. RegistryGet (key, valuename, valuetype, valuevariable)
| Key | string 类 型, 指 定 键 名 |
| Valuename | string 类 型, 指 定 要 访 问 值 的 名 称 |
| Valuetype | RegistryValueType 枚 举 类 型, 指 定 值 的 数 据 类 型 |
| Valuevariable | 用 于 保 存 键 值 的 变 量, 其 数 据 类 型 应 与valuetype 参 数 指 定 的 类 型 相 匹 配 |
| 返 回 值 | 函 数 执 行 成 功 时 返 回1, 发 生 错 误 时 返 回 -1 |
---- RegistryGet() 的 功 能 是 从 系 统 注 册 表 得 到 指 定 键 的 值。 如 下 面 的 代 码 在 系 统 注 册 登 记 表 中 获 取 应 用 程 序MyApp 读 写 文 件 或 访 问 图 形 及 其 他 对 象 时 的 路 径 于 变 量ls_Path 中:
String ls_Path
RegistryGet("HKEY_LOCAL_MACHINE\SOFTWARE\PB6\MYAPP\Application", &
"Path", RegString!, ls_Path)
---- 3. RegistryDelete(key, valuename)
| Key | string 类 型, 指 定 键 名, 将 删 除 该 键 或 该 键 的 某 个 值 |
| Valuename | string 类 型, 指 定 要 删 除 的 值 的 名 称 |
| 返 回 值 | 函 数 执 行 成 功 时 返 回1, 发 生 错 误 时 返 回 -1 |
---- RegistryDelete() 的 功 能 是 删 除 系 统 注 册 登 记 表 中 的 一 个 键 或 键 的 某 个 值。 如 想 删 除 键、 键 的 值、 以 及 其 下 的 所 有 子 键, 将valuename 参 数 指 定 为 空 字 符 串。
---- 如 下 面 的 代 码 删 除 系 统 注 册 登 记 表 中 应 用 程 序MyApp 读 写 文 件 或 访 问 图 形 及 其 他 对 象 时 的 路 径:
li_return = RegistryDelete("HKEY_LOCAL_MACHINE\
SOFTWARE\PB6\MYAPP\Application", "Path")
---- 4. RegistryKeys (key, subkeys)
| Key | string 类 型, 指 定 键 名 |
| Subkeys | 字 符 串 数 组 变 量, 用 于 保 存 各 子 键 |
| 返 回 值 | 函 数 执 行 成 功 时 返 回1, 发 生 错 误 时 返 回 -1 |
---- RegistryKeys() 的 功 能 是 从 系 统 注 册 登 记 表 中 得 到 指 定 键 的 有 效 子 键。
---- 如 下 面 的 代 码 在 系 统 注 册 登 记 表 中 得 到 应 用 程 序MyApp 的 所 有 子 键:
String ls_subkeylist[]
li_return = RegistryKeys("HKEY_LOCAL_MACHINE\
SOFTWARE\PB6\MYAPP", ls_subkeylist)
---- 5. RegistryValues (key, valuename)
| Key | string 类 型, 指 定 键 名 |
| Valuename | 字 符 串 数 组 变 量, 用 于 保 存 各 值 名 |
| 返 回 值 | 函 数 执 行 成 功 时 返 回1, 发 生 错 误 时 返 回 -1 |
---- RegistryValues() 的 功 能 是 从 系 统 注 册 登 记 表 中 得 与 指 定 键 相 关 的 一 组 值 名。 如 下 面 的 代 码 得 到 为 用 程 序MyApp 定 义 的 子 键Application 的 值 名, 并 将 它 保 存 在 动 态 数 组ls_valuearray 中:
String ls_valuearray[]
li_return = RegistrySet("HKEY_LOCAL_MACHINE
\SOFTWARE\PB6\MYAPP\Application", ls_valuearray)
---- 程 序 实 例
---- 下 面 以 一 个 简 单 的 实 例 来 说 明PB 注 册 函 数 在 应 用 程 序 中 使 用。
String ls_Login_key
Integer li_return1,li_return2
ls_Login_key = "HKEY_CURRENT_USER\Software\PB6\MYAPP\Login"
li_return1 = RegistrySet(ls_Login_key,
"Year", RegString!, em_1.text)
IF rb_1.checked THEN
li_return2 = RegistrySet(ls_Login_key,
"Examin", RegString!, rb_1.text)
END IF
IF rb_2.checked THEN
li_return2 = RegistrySet(ls_Login_key,
"Examin", RegString!, rb_2.text)
END IF
IF li_return1 = 1 AND li_return2 = 1 THEN
MessageBox("保存信息显示", "Login子键的值已保存!")
ELSE
MessageBox("保存信息显示", "Login子键的值未能保存!")
END IF
RETURN
String ls_Login_key,ls_Year,ls_Examin
ls_Login_key = "HKEY_CURRENT_USER\Software\PB6\MYAPP\Login"
IF RegistryGet(ls_Login_key,
"Year", RegString!, ls_Year) = 1 &
AND RegistryGet(ls_Login_key,
"Examin", RegString!, ls_Examin) = 1 THEN
MessageBox("Login子键信息显示",
" 年度:"+ls_Year+char(13) &
+"考试种类:"+ls_Examin)
ELSE
MessageBox("Login子键信息显示", "获取Login子键信息失败!")
END IF
RETURN
String ls_Login_key
ls_Login_key = "HKEY_CURRENT_USER
\Software\PB6\MYAPP\Login"
IF RegistryDelete(ls_Login_key, "") = 1 THEN
MessageBox("删除信息显示", "Login子键已删除!")
ELSE
MessageBox("删除信息显示", "未能删除Login子键!")
END IF
RETURN
Open(w_login)
-