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

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值