在我的应用程序中,我正在阅读同一进程的窗口文本.我正在使用User32.dll的GetWindowText.但是当它试图调用该方法时,我收到异常"aaaa.exe中发生了'System.ExecutionEngineException'类型的未处理异常".我在哪里可以看到确切的错误.为什么我得到这个例外.
我的代码如下.
[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
}
}
Run Code Online (Sandbox Code Playgroud)
您收到此异常是因为您的GetWindowText()调用损坏了垃圾收集堆.传递字符串而不是StringBuilder或忘记初始化StringBuilder时很容易.
正确的方式:
[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();
//...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5511 次 |
最近记录: |