怎样激活上一个活动窗口?(0分)

  • 主题发起人 主题发起人 Dale46
  • 开始时间 开始时间
D

Dale46

Unregistered / Unconfirmed
GUEST, unregistred user!
如 要在窗口1内输入"你好", 此时打开窗口2,(窗口2中的button可以把<br>"你好"加入到剪贴版)应该怎样才能通过按button使"你好"被输入到窗口1中,<br>即激活窗口1,而不是其他的窗口.
 
能不能说清楚点,你“窗口1”不是已经有了吗???<br>是把“窗口1”中的“你好”输到“窗口2”中,还是“窗口2”输到<br>“窗口1”中???
 
第一步:窗口1处于激活状态<br>第二步:切换为窗口2处于激活状态,窗口1处于非激活状态<br>第三步:怎样使窗口1重新被激活?<br><br>窗口1属于其他程序,窗口2属于我编的程序
 
根据 msdn 说用 &nbsp;GetNextWindow<br>但我没有成功,不知道为什么。
 
看看SetForegroundWindow行不行。<br>不过在win98和win2000,该API不能将另一个程序切换到前台。如果是这样的话,试试SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, nil, 0)或者AttachThreadInput<br>
 
BringWindowToFront 大概是吧可以,<br>但现在难的是找到句柄。
 
1)<br>如果两个form在一个程序里,用BringWindowToTop或Form1.BringToFront,<br>否则应该用SetForegroundWindow,下面是MSDN里BringWindowToTop里面的一句话<br>If an application is not in the foreground and wants to be in the <br>foreground, it should call the SetForegroundWindow function. <br>2)<br>找句柄怎么难?用FindWindow不行吗?如果想找子窗口,可以用GetWindow或<br>EnumChildWindows<br>不知道你的目的是什么
 
to partisan:<br>&nbsp; 他要找的是上一个激活的窗口
 
用setactivewindow设置窗口2为活动窗口,此函数的返回值为上一个<br>活动窗口的句柄,再setactivewindow设窗口1即可。<br>例:<br>hLastWindow:=SetActiveWindow(Self.Handle);<br>SetActiveWindow(hLastWindow);<br>
 
不是的,比如我先激活我的程序,再切换到另一个程序(B),<br>再切换回来,点一个button 显示 B 的标题,<br><br>呵呵,好象与 z order &nbsp;有关的,
 
截取WM_Activate消息,其LParam参数是刚失去窗口的Handle,<br>下面是我以前写的一段测试代码。<br><br>unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,<br>&nbsp; StdCtrls;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; procedure Button1Click(Sender: TObject);<br>&nbsp; &nbsp; procedure GorFore(var Msg: Tmessage); message WM_Activate;<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>end;<br><br>var<br>&nbsp; Form1: TForm1;<br>&nbsp; ForeHandle:thandle;<br>implementation<br>procedure Tform1.GotFore(var Msg: Tmessage);<br>begin<br>&nbsp; &nbsp; &nbsp;ForeHandle:=Msg.LParam;<br>end;<br>{$R *.DFM}<br><br>procedure TForm1.Button1Click(Sender: TObject);<br><br>begin<br>&nbsp; &nbsp; &nbsp;windows.setactivewindow(ForeHandle);<br>end;<br><br><br>PS: 这个问题也不给点分:-(
 
cheka说的对,但是是WM_ActivateAPP消息吧?<br>至少我用的是WM_ActivateAPP
 
总觉得有点不太好,呵呵。
 
接受答案了.
 
这样作有问题:如果“刚失去窗口的Handle”指向的是一个最大化的窗口,<br>这时候焦点居然在任务栏上。是不是我搞错了?
 
后退
顶部