I
iamfly
Unregistered / Unconfirmed
GUEST, unregistred user!
今天在inside programming里看到一篇关于窗口切换的,恬好用在我曾经做过的程序上。<br>不敢一人独享,特拿出来,希望大家有用:)<br>原文是这样的(部分):98/2000下,有个公开的函数SetForegroundWindow,用于切换前台窗口.<br>但是事实上,SetForegroundWindow并不能用于和其他进程的窗口协同工作,通常情况下<br>SetForegroundWindow会调用FlashWindowEx来闪烁目标窗口,代表已经切换了窗口,但是这不<br>是我们需要的.网络上有一些顶尖高手使用修改窗口切换的系统规则后,用SetForegroundWindow<br>切换到其他进程的窗口,但是现在,我们有了UNDOCUMENTED的另外一个USER32函数: <br>SwitchToThisWindow(...); <br>来完成这项工作. <br>那么原型是怎么的呢? 下面就来揭晓了...... <br>void WINAPI SwitchToThisWindow ( <br> HWND hWnd, // Handle to the window that should be activated <br> BOOL bRestore // Restore the window if it is minimized <br> ); <br><br>我在DELPHI中试了一下,成功了:)<br>我的实现部分代码如下:<br>
<br>我的软件环境:98SE+DELPHI5(未打补丁)
代码:
<br>//首先,在你的FORM的PRIVATE里,定义相关procedure与变量:<br>type<br> TForm1 = class(TForm)<br> ...<br> ...<br> private<br> hooklib: thandle;<br> switchwin: procedure(hwnd:thandle;brestore:boolean);stdcall; <br>//第一个参数传递你要SHOW的窗口句柄,第二个参数是TRUE时如果窗口是最小化状态,就恢复最小化前状态<br> ...<br> ...<br> end; <br>//再在FORM的oncreate事件里写入两行代码:<br> hooklib:=getmodulehandle('USER32');<br> @switchwin := getprocaddress(hooklib, 'SwitchToThisWindow');<br><br>//最后,在你要用到的地方调用switchwin,比如这样:<br>switchwin(w_HidedWindow,true)就可以了<br>