我需要在一个程序(A)点击一个按钮,先用FINDWINDOW去判断另一个程序(B)是否打开,如果没有则用shellexecute打开(用shellexecute打开的程序B的窗口是前置激活的);如果打开了,就用FINDWINDOW获取的窗口句柄去激活另一个程序的窗口状态(如果它最小化就将其最大化然后激活),现在窗口句柄能够获取,但是用了好几种办法都无法将另一个程序(B)的窗口激活,SendMessage(_hwnd, WM_SYSCOMMAND, SC_MAXIMIZE ,0)、SendMessage(_hwnd, WM_SYSCOMMAND, SC_RESTORE,0)、SHOWWINDOW(hwnd,SW_SHOWMAXIMIZED)都试过了,都不行,是不是在点击程序(A)的按钮时,无法让(B)激活?有什么办法可以解决?请赐教,急!!!!

解决方案 »

  1.   

    在你的代码后面,再加上: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;
      

  2.   

    是不是句柄没找正确啊,你跟下程序,看要找的句柄是否为空。或者换其他的消息在试试,比如wm_activate等