GetWindowText()函数并非始终正确执行

Hag*_*ble 3 c# vshost32 interopservices .net-4.5 visual-studio-2012

我正在编写一个小型应用程序,希望从Chrome浏览器中获取URL。

为了首先检查Chrome浏览器是否打开,我使用以下代码:

 IntPtr WindowTitleTextPtr = GetForegroundWindow();

 StringBuilder WindowTitleText = new StringBuilder();

 GetWindowText(WindowTitleTextPtr, WindowTitleText, 256); // Problem

 ...
Run Code Online (Sandbox Code Playgroud)

我正在使用GetWindowText()函数获取Windows标题文本,但在那里我遇到了问题。

如果Chrome窗口没有URL,只是一个New Tab,那么我没有问题,WindowTitleText.ToString()等于New Tab-Google Chrome

但是,如果我打开网页,在这种情况下,URL填充了一些URL,则在 GetWindowText()行中我得到: vs32host.exe已停止工作消息窗口,要求我执行以下操作:在此处输入图片说明

这是怎么回事?

救命!

Dmi*_*nko 5

您应该在实例内分配内存StringBuilder

  StringBuilder WindowTitleText = new StringBuilder();

  int size = 256;
  WindowTitleText.Length = size; // <- Memory allocation

  // Read text into allocated memory
  GetWindowText(WindowTitleTextPtr, WindowTitleText, WindowTitleText.Length); 
Run Code Online (Sandbox Code Playgroud)