Delphi中調用API函數經驗點滴(三)

三、防止多次載入應用程序實例
  某些應用程序需要禁止用戶載入多次實例。比如,控制面板中的應用程序,不管用戶打開多少次,同一應用程序只有一個實例,而且每一次試圖重複打開都會自動激活已經存在的實例。

  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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章