This is some mouse and keyboard handler ive made when I was younger to find a color on a game screen and click ||right click+option :P
Maybe some of the code may help you even if it's in french...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Abyte0
{
public partial class ClavierVirtuel
{
[DllImport("user32.dll", EntryPoint = "FindWindow")]
private static extern int FindWindow(string _ClassName, string _WindowName);
[DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
private static extern int SetForegroundWindow(int hwnd);
public static void DonnerFocus(string pNomFenetre)
{
int handle = FindWindow(null, pNomFenetre);
SetForegroundWindow(handle);
}
public static void Ecrire(string pPhrase)
{
SendKeys.SendWait(pPhrase);
}
public static void ecrire_Enter(string pPhrase)
{
foreach (char lettre in pPhrase)
{
SendKeys.SendWait(lettre.ToString());
}
System.Threading.Thread.Sleep(10);
SendKeys.SendWait("{ENTER}");
}
}
}
And
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;
namespace Abyte0
{
static class MouseHandler
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool SetCursorPos(int X, int Y);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;
public static void moveMouse(ref int currentx, ref int currenty, string whattodo, int pNombre)
{
switch (whattodo)
{
case "addX":
for (int i = 0; i < pNombre; i++)
{
currentx++;
SetCursorPos(currentx + Form1.m_Border_x, currenty + Form1.m_Border_y);
}
break;
case "addY":
for (int i = 0; i < pNombre; i++)
{
currenty++;
SetCursorPos(currentx + Form1.m_Border_x, currenty + Form1.m_Border_y);
}
break;
case "remX":
for (int i = 0; i < pNombre; i++)
{
currentx--;
SetCursorPos(currentx + Form1.m_Border_x, currenty + Form1.m_Border_y);
}
break;
case "remY":
for (int i = 0; i < pNombre; i++)
{
currenty--;
SetCursorPos(currentx + Form1.m_Border_x, currenty + Form1.m_Border_y);
}
break;
default:
break;
}
}
#region Mouse Left, Right1, Right2 Clicks
public static void DoMouseLeftClick(int nx, int ny)
{
Random objRandom = new Random();
SetCursorPos(nx + Form1.m_Border_x, ny + Form1.m_Border_y);
mouse_event(MOUSEEVENTF_LEFTDOWN, nx + Form1.m_Border_x, ny + Form1.m_Border_y, 0, 0);
Thread.Sleep(objRandom.Next(1, 332));
mouse_event(MOUSEEVENTF_LEFTUP, nx + Form1.m_Border_x, ny + Form1.m_Border_y, 0, 0);
Handler.getFocus();
}
public static void DoMouseLeftClick(int[] pTab)
{
int nx = pTab[0];
int ny = pTab[1];
Random objRandom = new Random();
SetCursorPos(nx + Form1.m_Border_x, ny + Form1.m_Border_y);
mouse_event(MOUSEEVENTF_LEFTDOWN, nx + Form1.m_Border_x, ny + Form1.m_Border_y, 0, 0);
Thread.Sleep(objRandom.Next(1, 332));
mouse_event(MOUSEEVENTF_LEFTUP, nx + Form1.m_Border_x, ny + Form1.m_Border_y, 0, 0);
Handler.getFocus();
}
public static void DoMouseRightClickOp1(int nx, int ny)
{
Random objRandom = new Random();
SetCursorPos(nx + Form1.m_Border_x, ny + Form1.m_Border_y);
mouse_event(MOUSEEVENTF_RIGHTDOWN, nx + Form1.m_Border_x, ny + Form1.m_Border_y, 0, 0);
Thread.Sleep(objRandom.Next(6, 237));
mouse_event(MOUSEEVENTF_RIGHTUP, nx + Form1.m_Border_x, ny + Form1.m_Border_y, 0, 0);
Handler.getFocus();
Thread.Sleep(objRandom.Next(1, 332));
moveMouse(ref nx, ref ny, "addY", 20);
DoMouseLeftClick(nx, ny);
}
public static void DoMouseRightClickOp2(int nx, int ny)
{
Random objRandom = new Random();
SetCursorPos(nx + Form1.m_Border_x, ny + Form1.m_Border_y);
mouse_event(MOUSEEVENTF_RIGHTDOWN, nx + Form1.m_Border_x, ny + Form1.m_Border_y, 0, 0);
Thread.Sleep(objRandom.Next(6, 237));
mouse_event(MOUSEEVENTF_RIGHTUP, nx + Form1.m_Border_x, ny + Form1.m_Border_y, 0, 0);
Handler.getFocus();
Thread.Sleep(objRandom.Next(1, 332));
moveMouse(ref nx, ref ny, "addY", 25);
DoMouseLeftClick(nx, ny);
}
#endregion
public static void DoSimpleClickNoFocus(int x,int y)
{
Random objRandom = new Random();
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_RIGHTDOWN, x, y, 0, 0);
Thread.Sleep(objRandom.Next(7, 258));
mouse_event(MOUSEEVENTF_LEFTUP, x,y, 0, 0);
}
}
}
SendMessage
. This question about SendMessage crashing on mouse button events will solve your problem if you incorporate the answer to his code. – user7116