SendMessage C# i symulacja myszy

0

Witam!
Otóż mam problem z za symulowaniem kliknięcia myszki w pewnej grze. Używałem Spy++ i odwzorowywałem wszystkie zdarzenia na oknie dokładnie co do bita i nic to nie dało - kliknięcie dalej nie jest realizowane.

Zaczełem od prostego:


hWnd = (IntPtr)FindWindow(null, "Might & Magic : Duel of Champions"); //Might & Magic : Duel of Champions
SetWindowPos(hWnd, (IntPtr)0, 0, 0, 1382, 807, SWP_NOACTIVATE);

PostMessage(new HandleRef(null, hWnd), (uint)WM.LBUTTONDOWN, (IntPtr)0x00000001, MakeLParam(698, 51)); Thread.Sleep(150);
PostMessage(new HandleRef(null, hWnd), (uint)WM.LBUTTONUP, (IntPtr)0x00000000, MakeLParam(698, 51));

a skończyłem na czymś takim, co dalej nie działa:

hWnd = (IntPtr)FindWindow(null, "Might & Magic : Duel of Champions"); //Might & Magic : Duel of Champions
SetWindowPos(hWnd, (IntPtr)0, 0, 0, 1382, 807, SWP_NOACTIVATE);

SendMessage(hWnd, (uint)WM.NCHITTEST, (IntPtr)0x0, (IntPtr)0x005202C2);
SendMessage(hWnd, (uint)WM.NCHITTEST, (IntPtr)0x0, (IntPtr)0x005202C2);

SendMessage(hWnd, (uint)WM.SETCURSOR, hWnd, (IntPtr)0x02000001);
PostMessage(new HandleRef(null, hWnd), (uint)WM.MOUSEMOVE, (IntPtr)0x00000000, (IntPtr)0x003302BA); Thread.Sleep(350);

SendMessage(hWnd, (uint)WM.NCACTIVATE, (IntPtr)0x00000001, (IntPtr)0x00000000);

SendMessage(hWnd, (uint)WM.MOUSEACTIVATE, hWnd, (IntPtr)0x02010001);

WINDOWPOS wp = new WINDOWPOS(hWnd, (IntPtr)0x0015044A, 0, 0, 0, 0, (int)(SWP_NOSIZE | SWP_NOMOVE));
unsafe { SendMessage(hWnd, (uint)WM.WINDOWPOSCHANGING, (IntPtr)0, (IntPtr)(&wp)); }
wp = new WINDOWPOS(hWnd, (IntPtr)0x0015044A, 0, 0, 1382, 807, (int)(SWP_NOSIZE | SWP_NOMOVE | 1800));
unsafe { SendMessage(hWnd, (uint)WM.WINDOWPOSCHANGED, (IntPtr)0, (IntPtr)(&wp)); }

SendMessage(hWnd, (uint)WM.NCHITTEST, (IntPtr)0x0, (IntPtr)0x005202C2);
SendMessage(hWnd, (uint)WM.NCHITTEST, (IntPtr)0x0, (IntPtr)0x005202C2);

SendMessage(hWnd, (uint)WM.ACTIVATEAPP, (IntPtr)0x00000001, (IntPtr)0x00000000);

SendMessage(hWnd, (uint)WM.ACTIVATE, (IntPtr)0x00000002, (IntPtr)0x00000000);

SendMessage(hWnd, (uint)WM.IME_SETCONTEXT, (IntPtr)0x00000001, (IntPtr)0xC000000F);
SendMessage(hWnd, (uint)WM.IME_NOTIFY, (IntPtr)0x00000002, (IntPtr)0x00000000);

SendMessage(hWnd, (uint)WM.SETFOCUS, (IntPtr)0x00000000, (IntPtr)0x00000000);

SendMessage(hWnd, (uint)WM.SETCURSOR, hWnd, (IntPtr)0x02010001);
PostMessage(new HandleRef(null, hWnd), (uint)WM.LBUTTONDOWN, (IntPtr)0x00000001, MakeLParam(698, 51)); Thread.Sleep(350);
SendMessage(hWnd, (uint)WM.NCHITTEST, (IntPtr)0x0, (IntPtr)0x005202C2);

SendMessage(hWnd, (uint)WM.SETCURSOR, hWnd, (IntPtr)0x02000001);
PostMessage(new HandleRef(null, hWnd), (uint)WM.MOUSEMOVE, (IntPtr)0x00000001, (IntPtr)0x003302BA); Thread.Sleep(350);
SendMessage(hWnd, (uint)WM.NCHITTEST, (IntPtr)0x0, (IntPtr)0x005202C2);
SendMessage(hWnd, (uint)WM.NCHITTEST, (IntPtr)0x0, (IntPtr)0x005202C2);

SendMessage(hWnd, (uint)WM.SETCURSOR, hWnd, (IntPtr)0x02020001);
 PostMessage(new HandleRef(null, hWnd), (uint)WM.LBUTTONUP, (IntPtr)0x00000000, MakeLParam(698, 51)); Thread.Sleep(350);

 SendMessage(hWnd, (uint)WM.NCHITTEST, (IntPtr)0x0, (IntPtr)0x005202C2);
SendMessage(hWnd, (uint)WM.SETCURSOR, hWnd, (IntPtr)0x02000001);
            ///

SendMessage(hWnd, (uint)WM.GETICON, (IntPtr)0x00000001, (IntPtr)0x00000000);
SendMessage(hWnd, (uint)WM.GETICON, (IntPtr)0x00000000, (IntPtr)0x00000000);

PostMessage(new HandleRef(null, hWnd), (uint)WM.SYSKEYDOWN, (IntPtr)0x00000012, (IntPtr)0x20380001); Thread.Sleep(350);
SendMessage(hWnd, (uint)WM.GETICON, (IntPtr)0x00000002, (IntPtr)0x00000000);

SendMessage(hWnd, (uint)WM.NCACTIVATE, (IntPtr)0x00000000, (IntPtr)0x00000000);
SendMessage(hWnd, (uint)WM.ACTIVATE, (IntPtr)0x00000000, (IntPtr)0x00000000);
SendMessage(hWnd, (uint)WM.ACTIVATEAPP, (IntPtr)0x00000000, (IntPtr)0x00001DAC);
SendMessage(hWnd, (uint)WM.KILLFOCUS, (IntPtr)0x00000000, (IntPtr)0x00000000);
SendMessage(hWnd, (uint)WM.IME_NOTIFY, (IntPtr)0x00000001, (IntPtr)0x00000000);
SendMessage(hWnd, (uint)WM.NCHITTEST, (IntPtr)0x0, (IntPtr)0x003E02BB);

xD

Jakieś pomysły? Gra czyta bezpośrednio z myszy i klawiatury na niższej warstwie niż odbieranie zdarzeń z systemu Windows?
Jeśli tak czy i takie coś da się zasymulować?

Gra to Might & Magic : Duel of Champions jakby komuś się nudziło jak mi :)

P.S
Nie, nie pisze bota do tej gry bo nie mam jeszcze takich umiejętności aby napisać własną sieć neuronową/AI i żeby bot grał za mnie w karty. A nic innego tam nie można "zbocić".

Enum:
http://www.pinvoke.net/default.aspx/Enums/WindowsMessages.html

0

Nie tego potrzebuje, potrzebuje wysyłać symulacje kliknięcia do nieaktywnego okna gry. SendInput tego nie robi niestety.

http://pdc-doc-launcher.ubi.com/launcher/Installer/setup.exe - link do gry jakby komuś się nudziło jak mi :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0