D2R-BMBot/Scripts/KeyMouse.cs

394 lines
15 KiB
C#
Raw Normal View History

2023-04-20 21:39:08 -07:00
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace app
{
public class KeyMouse
{
Form1 Form1_0;
2024-04-14 18:51:35 -07:00
public int ProcessingDelay = 1;
2023-04-20 21:39:08 -07:00
private const int WH_KEYBOARD_LL = 13;
public LowLevelKeyboardProc proc;
public IntPtr hookID = IntPtr.Zero;
public const int WM_LBUTTONDOWN = 0x201;
public const int WM_LBUTTONUP = 0x202;
public const int WM_RBUTTONDOWN = 0x204;
public const int WM_RBUTTONUP = 0x205;
public const int WM_SYSKEYDOWN = 260;
public const int WM_SYSKEYUP = 261;
public const int WM_CHAR = 258;
public const int WM_KEYDOWN = 256;
public const int WM_KEYUP = 257;
//###############################################
//###############################################
[DllImport("User32.dll")]
2024-04-14 18:51:35 -07:00
static extern Int32 SendMessage(int hWnd, int Msg, int wParam, IntPtr lParam);
2023-04-20 21:39:08 -07:00
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool PostMessage(int hWnd, int Msg, int wParam, IntPtr lParam);
//[DllImport("user32.dll", SetLastError = true)]
//private static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
[DllImport("user32.dll", EntryPoint = "SetCursorPos")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetCursorPos(int x, int y);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook,
LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);
//###############################################
//###############################################
public void SetForm1(Form1 form1_1)
{
Form1_0 = form1_1;
}
private static IntPtr CreateLParam(int LoWord, int HiWord)
{
return (IntPtr)((HiWord << 16) | (LoWord & 0xffff));
}
2024-04-21 04:41:27 -07:00
public void MouseClicc_RealPos(int ThX, int ThY)
{
//Thread.Sleep(ProcessingDelay);
MouseMoveTo_RealPos(ThX, ThY);
SendMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, CreateLParam(150, 150));
Thread.Sleep(1);
SendMessage((int)Form1_0.hWnd, WM_LBUTTONDOWN, 0x00000001, CreateLParam(150, 150));
Thread.Sleep(ProcessingDelay);
SendMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, CreateLParam(150, 150));
}
public void MouseCliccRight_RealPos(int ThX, int ThY)
{
MouseMoveTo(ThX, ThY);
SendMessage((int)Form1_0.hWnd, WM_RBUTTONUP, 0x00000000, CreateLParam(150, 150));
Thread.Sleep(1);
SendMessage((int)Form1_0.hWnd, WM_RBUTTONDOWN, 0x00000001, CreateLParam(150, 150));
Thread.Sleep(ProcessingDelay);
SendMessage((int)Form1_0.hWnd, WM_RBUTTONUP, 0x00000000, CreateLParam(150, 150));
}
2023-04-20 21:39:08 -07:00
public void MouseClicc(int ThX, int ThY)
{
2024-04-14 18:51:35 -07:00
//Thread.Sleep(ProcessingDelay);
2023-04-20 21:39:08 -07:00
MouseMoveTo(ThX, ThY);
SendMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, CreateLParam(150, 150));
2024-04-14 18:51:35 -07:00
Thread.Sleep(1);
2023-04-20 21:39:08 -07:00
SendMessage((int)Form1_0.hWnd, WM_LBUTTONDOWN, 0x00000001, CreateLParam(150, 150));
2024-04-14 18:51:35 -07:00
Thread.Sleep(ProcessingDelay);
2023-04-20 21:39:08 -07:00
SendMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, CreateLParam(150, 150));
}
public void MouseCliccRight(int ThX, int ThY)
{
MouseMoveTo(ThX, ThY);
SendMessage((int)Form1_0.hWnd, WM_RBUTTONUP, 0x00000000, CreateLParam(150, 150));
2024-04-14 18:51:35 -07:00
Thread.Sleep(1);
2023-04-20 21:39:08 -07:00
SendMessage((int)Form1_0.hWnd, WM_RBUTTONDOWN, 0x00000001, CreateLParam(150, 150));
2024-04-14 18:51:35 -07:00
Thread.Sleep(ProcessingDelay);
2023-04-20 21:39:08 -07:00
SendMessage((int)Form1_0.hWnd, WM_RBUTTONUP, 0x00000000, CreateLParam(150, 150));
}
2024-04-21 04:41:27 -07:00
/*public void MouseCliccAttackMove(int ThX, int ThY)
2024-04-14 18:51:35 -07:00
{
MouseMoveTo(ThX, ThY);
//PostMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, CreateLParam(150, 150));
PostMessage((int)Form1_0.hWnd, WM_LBUTTONDOWN, 0x00000001, CreateLParam(150, 150));
PostMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, CreateLParam(150, 150));
2024-04-21 04:41:27 -07:00
}*/
2024-04-14 18:51:35 -07:00
public void MouseCliccRightAttackMove(int ThX, int ThY)
{
2024-04-21 04:41:27 -07:00
MouseMoveTo_RealPos(ThX, ThY);
2024-04-14 18:51:35 -07:00
//PostMessage((int)Form1_0.hWnd, WM_RBUTTONUP, 0x00000000, CreateLParam(150, 150));
PostMessage((int)Form1_0.hWnd, WM_RBUTTONDOWN, 0x00000001, CreateLParam(150, 150));
2024-04-20 19:37:30 -07:00
//PostMessage((int)Form1_0.hWnd, WM_RBUTTONUP, 0x00000000, CreateLParam(150, 150));
2024-04-14 18:51:35 -07:00
}
2023-04-20 21:39:08 -07:00
public void PressKey(System.Windows.Forms.Keys ThisK)
{
2024-04-14 18:51:35 -07:00
PostMessage((int)Form1_0.hWnd, WM_SYSKEYDOWN, (ushort)ThisK, (IntPtr)0);
PostMessage((int)Form1_0.hWnd, WM_SYSKEYUP, (ushort)ThisK, (IntPtr)0);
2023-04-20 21:39:08 -07:00
}
2023-04-27 20:42:59 -07:00
public void PressKey2(System.Windows.Forms.Keys ThisK)
{
PostMessage((int)Form1_0.hWnd, WM_SYSKEYDOWN, (ushort)ThisK, (IntPtr)0);
2024-04-14 18:51:35 -07:00
Thread.Sleep(1);
//PostMessage((int)Form1_0.hWnd, WM_SYSKEYUP, (ushort)ThisK, (IntPtr)0);
2023-04-27 20:42:59 -07:00
}
2024-04-24 19:51:45 -07:00
public void PressKey3(System.Windows.Forms.Keys ThisK)
{
SendMessage((int)Form1_0.hWnd, WM_SYSKEYDOWN, (ushort)ThisK, (IntPtr)0);
SendMessage((int)Form1_0.hWnd, WM_SYSKEYUP, (ushort)ThisK, (IntPtr)0);
}
2023-04-20 21:39:08 -07:00
public void PressKeyHold(System.Windows.Forms.Keys ThisK)
{
SendMessage((int)Form1_0.hWnd, WM_SYSKEYDOWN, (ushort)ThisK, (IntPtr)0);
2024-04-14 18:51:35 -07:00
PostMessage((int)Form1_0.hWnd, WM_SYSKEYDOWN, (ushort)ThisK, (IntPtr)0);
2023-04-20 21:39:08 -07:00
}
public void ReleaseKey(System.Windows.Forms.Keys ThisK)
{
2024-04-14 18:51:35 -07:00
PostMessage((int)Form1_0.hWnd, WM_SYSKEYUP, (ushort)ThisK, (IntPtr)0);
2023-04-20 21:39:08 -07:00
SendMessage((int)Form1_0.hWnd, WM_SYSKEYUP, (ushort)ThisK, (IntPtr)0);
}
public void SendCTRL_CLICK(int ThX, int ThY)
{
MouseMoveTo(ThX, ThY);
byte KEYEVENTF_KEYUP = 0x02;
byte VK_CONTROL = 0x11;
2024-04-14 18:51:35 -07:00
//press CTRL
2024-03-29 00:19:36 -07:00
keybd_event(VK_CONTROL, 0, 0, 0);
2024-04-14 18:51:35 -07:00
//PressKeyHold(Keys.LControlKey);
SendMessage((int)Form1_0.hWnd, WM_SYSKEYDOWN, (ushort)Keys.LControlKey, (IntPtr)0);
2023-04-20 21:39:08 -07:00
PostMessage((int)Form1_0.hWnd, WM_LBUTTONDOWN, 0x00000001, (IntPtr)0);
PostMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, (IntPtr)0);
2024-04-14 18:51:35 -07:00
//release CTRL
2023-04-20 21:39:08 -07:00
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
2024-04-14 18:51:35 -07:00
//ReleaseKey(Keys.LControlKey);
SendMessage((int)Form1_0.hWnd, WM_SYSKEYUP, (ushort)Keys.LControlKey, (IntPtr)0);
2023-04-20 21:39:08 -07:00
}
public void SendSHIFT_RIGHTCLICK(int ThX, int ThY)
{
MouseMoveTo(ThX, ThY);
2024-04-05 21:50:39 -07:00
PressKeyHold(Keys.LShiftKey);
2024-04-25 04:33:59 -07:00
SendMessage((int)Form1_0.hWnd, WM_RBUTTONDOWN, 0x00000001, (IntPtr)0);
SendMessage((int)Form1_0.hWnd, WM_RBUTTONUP, 0x00000000, (IntPtr)0);
2024-04-05 21:50:39 -07:00
ReleaseKey(Keys.LShiftKey);
2023-04-20 21:39:08 -07:00
}
2024-04-05 21:50:39 -07:00
public void SendSHIFT_CLICK(int ThX, int ThY)
2023-04-20 21:39:08 -07:00
{
2024-04-05 21:50:39 -07:00
MouseMoveTo(ThX, ThY);
2024-04-20 19:37:30 -07:00
//ReleaseKey(Keys.LShiftKey);
PressKeyHold(Keys.LShiftKey);
//PostMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, (IntPtr)0);
PostMessage((int)Form1_0.hWnd, WM_LBUTTONDOWN, 0x00000001, (IntPtr)0);
PostMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, (IntPtr)0);
ReleaseKey(Keys.LShiftKey);
}
public void SendSHIFT_CLICK_ATTACK(int ThX, int ThY)
{
2024-04-21 04:41:27 -07:00
MouseMoveTo_RealPos(ThX, ThY);
2024-04-20 19:37:30 -07:00
//ReleaseKey(Keys.LShiftKey);
PressKeyHold(Keys.LShiftKey);
//PostMessage((int)Form1_0.hWnd, WM_LBUTTONDOWN, 0x00000001, (IntPtr)0);
//PostMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, (IntPtr)0);
SendMessage((int)Form1_0.hWnd, WM_LBUTTONDOWN, 0x00000001, (IntPtr)0);
//SendMessage((int)Form1_0.hWnd, WM_LBUTTONDOWN, 0x00000001, CreateLParam(150, 150));
//PostMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, (IntPtr)0);
//SendMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, CreateLParam(150, 150));
ReleaseKey(Keys.LShiftKey);
}
public void SendSHIFT_CLICK_ATTACK_CAST_NO_MOVE(int ThX, int ThY)
{
2024-04-21 04:41:27 -07:00
MouseMoveTo_RealPos(ThX, ThY);
2024-04-20 19:37:30 -07:00
//ReleaseKey(Keys.LShiftKey);
2024-04-05 21:50:39 -07:00
PressKeyHold(Keys.LShiftKey);
PostMessage((int)Form1_0.hWnd, WM_LBUTTONDOWN, 0x00000001, (IntPtr)0);
2024-04-20 19:37:30 -07:00
//PostMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, (IntPtr)0);
//SendMessage((int)Form1_0.hWnd, WM_LBUTTONDOWN, 0x00000001, (IntPtr)0);
//SendMessage((int)Form1_0.hWnd, WM_LBUTTONDOWN, 0x00000001, CreateLParam(150, 150));
PostMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, (IntPtr)0);
//SendMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, CreateLParam(150, 150));
2024-04-05 21:50:39 -07:00
ReleaseKey(Keys.LShiftKey);
2023-04-20 21:39:08 -07:00
}
2024-04-05 21:50:39 -07:00
public void PressPotionKey(System.Windows.Forms.Keys ThisK)
2023-04-20 21:39:08 -07:00
{
2024-04-14 18:51:35 -07:00
PostMessage((int)Form1_0.hWnd, WM_SYSKEYDOWN, (ushort)ThisK, (IntPtr)0);
PostMessage((int)Form1_0.hWnd, WM_SYSKEYUP, (ushort)ThisK, (IntPtr)0);
2024-04-05 21:50:39 -07:00
}
public void PressPotionKeyMerc(System.Windows.Forms.Keys ThisK)
{
PressKeyHold(Keys.LShiftKey);
2024-04-14 18:51:35 -07:00
PostMessage((int)Form1_0.hWnd, WM_SYSKEYDOWN, (ushort)ThisK, (IntPtr)0);
PostMessage((int)Form1_0.hWnd, WM_SYSKEYUP, (ushort)ThisK, (IntPtr)0);
2024-04-05 21:50:39 -07:00
ReleaseKey(Keys.LShiftKey);
2023-04-20 21:39:08 -07:00
}
public void MouseMoveTo(int ThX, int ThY)
{
2023-04-27 20:42:59 -07:00
ThX = CorrectXPos(ThX); //here
ThY = CorrectYPos(ThY); //here
2023-04-20 21:39:08 -07:00
Point position = new Point(ThX, ThY);
SetCursorPos(position.X, position.Y);
}
2024-04-21 04:41:27 -07:00
public void MouseMoveTo_RealPos(int ThX, int ThY)
{
Point position = new Point(ThX, ThY);
SetCursorPos(position.X, position.Y);
}
2023-04-20 21:39:08 -07:00
public void MouseClicHoldWithoutRelease()
{
2024-04-14 18:51:35 -07:00
PostMessage((int)Form1_0.hWnd, WM_LBUTTONDOWN, 0x00000001, CreateLParam(150, 150));
2023-04-20 21:39:08 -07:00
}
public void MouseClicHold()
{
2024-04-14 18:51:35 -07:00
PostMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, CreateLParam(150, 150));
PostMessage((int)Form1_0.hWnd, WM_LBUTTONDOWN, 0x00000001, CreateLParam(150, 150));
2023-04-20 21:39:08 -07:00
}
public void MouseClicRelease()
{
2024-04-14 18:51:35 -07:00
PostMessage((int)Form1_0.hWnd, WM_LBUTTONUP, 0x00000000, CreateLParam(150, 150));
2023-04-20 21:39:08 -07:00
}
2023-04-27 20:42:59 -07:00
public int CorrectXPos(int ThisPoss)
{
double Percent = ((double) ThisPoss * 100.0) / (double) Form1_0.ScreenX;
int PosInGame = (int) ((Percent * (double) Form1_0.D2Widht) / 100.0);
return Form1_0.ScreenXOffset + PosInGame;
}
public int CorrectYPos(int ThisPoss)
{
double Percent = ((double) ThisPoss * 100.0) / (double) Form1_0.ScreenY;
int PosInGame = (int) ((Percent * (double) Form1_0.D2Height) / 100.0);
return Form1_0.ScreenYOffset + PosInGame;
}
2023-04-20 21:39:08 -07:00
//######################################
//keyborad hook for start/stop buttons
public IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc,
GetModuleHandle(curModule.ModuleName), 0);
}
}
2024-04-22 17:48:19 -07:00
public delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
2023-04-20 21:39:08 -07:00
2024-04-22 17:48:19 -07:00
public IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
2023-04-20 21:39:08 -07:00
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
2024-04-22 17:48:19 -07:00
if (vkCode == (int) CharConfig.StartStopKey) //numpad5
2023-04-20 21:39:08 -07:00
{
Form1_0.button1_Click(null, null);
}
}
return CallNextHookEx(hookID, nCode, wParam, lParam);
}
/*public enum INPUT_TYPE : uint
{
INPUT_MOUSE = 0,
INPUT_KEYBOARD = 1,
INPUT_HARDWARE = 2
}
[StructLayout(LayoutKind.Sequential)]
struct MOUSEINPUT
{
public int dx;
public int dy;
public int mouseData;
public int dwFlags;
public int time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
struct KEYBDINPUT
{
public short wVk;
public short wScan;
public KEYEVENTF dwFlags;
public int time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
struct HARDWAREINPUT
{
public int uMsg;
public short wParamL;
public short wParamH;
}
[StructLayout(LayoutKind.Explicit)]
struct INPUT
{
[FieldOffset(0)] public INPUT_TYPE type;
[FieldOffset(4)] public MOUSEINPUT mi;
[FieldOffset(4)] public KEYBDINPUT ki;
[FieldOffset(4)] public HARDWAREINPUT hi;
}
public enum KEYEVENTF : uint
{
EXTENDEDKEY = 0x0001,
KEYUP = 0x0002,
UNICODE = 0x0004,
SCANCODE = 0x0008
}*/
}
}