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);