var
Mutex:THandle;
findw:hwnd;
begin
 Mutex:=CreateMutex(NIL,True,'SingleApp');
  IF GetLastError=ERROR_ALREADY_EXISTS THEN
   begin
    findw:=findwindow(0,'noxe');
    showwindow(application.Handle,SW_Normal);
    halt;
   end;
  Application.Initialize;
  Application.CreateForm(Tnoxe, noxe);
  Application.Run;我想在程序运行前检测一下 如果已经运行让原来窗口成为当前窗口 并NORMAL 请问如何做啊?

解决方案 »

  1. var
    Mutex:THandle;
    findw:hwnd;
    begin
     Mutex:=CreateMutex(NIL,True,'SingleApp');
      IF GetLastError=ERROR_ALREADY_EXISTS THEN
       begin
        findw:=findwindow(0,'noxe');
        showwindow(application.Handle,SW_Normal);
        halt;
       end;
      Application.Initialize;
      Application.CreateForm(Tnoxe, noxe);
      Application.Run; 这是我得程序片段
      

  2. uses windows,Forms;
    {$R *.RES}
    var
     hMutex:HWND;
     Ret:Integer;
    begin
      Application.Title := 'SingleApp';
      hMutex:=CreateMutex(nil,False,'SingleApp');
      Ret:=GetLastError;
      If Ret<>ERROR_ALREADY_EXISTS Then
      begin
        Application.CreateForm(TMainMenuFrm, MainMenuFrm);
        Application.Run;
      end
      else
      Application.MessageBox('你已经运行了<<SingleApp>>程序了!','提示',mb_ok+mb_iconinformation);
      ReleaseMutex(hMutex);
      

  3. 退出delphi运行该程序。
    uses windows,var
    prewindow : HWND;begin
      Application.Initialize;
      prewindow:=findwindow('TForm1','Form1');
      if prewindow<>0 then
        begin
             setforegroundwindow(prewindow);//窗口提前
             application.Terminate;
        end;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.
      

  4. 我要得就是让窗口提前 另外我程序中findwindow后面应该接findw 我自己搞错了!
     setforegroundwindow(findw); 
     showwindow(findw,SW_Normal);这样就完整了!  
    谢谢楼上兄弟!
      

类似问题 »