加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

猪猪编程:Delphi防止程序重复运行

(2010-04-19 14:16:39)
标签:

delphi

杂谈

分类: 计算机

var
myMutex,FindHid:HWND;
MoudleName:string;
function EnumWndProc(hwnd:Thandle;param:Cardinal):bool;stdcall;
var
ClassName,WinMoudleName:string;
WinInstance:THandle;
begin
  result:=true;
  SetLength(ClassName,100);
  GetClassName(hwnd,pchar(ClassName),length(ClassName));
  ClassName:=pchar(ClassName);
  if ClassName=TFmmain.ClassName then
  begin
    WinInstance:=GetWindowLong(hwnd,GWL_HINSTANCE);
    setlength(WinMoudleName,100);
    GetModuleFileName(WinInstance,pchar(WinMoudleName),length(WinMoudleName));
    WinMoudleName:=pchar(WinMoudleName);
    if WinMoudleName=MoudleName then
    begin
       FindHid:=hwnd;
       result:=false;
    end;
    end;
end;
begin
   myMutex:=CreateMutex(nil,false,'XXXXX');
   if WaitForSingleObject(myMutex,0)<>wait_TimeOut then
    begin
      Application.Initialize;
      Application.Title := 'XXXX';
      Application.CreateForm(TfmMain, fmMain);
      Application.Run;
    end
    else
      begin//也可以用findwindows的方法找窗体
      SetLength(MoudleName,100);
      GetModuleFileName(HInstance,pchar(MoudleName),length(MoudleName));
      MoudleName:=pchar(MoudleName);
      EnumWindows(@EnumWndProc,0);
      if FindHid<>0 then
      begin
      ShowWindow(FindHid,SW_MAXIMIZE);//重复运行显示窗体
      SetForegroundWindow(FindHid);
      end;

      end;
 end.

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有