2013-09-08 4 views
0

Я делаю программу в 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; 
+0

Можете ли вы привести пример того, что идет не так, и пример того, что вы ожидали? «Показывает, что я не делаю то, что хочу», недостаточно для того, чтобы мы могли вам помочь. –

ответ

3

Вы ничего не делать, чтобы инициализировать nombre2, так nombre1 = nombre2 никогда не может быть правдой. nombre2 всегда nil.

Установка nombre2 := nombre1; в заявлении if также не имеет смысла, так как значение немедленно теряется при завершении процедуры; следующий вызов события таймера начинается с nombre2 = nil, потому что nombre2 - это новая локальная переменная, которая инициализируется до nil каждый раз, когда вводится процедура, и она выдается каждый раз, когда процедура завершается.

Move 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 
+0

Спасибо Кен Уайт. –

Смежные вопросы