2016-09-29 51 views
1

我基本上運行的Windows窗體是得到一個活動窗口的文本,例如谷歌瀏覽器 - 一些文字:C#獲取活動窗口文本(導致vshost32.exe已停止工作)

我在這裏的方法:

public static String GetActiveWindowText() 
{ 
     var handle = GetForegroundWindow(); 
     var sb = new StringBuilder(); 
     GetWindowText(handle, sb, 1000); 
     return sb.Length == 0 ? "Unhand Window" : sb.ToString(); 
} 

的GetForegroundWindow():

[DllImport("user32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)] 
public static extern IntPtr GetForegroundWindow() 

注:當我嘗試在記事本或類似的程序例如記事本或blocknote它完美的作品,但是當我在谷歌瀏覽器上試用時,它會導致程序崩潰vshost32.exe已停止工作。

+0

您應該添加您的解決方案作爲一個答案,然後將其標記爲已接受(時間限制之後)。 –

+0

@Bradley Uffner做到了! , 謝謝! –

回答

1

解決

我不得不文本的長度第一:

public static String GetActiveWindowText() 
{ 

    var handle = GetForegroundWindow(); 
    int length = GetWindowTextLength(handle); // Length First 
    var sb = new StringBuilder(length + 1); 
    GetWindowText(handle, sb, sb.Capacity); 
    return sb.Length == 0 ? "Unhand Window" : sb.ToString(); 

} 

GetWindowTextLength是:

[DllImport("user32.dll", SetLastError= true, CharSet= CharSet.Auto)] 
public static extern Int32 GetWindowTextLength(IntPtr hWnd); 
相關問題