窗口如何激活自己

王朝other·作者佚名  2006-11-02
窄屏简体版  字體: |||超大  

在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);

那么,窗口就可以自己激活自己了,爽吧!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航