Delphi GetForegroundWindow 与 GetActiveWindow 的区别


本文整理自网络,侵删。

 
GetActiveWindow 只是获取当前程序中(严格地说是线程中)被激活的窗口;
GetForegroundWindow 是获取当前系统中被激活的窗口.

两个函数的级别不一样, 一个是线程级、一个是系统级.

被激活的窗口不一定是顶层窗口(最上面的窗口).

下面的例子可以充分说明问题, 测试方法:点击三个按钮,然后反复切换焦点、观察.

代码文件:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  i: Integer;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  buf: array[Byte] of Char;
begin
  GetWindowText(GetActiveWindow, buf, Length(buf)*SizeOf(buf[0]));
  Label1.Caption := 'GetActiveWindow: ' + buf;

  GetWindowText(GetForegroundWindow, buf, Length(buf)*SizeOf(buf[0]));
  Label2.Caption := 'GetForegroundWindow: ' + buf;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  frm: TForm1;
begin
  Inc(i);
  frm := TForm1.Create(Self);
  frm.FormStyle := fsNormal;
  frm.Text := Format('Normal %d', [i]);
  frm.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  frm: TForm1;
begin
  Inc(i);
  frm := TForm1.Create(Self);
  frm.FormStyle := fsStayOnTop;
  frm.Text := Format('StayOnTop %d', [i]);
  frm.Show;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  WinExec('notepad.exe', SW_NORMAL);
  WinExec('calc.exe', SW_NORMAL);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval := 100;
  Button1.Caption := '建立一般窗口';
  Button2.Caption := '建立顶层窗口';
  Button3.Caption := '启动记事本和计算器';
end;

end.

相关阅读 >>

Delphi xe system.netencoding 字符串base64编码解码

Delphi中操作olevariant、variant和stream

Delphi 打开android应用信息

Delphi 使用 idhttp 获取 utf-8 编码的中文网页

Delphi gridpanel percent百分比设置

Delphi recodedatetime、recodedate、recodetime、recodeyear ... 修改时间

Delphi fmx手机app,如何下载网站图片而不卡界面

Delphi datamodule1 fdconnection1数据库连接

Delphi 如何按下esc键退出程序

Delphi 判断时间是否合法 -isvaliddatetime、isvaliddate、isvalidtime、isvaliddateday

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...