设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 361|回复: 5
打印 上一主题 下一主题

窗口如何激活自己

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-16 14:55:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在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);
那么,窗口就可以自己激活自己了,爽吧!
2#
发表于 2009-12-31 14:05:07 | 只看该作者
我来自火星刚到地球什么都不懂
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-19 23:39 , Processed in 0.112692 second(s), 8 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表