簡體   English   中英

在Delphi中捕獲Windows名稱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM