现在当我尝试一个包含以下内容的循环:
mouse_event(MOUSEEVENTF_MOVE,dx,dy,0,0);
Run Code Online (Sandbox Code Playgroud)
鼠标往往移动超过(dx,dy).在线研究,我认为这是因为操作系统加速了.如何将鼠标移动绝对量?
MOUSEEVENTF_ABSOLUTE似乎可能正是我正在寻找的,但我看不出如何使用它.
我试过了:
mouse_event(MOUSEEVENTF_ABSOLUTE || MOUSEEVENTF_MOVE,dx,dy,0,0);
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.我更喜欢使用mouse_event而不是SetCursorPos或其他方法,我该怎么办?谢谢.
坐标不是像素坐标,必须进行标准化.
#include <Windows.h>
#include <tchar.h>
int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow ) {
INPUT input = {0};
int screenX = GetSystemMetrics( SM_CXVIRTUALSCREEN );
int screenY = GetSystemMetrics( SM_CYVIRTUALSCREEN );
for( unsigned int i = 0; i < 10; i++ ) {
input.mi.dx = i*10 * ( 65535/screenX );
input.mi.dy = i*10 * ( 65535/screenY );
input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_VIRTUALDESK | MOUSEEVENTF_MOVE;
input.type = INPUT_MOUSE;
SendInput( 1, &input, sizeof INPUT );
Sleep( 1000 );
}
return ERROR_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我在这里使用了SendInput()而不是mouse_event(),因为后者已根据文档被取代.如果您确实想要将其转换回来,那么参数应该大致相同.
| 归档时间: |
|
| 查看次数: |
7815 次 |
| 最近记录: |