我正在一个类似RDP的项目中工作,我在一个远程机器上共享一个应用程序。
我设法在客户端正确获取坐标。 假设我有一个Windows 10x10窗口,当我将鼠标移到最左上角时, 0,0和右下角给我9x9,这就是我想要的。
我通过电线发送此数据,并尝试将此坐标映射到实际应用中。
RECT WindowRect = { 0, 0, 0, 0 };
RECT WindowClientRect = { 0, 0, 0, 0 };
POINT Origin;
//POINT Ofs;
GetWindowRect(appCaptureHwnd, &WindowRect);
//GetClientRect(appCaptureHwnd, &WindowClientRect);
Origin.y = WindowRect.top;
Origin.x = WindowRect.left;
//ClientToScreen(appCaptureHwnd, &Origin);
//Ofs.x = Origin.x - WindowRect.left;
//Ofs.y = Origin.y - WindowRect.top;
int maxWidth = GetSystemMetrics(SM_CXSCREEN);
int maxHeight = GetSystemMetrics(SM_CYSCREEN);
// per app sharing code maps the browser map coordinates to the coordintes of the actual sender shared app
mouse_event.mi.dx = (LONG)((float)(((Origin.x + x) * (65535.0f) / maxWidth)));
mouse_event.mi.dy = (LONG)((float)(((Origin.y + y) * (65535.0f) / maxHeight)));
当我运行此代码时,当我在0x0上时,我可以正确获取x,y坐标,但是当我移到右下角时,我看到y坐标越来越线性地偏离,它约30像素垂直关闭,但x坐标正确。
所以我猜测菜单是导致此问题的原因,但不是应用程序的边框,因为x坐标是正确的。
这在所有应用程序上都会发生,我正在测试将终端作为共享应用程序。
我猜它的样式是WS_OVERLAPPED。
我将线程和进程设置为DPI_AWARENESS_CONTEXT_SYSTEM_AWARE
任何想法可能是什么原因造成的。