Delphi中调用API函数经验点滴(三)

3、防止屡次载入应用程序实例
  某些应用程序须要禁止用户载入屡次实例。好比,控制面板中的应用程序,无论用户打开多少次,同一应用程序只有一个实例,并且每一次试图重复打开都会自动激活已经存在的实例。

  Windows API 提供了函数FindWindow,能够是应用程序在启动时检查本身是否已经存在。

  该函数在Delphi中的语法是:

  function FindWindow(lpClassName: PChar, lpWindowName: PChar): HWND;

  其中,参数lpCalssName 是要查找的窗口的类的名称,参数lpWindowName是要查找的窗口的标题(Caption)。 若是找到了相应的窗口实例,将返回一个非0 的该窗口句柄的整型值,不然返回0 。所以,只要判断应用程序的主窗口(或者伴随着应用程序存在而存在的窗口)是否存在就能够判断是否已经有实例存在了。

  例如:

  H := FindWindow('TForm1', nil);

  if H = 0 then begin

   ShowMessage('没有发现相同的应用程序实例。');

   //加入加载应用程序的语句

   //...

  end else begin

   ShowMessage('应用程序已经加载。');

   SetActiveWindow(H);

  end;

  其中,参数lpWindowName的位置以Delphi保留字nil 代替,是由于窗口的标题可能在应用程序中是变化的。Windows API 函数SetActiveWindow 用于指定活动窗口。转自bbs.sendsms.cn函数

相关文章
相关标签/搜索