Я пытаюсь использовать импорт DLL в моем новом классе, но получая ошибку Атрибут 'DllImport' недопустим в этом типе объявления

1

Атрибут ошибки "DllImport" недействителен для этого типа объявления. Он действителен только для объявлений "метод". Пытался добавить импорт dll перед классом в методе, но с той же ошибкой.

using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace MinimizeCapture
{

    class WatchForWindow
    {
        [DllImport("user32.dll")]
        private const int SW_SHOWNORMAL = 1;
        private const int SW_SHOWMINIMIZED = 2;
        private const int SW_SHOWMAXIMIZED = 3;

        private static ManagementEventWatcher watcher = null;

        public static void StartWatching()
        {
            WqlEventQuery query = new WqlEventQuery("Select * From __InstanceCreationEvent Within 2 Where TargetInstance Isa 'Win32_Process'");
            watcher = new ManagementEventWatcher(query);
            watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
            watcher.Start();
        }

        public static void StopWatching()
        {
            if (watcher != null)
            {
                watcher.Stop();
            }
        }

        private static void watcher_EventArrived(object sender, EventArrivedEventArgs e)
        {
            ManagementBaseObject obj = (ManagementBaseObject)e.NewEvent["TargetInstance"];
            string t = obj["Name"].ToString();
            GetHWND(t);
        }

        private static void GetHWND(string wName)
        {
            IntPtr hWnd = FindWindow("Notepad", "Untitled - Notepad");

        }
    }
}

Ошибка в этой строке:

[DllImport("user32.dll")]

Я пытаюсь использовать его, поскольку FindWindow не существует.

  • 1
    Просто удалите DllImport - он не используется с константами.
Теги:

1 ответ

5
Лучший ответ

Вы должны применить [DllImport] в объявлении метода без тела, несущего static extern модификаторы.

Вы можете искать переведенные объявления функций на PInvoke.net, включая соответствующие структуры, когда это необходимо. Функция FindWindow, которая вам нужна, выглядит следующим образом:

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню