在Delphi中捕获Windows名称

时间:2013-09-08 00:28:40

标签: delphi

我正在delphi中执行一个捕获活动窗口的程序问题是代码没有做我想要的,我想要的是一个计时器在适当的时候识别活动窗口,以便附加活动窗口的名称和而不是显示永远等待,直到你看到一个不同的名称,问题是它总是显示不做我想要的。 如果问题不是我做得好的验证。

代码

procedure TForm1.Timer4Timer(Sender: TObject);

var
  ventana1: array [0 .. 255] of char;       
  nombre1: string;
  nombre2: String;

begin

  GetWindowText(GetForegroundWindow, ventana1, SizeOf(ventana1));

  nombre1 := ventana1;

  if not(nombre1 = nombre2) then
  begin
    nombre2 := nombre1;
    Memo1.Lines.Add(nombre2);
  end;

end;

1 个答案:

答案 0 :(得分:3)

您无需初始化nombre2,因此nombre1 = nombre2永远不会成立。 nombre2始终为nil

nombre2 := nombre1;语句中设置if也没有意义,因为当程序退出时,该值立即丢失;计时器事件的下一次调用将从nombre2 = nil开始,因为nombre2是一个新的本地变量,每次进入该过程时都会初始化为nil,并且每次执行该过程时都会释放它退出。

nombre2移动到表单实例变量:

type
  TForm1 = class(TForm)
    // normal declarations here
    procedure Timer4Timer(Sender: TObject);
  private
    Nombre2: string;  // I'd use LastWindowName myself. :-)
  ...
  end;

现在,在你的计时器事件中:

procedure TForm1.Timer4Timer(Sender: TObject);
var
  ventana1: array [0 .. 255] of char;       
  nombre1: string;  // I'd use 'NewName' 
begin
  GetWindowText(GetForegroundWindow, ventana1, SizeOf(ventana1));

  nombre1 := ventana1;

  if not(nombre1 = nombre2) then  // Now nombre2 still has the last value,
  begin                           // because it's no longer a local variable
    nombre2 := nombre1;           // Store new "last window name"
    Memo1.Lines.Add(nombre2);
  end;
end