UniqueInstance/zh CN

From Lazarus wiki
Jump to navigationJump to search

Deutsch (de) English (en) español (es) français (fr) polski (pl)

简介

关于

UniqueInstance 提供了一种简单的方法,强制同一时间只能运行一个应用的实例。若要在组件面板上安装 UniqueInstance 组件,最简单的方法是使用 Lazarus 的在线软件包管理器。UniqueInstance 支持 Windows 和 Linux 系统(macOS 默认不允许多实例运行)。

特性

  • 易于使用:将组件拖入主窗体即可。
  • 提供了一种机制来接收其他实例的命令行参数。

组件的用法

只需将组件拖放至 LCL 应用的主窗体中(位于“系统”页,图标是中间带数字“1”的红色圆圈)。

属性:

  • Enabled:启用/禁用组件。
  • Identifier:可为应用加上标识符。
  • UpdateInterval:监测新实例发来消息的间隔时间(以毫秒为单位)。仅限 Unix 系统,因为 Win32 系统中通过 Windows 消息循环接收消息

事件:

  • OnOtherInstance:当有其他实例启动时会被调用。接收到传给新实例的参数。

纯代码的用法

在 uses 部分加入 uniqueinstanceraw 单元。

调用 InstanceRunning 函数,如果已有实例在运行将返回 true。 有两种调用方式:

  • 不带参数:将用可执行文件名作为标识符,不会发送命令行参数。
  • 带参数:
    • Identifier:应用的标识符。
    • SendParameters(default = false):在退出运行前,会向已运行实例发送命令行参数。

备注

  • 用 fpc 2.4.2 在 win32(XP SP2)和 Linux(Ubuntu 9.04)下测试通过。
  • 如果在同一个应用中放入两个具有标识符相同的 TUniqueInstance 组件,应用程序将无法加载。
  • 标识符对于函数和组件来说都是选填项。如果未使用标识符,则会以可执行文件名称作为标识符。因此,如果 exe 文件名称有变动,就无法识别出其他实例。另一方面,如果两个不同的应用使用了相同的标识符,那么两个应用将无法同时运行。
    • 提示:若要确保不会阻止其他应用的启动,可采用 GUID 作为标识符。

修改历史

  • 11/01/17 - Version 1.1
    • 兼容 fpc 3.0 以上版本
    • 清理代码
  • 17/04/11 - Version 1.0
    • 修复 unix 系统下应用崩溃后依然识别为正在运行的问题
    • 修复用 Gtk2 组件编译崩溃的问题
    • 设置公开属性的默认值
    • 优化性能并清理代码
    • 采用新图标
  • 02/10/07 - Version 0.2
    • 适于 fpc 2.2.0
    • 实现 unix 下接收命令行参数
    • 常规优化并清理代码
  • 16/12/06 - 初始版本。初始情况可参阅 我的博客

作者

Luiz Américo Pereira Câmara

版权

改动后的 LGPL


下载

1.1版:GitHub

最新开发进展位于 GitHub:https://github.com/blikblum/luipack/tree/master/uniqueinstance

可用 SVN 客户端同步:

 svn co https://github.com/blikblum/luipack.git/trunk/uniqueinstance

参见