none
获取其它进程的类名出错 RRS feed

  • 问题

  • 各位老师好,我一个项目中调用了其它进程(此程序不是我开发的,为第三方开发)这是我的错误部分的代码
    [DllImport("user32.dll")]
    public static extern int GetWindowText(IntPtr hWnd,out string lpString, int nMaxCount);

    [DllImport("user32.dll")]
    public static extern int GetClassName(IntPtr hWnd,out string lpString, int nMaxCount);
    void StartXX()
    {
                ...
                EnumChildWindows(pro.MainWindowHandle, new EnumChildProc(EnumCP), 0);
                ...
    }
    bool EnumCP(int hwnd, IntPtr lParam)
            {
                string text = "";
                string className = "";
                int i = GetWindowText(new IntPtr(hwnd), out text, 100);
                int n = GetClassName(new IntPtr(hwnd), out className, 255);
                return true;
            }
    当执行到int n = GetClassName(new IntPtr(hwnd), out className, 255);这句的时候报异常了“未处理品AccessViolationException;尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
    应该如何解决?
    已经解决了,但是如何取消这个问题或者标记为已解决呢?

    • 已编辑 一线天 2010年1月28日 14:44 问题已解决
    2010年1月28日 14:25

答案

  • 你好!
         你这样声明这个函数试试!
         [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName,int nMaxCount);
    周雪峰
    2010年1月28日 14:45
    版主