내 응용 프로그램에서 동일한 프로세스에 대한 창 텍스트를 읽습니다. User32.dll의 GetWindowText를 사용하고 있습니다. 그러나 메서드를 호출하려고하면 "처리되지 않은 'System.ExecutionEngineException'형식의 예외가 aaaa.exe에서 발생했습니다."예외가 발생합니다. 정확한 오류는 어디서 볼 수 있습니까? 그리고 왜 내가이 예외를 얻고 있는가.'System.ExecutionEngineException'형식의 처리되지 않은 예외가 발생했습니다. user32.dll의 GetWindowText()에서 창을 읽으려고 할 때
내 코드는 다음과 같습니다.
[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'를 초기 용량으로 초기화하고 그 용량을'GetWindowText' 함수에'nMaxCount'의 값으로 정확히 전달하기 위해 빠져 있습니다. 그 트릭을해야합니다. 그렇지 않으면 문자열 작성기 객체에 빈 버퍼가 있고 GetWindowText가 쓰기 작업에 실패합니다 (향후 게시를위한 사이드 노드로 : 코드를 4 칸 들여 쓰기하거나 * Format as Code * 버튼을 누르면 코드가 멋지게 포맷 됨). –
@divo : 차이점을 지적 해 주셔서 감사합니다. 문자열 빌더의 용량을 설정하고 API 빌더의 기능을 사용하면 트릭을 만들 수 있습니다. –