出處 : 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); //列舉所有的視窗