An unhandled exception of type 'System.ExecutionEngineException' occurring When trying to read window from GetWindowText() of user32.dll

c#, user32

Solution

You are getting this exception because your GetWindowText() call corrupted the garbage collected heap. Easy to do when you pass a string instead of a StringBuilder or forget to initialize the StringBuilder.

The Right Way:

  [DllImport("user32.dll", CharSet = CharSet.Unicode)]
  private static extern bool GetWindowText(IntPtr hWnd, StringBuilder buffer, int buflen);
...
  var sb = new StringBuilder(666);
  if (GetWindowText(handle, sb, sb.Capacity)) {
    string txt = sb.ToString();
    //...
  }

Problem

In my application, I am reading the text of a window for the same process. I am using GetWindowText of User32.dll. But when it tries to call the method, I am getting the exception "An unhandled exception of type 'System.ExecutionEngineException' occurred in aaaa.exe". Where can I see the exact error. And why I am getting this exception. My code is as below. ``` [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern int GetWindowText(IntPtr hWnd, [Out] StringBuilder lpString, int nMaxCount); EnumDelegate enumfunc = new EnumDelegate(EnumWindowsProc); private bool EnumWindowsProc(IntPtr win, int lParam) { StringBuilder sb = new StringBuilder(); GetWindowText(win, sb, 100); if (sb.Length > 0) { // do something } } ```

Original source