我有3D游戏,我需要在另一个应用程序中按下此游戏中的按钮。 Spy ++说游戏的窗口是UnityWndClass。当我在游戏中按下按钮时,窗口仅回收WM_SETCURSOR
,WM_LBUTTONDOWN
等鼠标消息,但是当我尝试从另一个按钮发送带有按钮坐标的WM_LBUTTONDOWN
和WM_LBUTTONUP
时窗户什么都没发生。为什么?任何想法如何按按钮?
答案 0 :(得分:0)
if (floor(teller_groot / array[i]) == teller_groot / array[i])
{
boel = 1;
break;
}
用于更改自己窗口的光标图像。 WM_SETCURSOR
和WM_LBUTTONDOWN
是鼠标单击后发送的通知消息。主窗口过程可能无法处理WM_LBUTTONUP
消息。
要伪造鼠标输入,您可以使用WM_LBUTTONXXX
或mouse_event
。例如,这会将光标移动到SendInput
并单击鼠标左键。
x=10 / y=10
或者使用int x = 10 * 65536 / GetSystemMetrics(SM_CXSCREEN);
int y = 10 * 65536 / GetSystemMetrics(SM_CYSCREEN);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
进行多次调用(请参阅评论)
SendInput
窗口应至少可见,并且最好是活动的。您可以使用INPUT input[3];
for (int i = 0; i < 3; i++)
{
memset(&input[i], 0, sizeof(INPUT));
input[i].type = INPUT_MOUSE;
}
input[0].mi.dx = x;
input[0].mi.dy = y;
input[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
input[1].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
input[2].mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(3, input, sizeof(INPUT));
。请参阅此example以确保窗口可见并处于活动状态。
其他替代方案:
使用Spy ++获取有关您要按的按钮的信息。
例如,如果这是Windows计算器,您可以监视计算器的按钮,它显示计算器按钮 2 将ID设置为0x84。您可以发送SetForegroundWindow
WM_COMMAND
设置为0x84以模拟按下按钮。
WPARAM