Problems with user32.dll - C#

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

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

Помогите, пожалуйста. Мне нужно программно переключиться на открытое приложение и нажать на нем в нужную область левой кнопкой мыши. Делал так:
        [DllImportAttribute("User32.dll")]
        private static extern int FindWindow(String ClassName, String WindowName);
 
        [DllImportAttribute("User32.dll")]
        private static extern IntPtr SetForegroundWindow(int hWnd);
 
        [DllImport("user32.dll")]
        public static extern void SetCursorPos(int x, int y);
 
        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(MouseEvent dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
 
        public enum MouseEvent
        {
            MOUSEEVENTF_LEFTDOWN = 0x02,
            MOUSEEVENTF_LEFTUP = 0x04,
            MOUSEEVENTF_RIGHTDOWN = 0x08,
            MOUSEEVENTF_RIGHTUP = 0x10,
        }
 
        private void Check(string apps)
        {
            //поиск окна по заголовку
            int hWnd = FindWindow(null, apps);
            if (hWnd > 0) //нашли
            {
                SetForegroundWindow(hWnd); //активировали
            }
            else//не нашли
            {
                MessageBox.Show("Прога не запущена");
            }      
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Process[] p = Process.GetProcessesByName("notepad");
    
            foreach (Process s in p)
            {
                Check(s.MainWindowTitle);
            }
 
            SetCursorPos(500, 500);
                mouse_event(MouseEvent.MOUSEEVENTF_LEFTDOWN,
                    System.Windows.Forms.Cursor.Position.X,
                    System.Windows.Forms.Cursor.Position.Y,
                    0,
                    0);
                mouse_event(MouseEvent.MOUSEEVENTF_LEFTUP,
                     System.Windows.Forms.Cursor.Position.X,
                     System.Windows.Forms.Cursor.Position.Y,
                     0,
                     0);
        }
Но мне выскакивает сообщение об ошибке:
Вызов функции PInvoke "FormApps1!FormApps1.Form1::mouse_event" разбалансировал стек. Вероятно, это вызвано тем, что управляемая сигнатура PInvoke не совпадает с неуправляемой целевой сигнатурой. Убедитесь, что соглашение о вызовах и параметры сигнатуры PInvoke совпадают с неуправляемой целевой сигнатурой.
Что я делаю не так?

Решение задачи: «Problems with user32.dll»

textual
Листинг программы
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(MouseEvent dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

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


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

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

5   голосов , оценка 4 из 5