“ 已 收 到";
可 以 广 播 消 息 到 局 域 网 中 的 多 个 工 作 组;
可 将 它 缩 小 为 系 统 状 态 条 图 标, 当 有 消 息 到 达 时, 它 可 以 发 出 声 音 或 闪 动 图 标 加 以 提 醒;
可 定 制 的 消 息 文 本 显 示 字 体 和 颜 色;
可 选 择 让 它 开 机 自 动 运 行;
自 动 收 集 网 络 信 息, 您 可 以 在“ 网 络 邻 居” 列 表 中 选 择 接 收 人, 而 不 是 手 工 输 入 它。
----本 文 不 打 算 在 这 里 将 开 发 过 程 中 的 每 一 步 细 节 都 写 出 来, 而 是 只 就 一 些 重 点 问 题 进 行 说 明, 开 发 环 境 是 Celeron 333、64M、Windows 98 和 Visual C + + 6.0。
一、 接 收 和 发 送 消 息
----WinPopupEx 的 核 心 是 消 息 的 接 收 和 发 送, 也 就 是 对 邮 槽 的 处 理。 在 程 序 开 始 运 行 时, 它 会 调 用 函 数:
HANDLE CreateMailslot(
LPCTSTR lpName, // 格 式:
“\\.\\MailSlot\\ 邮 槽 名” - 本 地 邮 槽
DWORD nMaxMessageSize,
// 最 大 的 消 息 文 本 长 度, 帮 助 文 档 上 说
----将 该 值 设 为0 则 消 息 长 度 无 限, 实 际 上 每 次 收 发 的 消 息 长 度 不 能 超 过 424 字 节
DWORD lReadTimeout, // 读 超 时 时 间( 毫 秒)
LPSECURITY_ATTRIBUTES
lpSecurityAttributes // Windows 95/98
的 安 全 属 性 应 设 置 为 NULL
);
---- 建 立 两 个 本 地 邮 槽 WinPopup 和 WPAnswer, 邮 槽 \\.\\MailSlot\\WinPopup 用 于 接 收 消 息 正 文, 而 邮 槽 \\.\\MailSlot\\WPAnswer 则 是 为 了 弥 补 邮 槽 机 制 传 送 消 息 的 不 可 靠。 当 邮 槽 建 立 成 功 后, 程 序 就 在 主 线 程 之 外 新 启 动 一 个 工 作 线 程, 这 个 线 程 不 停 地 检 查 邮 槽 \\.\\MailSlot\\WinPopup, 当 邮 槽 不 为 空( 有 消 息 到 达) 时, 它 首 先 查 看 消 息 数 据 包 中 的 发 送 方 名 字, 如 发 送 方 名 为 B, 则 它 向 邮 槽 \\B\\MailSlot\\WPAnswer 发 送 一 个 极 短 的 标 志 文 本, 以 通 知 发 送 方 自 己 已 经 收 到 它 发 来 的 消 息, 然 后 向 主 线 程 发 送 一 条 自 定 义 消 息, 通 知 主 线 程 有 消 息 到 达, 主 线 程 在 该 自 定 义 消 息 处 理 函 数 中 从 邮 槽 \\.\\MailSlot\\WinPopup 里 读 出 消 息 正 文 并 将 它 显 示 给 用 户。 如 果 计 算 机 A 要 向 计 算 机 B 发 送 消 息, 它 只 需 将 消 息 正 文 按 一 定 格 式 的 数 据 包 写 入 邮 槽 \\B\\MailSlot\\WinPopup 中, 然 后 在 预 定 义 的 延 迟 时 间 后, 检 查 本 地 邮 槽 \\.\\MailSlot\\WPAnswer 是 否 有 计 算 机 B 返 回 的 应 答 标 志 文 本, 就 可 知 道 接 收 方 是 否 已 收 到 消 息。
----检 查 邮 槽 中 是 否 有 消 息 到 达 使 用 函 数:
BOOL GetMailslotInfo(
HANDLE hMailslot, // 邮 槽 句 柄
LPDWORD lpMaxMessageSize,
// 指 向 存 放 最 大 消 息 长 度 的 变 量 的 指 针
LPDWORD lpNextSize,
// 指 向 存 放 下 一 条 消 息 长 度 的 变 量 的 指 针
LPDWORD lpMessageCount,
// 指 向 存 放 消 息 条 数 的 变 量 的 指 针
LPDWORD lpReadTimeout
// 读 超 时 时 间( 毫 秒)
);
----如 果 ( *lpNextSize) != MAILSLOT_NO_MESSAGE, 则 说 明 有 消 息 到 达。
----从 邮 槽 中 读 取 消 息 同 从 文 件 中 读 取 数 据 没 有 区 别:
BOOL ReadFile(
HANDLE hFile, &nbs