我的from必须设置 ontop属性。
所以ShellExecute调用一个外部exe后,总是看不到那个exe的窗口。
请问有什么办法让他也ontop?

解决方案 »

  1.   

    可能要在执行之前将form的ontop取消,然后再设置吧。
      

  2.   

    如果那个EXE是你自己写的,调用它时,先把自己的这个form设置不在最顶端,然后发送一个消息或通过两个应用程序共享内存来实现,被你启动的应用程序接到消息后再把自己设置为最顶端,关闭时执行相反的操作,就可以了,
      

  3.   

    Jumpi(Delphiing) 
    那必须有个检查程序调要完毕的过程阿,光ShellExecute好像不行吧。
      

  4.   

    lianshaohua(永远深爱一个叫“...... ”的好女孩儿!) :
    Exe 不是偶写的,是自解压缩包,里面ppt和视频等乱七八糟东西。唉,麻烦
      

  5.   

    呵呵,楼主给分吧!
    var
      h: Hwnd; 
    begin
      ShellExecute(handle,'open','Help.chm',nil,nil,SW_ShowNormal);
      h := FindWindow(nil,'帮助手册');  //帮助手册是窗口标题
      SetWindowPos(h,HWND_TopMost,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
    end;
      

  6.   

    var
      h: Hwnd;
      i: Integer; 
    begin
      h := 0;
      i := 0;
      ShellExecute(handle, 'open', 'English.chm', nil, nil, SW_ShowNormal);
      while (h = 0) and (i < 1000) do
      begin
        Sleep(10);
        h := FindWindow('HH Parent', nil);  //在Win 2k Pro下,类名是'HH Parent';
        Inc(i, 1);
      end;
      Self.Caption := CurrToStr(h);
      SetWindowPos(h, HWND_TopMost, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
    end;
    根据 loveWife 的方法更改而来,经过测试存在一个问题:
    如果打开多个,那么只有一个会置顶!