Delphi中呼叫API函式經驗點滴(三)

2021-09-02 13:18:00 字數 789 閱讀 3128

三、防止多次載入應用程式例項

某些應用程式需要禁止使用者載入多次例項。比如,控制面板中的應用程式,不管使用者開啟多少次,同一應用程式只有乙個例項,而且每一次試圖重複開啟都會自動啟用已經存在的例項。

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

Delphi函式呼叫效率測試

delphi在給函式傳參的時候,可以在引數前加上var const out做修飾,或者也可以使用指標引數。這幾種方式的應用場景都很清晰了,但是他們的執行效率有什麼差別呢?為此我做了乙個測試,定義乙個整數陣列aints array 0.10000 of integer 並將其作為引數傳給乙個空函式。迴...

VB VB中呼叫MSN 6 2 API函式

vb中呼叫msn 6.2 api函式 了解這方面內容的起因是早上有位朋友讓我看一段關於msn開發程式,現在無法執行,我開啟工程發現是針對4.7編寫的,而他的計算機安裝的6,2,因為我也用6.2所以我在vb中檢視了一下,發現是缺少messenger type library。但是多了messenger...

DELPHI中建立呼叫DLL

一,新建 new other dll wizard 二,library new uses sysutils,classes,dialogs procedure dll begin showmessage delphi end exports dll begin end.三,儲存,四,project ...