7a951编程学习

程序源码分享

GetForegroundWindow 与 GetActiveWindow 的区别 - 回复 "delphier" 的问题


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.


窗体文件:

object Form1: TForm1

  Left = 0

  Top = 0

  Caption = 'Form1'

  ClientHeight = 155

  ClientWidth = 250

  Color = clBtnFace

  Font.Charset = DEFAULT_CHARSET

  Font.Color = clWindowText

  Font.Height = -11

  Font.Name = 'Tahoma'

  Font.Style = []

  OldCreateOrder = False

  OnCreate = FormCreate

  PixelsPerInch = 96

  TextHeight = 13

  object Label1: TLabel

    Left = 32

    Top = 24

    Width = 281

    Height = 17

    Caption = 'Label1'

  end

  object Label2: TLabel

    Left = 32

    Top = 47

    Width = 281

    Height = 17

    Caption = 'Label2'

  end

  object Button1: TButton

    Left = 24

    Top = 87

    Width = 97

    Height = 25

    Caption = 'Button1'

    TabOrder = 0

    OnClick = Button1Click

  end

  object Button2: TButton

    Left = 136

    Top = 87

    Width = 97

    Height = 25

    Caption = 'Button2'

    TabOrder = 1

    OnClick = Button2Click

  end

  object Button3: TButton

    Left = 24

    Top = 118

    Width = 209

    Height = 25

    Caption = 'Button3'

    TabOrder = 2

    OnClick = Button3Click

  end

  object Timer1: TTimer

    OnTimer = Timer1Timer

    Left = 208

    Top = 56

  end

end



发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

备案号: 蜀ICP备2022006995号-1