Delphi GetForegroundWindow 与 GetActiveWindow 的区别

2023-01-01 09:12:22 作者:admin

本文整理自网络,侵删。

 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 urlencode

Delphi 的webbrowser如何全选并复制浏览器上的文字

Delphi access 导出 excel 表格

Delphi如何判断系统是否安装了flash插件

Delphi 2009 之 tcategorypanelgroup[3]: color

Delphi 对提交参数编码

Delphi 按字母排序的windows窗口公用消息

Delphi使用正则匹配网页数据

Delphi string转为olevariant

Delphi 动态调整打印机纸张大小

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



在线咨询 拨打电话