我正在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;
答案 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