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

Posted

技术标签:

【中文标题】c#获取活动窗口文本(导致vshost32.exe停止工作)【英文标题】:c# Get Active Window Text (causes vshost32.exe has stopped working) 【发布时间】:2016-09-29 16:23:51 【问题描述】:

我基本上是在运行一个获取活动窗口文本的 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()

注意:当我尝试使用记事本或类似的程序(如记事本或 blocknote)时,它运行良好,但当我在 Google Chrome 上尝试时,它会导致程序崩溃 vshost32.exe 已停止工作。

【问题讨论】:

您应该将您的解决方案添加为答案,然后将其标记为已接受(在时间限制之后)。 @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);

【讨论】:

以上是关于c#获取活动窗口文本(导致vshost32.exe停止工作)的主要内容,如果未能解决你的问题,请参考以下文章

C#之app.configexe.config和vshost.exe.config作用区别

使用我的 c# 应用程序从谷歌浏览器中获取文本

visual studio vshost.exe 已停止工作的问题

从 32 位 C# 到 64 位 C++ 的 PostMessage 参数

我无法杀死 MyApp.vshost.exe

程序'[13476] MyApp.vshost.exe'已退出,代码为-1(0xffffffff)