В моем приложении я читаю текст окна для того же процесса. Я использую GetWindowText из User32.dll. Но когда он пытается вызвать метод, я получаю исключение «Необработанное исключение типа« System.ExecutionEngineException »произошло в aaaa.exe». Где я могу увидеть точную ошибку. И почему я получаю это исключение.Необработанное исключение типа «System.ExecutionEngineException», возникающее При попытке прочитать окно из GetWindowText() user32.dll
Мой код такой, как показано ниже.
[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
}
}
Не могли бы вы показать нам (пониженная) образец экспонирование исключение? Возможно, это может быть проблема с тем, что вы называете «GetWindowText». Поскольку вы хотите прочитать текст из окна того же процесса, почему бы вам не использовать управляемый API? –
@AvidProgrammer: Ваш код отличается от образца nobugz. Вам не хватает инициализировать 'StringBuilder' с начальной пропускной способностью и передать именно эту емкость как значение' nMaxCount' функции 'GetWindowText'. Это должно делать свое дело. Если вы этого не сделаете, ваш объект строкового построителя имеет пустой буфер, и GetWindowText не сможет его записать (и в качестве бокового узла для будущих проводок: отложите свой код на 4 пробела или нажмите кнопку * Format as Code *, что сделает код красиво отформатирован). –
@divo: Спасибо, что указали разницу. Настройка производительности строкового построителя и отправка его в функцию api сделала трюк. –