您的位置:首页 > 编程语言 > Delphi

避免程式重複執行的方法[delphi]

2013-09-24 22:46 387 查看
出處 : http://jck11.pixnet.net/blog/post/8541840-%E9%81%BF%E5%85%8D%E7%A8%8B%E5%BC%8F%E9%87%8D%E8%A4%87%E5%9F%B7%E8%A1%8C%E7%9A%84%E6%96%B9%E6%B3%95%5Bdelphi%5D
用CreateMutex函數

var
Mutexhandle: THandle;
begin
Mutexhandle := CreateMutex(nil, true, 'jck11'); //建立Mutex
if Mutexhandle <> 0 then      //如果Mutex建立失敗
begin
if GetLastError = ERROR_ALREADY_EXISTS then  //程式已在執行
begin
MessageBox(0, '程式執行中', '警告', mb_iconhand);
CloseHandle(Mutexhandle);
Halt;    //結束程式
end;
end;
end;

用FindWindow函數

var
hWnd: THandle;
begin
hWnd:= FindWindow(nil, 'jck11');  //尋找程式的caption為jck11的視窗
if(hWnd <> 0)then begin           //找到了該視窗
if IsIconic(hWnd)then begin     //最小化的話就將它恢復
ShowWindow(hWnd, SW_RESTORE);
end else begin
SetForegroundWindow(hWnd);    //將視窗帶到最上層
end;
Halt;                           //結束程式
end;
end;

用EnumWindows函數

function EnumApps(Wnd: HWnd; lParam: LPARAM): boolean; stdcall;
var
WndCaption: array[0..254] of char;
begin
Result:= true;
GetWindowText(Wnd, @WndCaption, 254);  //取得視窗的caption
if(Pos('jck11', WndCaption) >= 1)then begin  //比對caption
if(IsIconic(Wnd)then begin           //最小化的話就將它恢復
ShowWindow(Wnd, SW_RESTORE);
end else begin
SetForegroundWindow(Wnd);     //將視窗帶到最上層
end;
Result:= false;
Halt;                          //結束程式
end;
end;


EnumWindows(@EnumApps, 0);  //列舉所有的視窗
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: