我从User32.dll
开始使用PostMessage()时,我发现了一个游戏的自动研磨器,它根本不起作用。
此代码:
static void Start_Attack(IntPtr handle, bool which)
{
if (which) PostMessage(handle, WM_LBUTTONDOWN, 0, MAKELPARAM(Coord_X, Coord_Y));
if (!which) PostMessage(handle, WM_RBUTTONDOWN, 0, MAKELPARAM(Coord_X, Coord_Y));
}
static void Stop_Attack(IntPtr handle, bool which)
{
if (which) PostMessage(handle, WM_LBUTTONUP, 0, MAKELPARAM(Coord_X, Coord_Y));
if (!which) PostMessage(handle, WM_RBUTTONUP, 0, MAKELPARAM(Coord_X, Coord_Y));
}
static void Use_Skill(IntPtr handle, char Skill)
{
PostMessage(handle, WM_KEYUP, (int)ConvertCharToVirtualKey(Skill), 0);
}
不起作用。但是这段代码:
static void move_camera(IntPtr handle, int amounty)
{
PostMessage(handle, WM_MOUSEMOVE, 0, MAKELPARAM(amounty, 320));
}
有效。因此,例如,我可以发送WM_MOUSEMOVE
到应用程序,但不能发送WM_LBUTTONDOWN
。我知道有些应用程序的PostMessage()无效,但是在这种情况下,WM_MOUSEMOVE
也不能正常工作,对吧?
有人知道问题出在哪里吗?
EDIT1:
好的,我获得了更多信息。 PostMessage()
似乎可以正常工作,因为在登录屏幕中,我可以输入用户名并自动单击登录按钮。但是在游戏中它不起作用。有什么想法吗?我尝试了一些WM_KEYDOWN
,然后尝试WM_KEYUP
,或者只尝试了WM_KEYUP
-到目前为止没有任何效果。
EDIT2:
我认为该应用程序需要直接使用Keyboardinput。可能吗?没有DLL注入和函数挂钩,有什么办法可以解决这种仿真问题?