zoukankan      html  css  js  c++  java
  • GetForegroundWindow 与 GetActiveWindow 的区别 回复 "delphier" 的问题

    问题来源: http://www.cnblogs.com/del/archive/2008/12/13/1081644.html#1400835

    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
    
  • 相关阅读:
    LeetCode OJ String to Integer (atoi) 字符串转数字
    HDU 1005 Number Sequence(AC代码)
    HDU 1004 Let the Balloon Rise(AC代码)
    HDU 1003 Max Sum(AC代码)
    012 Integer to Roman 整数转换成罗马数字
    011 Container With Most Water 盛最多水的容器
    010 Regular Expression Matching 正则表达式匹配
    007 Reverse Integer 旋转整数
    006 ZigZag Conversion
    005 Longest Palindromic Substring 最长回文子串
  • 原文地址:https://www.cnblogs.com/del/p/1354291.html
Copyright © 2011-2022 走看看