2009-09-16 42 views
2

我試着下面的代碼,但它不會從前臺窗口檢索的文字!GetWindowText函數不檢索文字

procedure TForm1.Button1Click(Sender: TObject); 
var 
    title : pansichar; 
    s : string; 
begin 
    GetWindowText(GetForegroundWindow(), title,GetWindowTextLength(GetForegroundWindow()) + 1); 
    s := title; 
    showmessage(s); 
end; 
+0

您的代碼寫着 「Form1的」 給我。這**是**當前活動窗口的標題(=文本)。 – 2009-09-16 16:08:46

+0

這個「標題」指針是不是應該指向某個東西? – mj2008 2009-09-16 16:12:58

+0

它給我訪問voilation錯誤,如果我初始化標題它只是給初始值 – 2009-09-16 16:16:29

回答

9

使用這一個:

var 
    hwndForeground: HWND; 
    titleLength: Integer; 
    title: string; 
begin 
    hwndForeground := GetForegroundWindow(); 
    titleLength := GetWindowTextLength(hwndForeground); 
    SetLength(title, titleLength); 
    GetWindowText(hwndForeground, PChar(title), titleLength + 1); 
    title := PChar(title); 

    ShowMessage(title); 
end; 
+0

我已經編輯了這個文件,以使它可以用於Delphi的Unicode版本。 – 2009-09-16 18:49:08

3

替換此行:

title : pansichar; 

與此:

title: array[0..255] of Char; 
2

試試這個代碼

procedure TForm1.Button1Click(Sender: TObject); 
var 
    title : array[0..254] of Char; 
    s : string; 
begin 
    GetWindowText(GetForegroundWindow(), title,255); 
    s := title; 
    showmessage(s); 
end; 

再見。

+0

現在我收到此錯誤:[錯誤] Unit1.pas(31):不兼容的類型:「陣列」和「PAnsiChar」 – 2009-09-16 16:21:59

+0

順便說一句,我使用的Delphi 7也許widechars不支持 – 2009-09-16 16:23:26

+0

是除去「」寬「」使它工作,但爲什麼沒有widechar工作? – 2009-09-16 16:25:32

1
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
    liHwnd, liLength : Integer; 
    lpChar : PChar; 
begin 
    liHwnd := GetForegroundWindow(); 
    liLength := GetWindowTextLength(liHwnd) + 1; 
    lpChar := StrAlloc(liLength); 
    Try 
    GetWindowText(liHwnd, lpChar, liLength); 

    showmessage(lpChar); 
    Finally 
    StrDispose(lpChar); 
    End; 
end;