WinApi функция GetClassName в С#. "Attempted to read or write protected memory" - C#

Узнай цену своей работы

Формулировка задачи:

Вот код, который я пытаюсь заставить работать. Здесь я пытаюсь по дескриптору окна узнать название его класса(в данном случае "notepad") :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
 
namespace GetClassNameCSharp
{
    class Program
    {
        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
 
        [DllImport("user32.dll")]
        static extern int GetClassName(IntPtr hWnd, ref StringBuilder lpClassName, int nMaxCount);
 
        static void Main(string[] args)
        {
            IntPtr hwnd = FindWindow("notepad", null);
            StringBuilder lpClassName = new StringBuilder();
            GetClassName(hwnd, ref lpClassName, 100);
            Console.WriteLine(lpClassName.ToString());
        }
    }
}
Однако, во время выполнения строки
GetClassName(hwnd, ref lpClassName, 100);
Программа выдаёт следующее: "Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt." Ни малейшего понятия, что с этим делать. Гугление не помогло. Помогите пожалуйста. P.S: Перед запуском кода необходимо открыть notepad.exe

Решение задачи: «WinApi функция GetClassName в С#. "Attempted to read or write protected memory"»

textual
Листинг программы
StringBuilder lpClassName = new StringBuilder(100);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5
Похожие ответы