c#获取活动窗口文本(导致vshost32.exe停止工作)

时间:2016-09-29 16:23:51

标签: c# winforms

我基本上运行一个Windows窗体来获取活动窗口的文本,例如Google Chrome - 一些文字:

我的方法在这里:

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()

注意:当我尝试使用记事本或类似程序(如记事本或阻塞程序)时,它可以正常运行但是当我在Google Chrome上试用它时会导致程序崩溃,vshost32.exe已停止工作。< / p>

1 个答案:

答案 0 :(得分: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);