0

我在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;
4

1 回答 1

3

你什么都不做 initialize 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
于 2013-09-08T00:42:35.577 回答