在window98以下,如果程序要激活自己,只需要简单的调用setforegroundwindow即可达到目的。但到win98以后,再也没有这么简单了。
在window98以下,如果程序要激活自己,只需要简单的调用setforegroundwindow即可达到目的。但到win98以后,再也没有这么简单了。
新建一个简单的工程,加进一个timer控件,设置时间间隔为3秒,接着在时间事件中写setforegroundwindow(handle),好,运行程序,将窗口切换到后台,3秒钟之后,你看到的只是任务栏上闪了闪,窗口仍然躺在后面。
这是怎么回事呢,原来在win98以后,窗口要使用setforegroundwindow激活自己,必须得到“允许”,允许的方式有很多种,我只介绍最简单的一种,就是利用这个api:locksetforegroundwindow先解锁foreground的窗口,然后再调用setforegroundwindow。
locksetforegroundwindow在delphi的windows单元中并没有声明,需要自己声明,我将激活的函数重新封装如下,需要的朋友直接用就可以了:
const
lsfw_lock = 1;
lsfw_unlock = 2;
function locksetforegroundwindow(ulockcode: dword): bool; stdcall;
implementation
function locksetforegroundwindow; external user32.dll name locksetforegroundwindow;
function wdsetforegroundwindow(handle: thandle): boolean;
begin
//-----------------------------------------------------
//作者:linzhenqun
//时间:2006-11-1
//说明:使win98以上的窗口都可以设置foreground的函数
//-----------------------------------------------------
if ((win32platform = ver_platform_win32_nt) and (win32majorversion> 4))//up win 2000
or ((win32platform = ver_platform_win32_windows) and //up win 98
((win32majorversion > 4) or
((win32majorversion = 4) and
(win32minorversion > 0)))) then
locksetforegroundwindow(lsfw_unlock);
result := setforegroundwindow(handle);
end;
现在你在时间事件中写下如下代码:
application.restore;
wdsetforegroundwindow(handle);
那么,窗口就可以自己激活自己了,爽吧!
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!


