[英]Capture windows name in 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;
您無需執行任何操作來初始化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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.