用CreateMutex判断程序是否已启动后,如何将已启动的程序推到最前,无论其被遮盖还是最小化?

解决方案 »

  1.   

    怎么没有高人指点呢?主要就是获得不了上一次启动程序的句柄,想用findwindow实现,但找到的总是本次启动的句柄。
      

  2.   

    好像有一个API函数,你可以查一下。
      

  3.   

    procedure SwitchToThisWindow(h1: hWnd; x: bool); stdcall;
      external user32 Name 'SwitchToThisWindow';
             {x = false: Size unchanged, x = true: normal size}
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      SwitchToThisWindow(FindWindow('notepad', nil), True);
    end;
      

  4.   

    CreateMutex(NULL,true, "demo");
        if ( GetLastError() == ERROR_ALREADY_EXISTS )
        {
          HWND hWnd = FindWindow("TfmMainForm","fmMainForm");
          if(IsWindow(hWnd))
          {
            ShowWindow(hWnd, SW_NORMAL);
            SetForegroundWindow(hWnd);
            Application->Terminate();
          }
        }
    我是想用类似的方式实现,可惜不成功,高人给看一下如何处理?
      

  5.   

    to aiirii:
      试验了一下,怎么没有按预期运行?麻烦给讲解一下。
      

  6.   

    ShowWindow(hWnd, SW_NORMAL);
            SetForegroundWindow(hWnd);这两句,换成:
     SwitchToThisWindow(hWnd, True);
      

  7.   

    找什么找呀
    PostMessage
    让前面的自个儿干活