按下发送"按钮"消息给UnityWndClass

时间:2015-07-22 07:01:17

标签: c++ winapi

我有3D游戏,我需要在另一个应用程序中按下此游戏中的按钮。 Spy ++说游戏的窗口是UnityWndClass。当我在游戏中按下按钮时,窗口仅回收WM_SETCURSORWM_LBUTTONDOWN等鼠标消息,但是当我尝试从另一个按钮发送带有按钮坐标的WM_LBUTTONDOWNWM_LBUTTONUP时窗户什么都没发生。为什么?任何想法如何按按钮?

1 个答案:

答案 0 :(得分:0)

if (floor(teller_groot / array[i]) == teller_groot / array[i]) { boel = 1; break; } 用于更改自己窗口的光标图像。 WM_SETCURSORWM_LBUTTONDOWN是鼠标单击后发送的通知消息。主窗口过程可能无法处理WM_LBUTTONUP消息。

要伪造鼠标输入,您可以使用WM_LBUTTONXXXmouse_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