如何将程序置于所有其他程序的前面?(50分)

  • 主题发起人 主题发起人 shirly
  • 开始时间 开始时间
S

shirly

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序要与其他人的程序配合使用,流程是这样的,先启动我程序,将其最小化,然后启动其他的程序向我的程序发送数据,我来校验发送的是否正确,如果不对,要报错,现在问题时,报错时,怎么才能将我的程序置于其他程序的前面呢?让用户不用点一下才能看到报的错误。
 
&nbsp;SetWindowPos(Application.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);<br>&nbsp; SetWindowPos(Self.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);<br>
 
取得Application.Handle后,<br>&nbsp; &nbsp;SetForegroundWindow(AppWnd);<br>
 
在2000下试过了,不行。
 
不会吧!
 
procedure TForm1.FormShow(Sender: TObject);<br>begin<br>&nbsp; SetWindowPos(handle, HWND_TopMost, 0,0,0,0,SWP_NoMove or SWP_NoSize or SWP_ShowWindow); &nbsp;//保证此窗体无论何时都处于最上层<br>end;
 
是的,我的主窗口是个MDIForm,我想将我的程序在出错的时候提到最前面,然后再ShowMessage提示错误,但是没有实现,请赐教!
 
function SetSysFocus(hwnd: integer): integer;<br>var<br>&nbsp; hOtherWin, OtherTHreadID, hFocusWin: integer;<br>begin<br>&nbsp; hOtherWin := GetForegroundWindow;<br>&nbsp; OtherThreadID := GetWindowThreadProcessID(hOtherWin, nil);<br>&nbsp; if AttachThreadInput(GetcurrentThreadID, OtherThreadID, True) then<br>&nbsp; begin<br>&nbsp; &nbsp; hFocusWin := GetFocus;<br>&nbsp; &nbsp; result := SetFocus(hwnd);<br>&nbsp; &nbsp; if hFocusWin &lt;&gt; 0 then<br>&nbsp; &nbsp; try<br>&nbsp; &nbsp; finally<br>&nbsp; &nbsp; &nbsp; AttachThreadInput(GetCurrentTHreadID, OtherTHreadID, False);<br>&nbsp; &nbsp; end;<br>&nbsp; end<br>&nbsp; else<br>&nbsp; &nbsp; result := SetFocus(hwnd);<br>end;<br><br>然后用<br>&nbsp; &nbsp; SetSysFocus(Self.Handle);<br>&nbsp; &nbsp; ShowWindow(Self.Handle, sw_normal);<br>这个self就是你要显示的窗口啦。
 
要是提示的话,你直接用messagebox好了,这个有topmost
 
formstyle:=fsStayOnTop难道不可以么?判断有错时,把你窗体的formstyle属性修改成fsStayOnTop不就得了.完后再次修改回去。
 
接受了myStudy的答案,我只需要让其能看到错误提示就好了。<br>bjaman:不能这样做,因为这样的话,其他的程序就用不了了。<br>
 
后退
顶部