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

来源:互联网 发布:黑米软件官方吧 编辑:程序博客网 时间:2024/05/16 23:12

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


原创粉丝点击