gpt4 book ai didi

C++ 使用 SetCursorPos 在窗口中移动鼠标

转载 作者:IT老高 更新时间:2023-10-28 22:59:10 25 4
gpt4 key购买 nike

我创建了一个类似于 wiimote 的设备,我想将它用作 windows (8.1) 中的鼠标。该设备通过 tcp 连接到我的 windows 计算机上的 c++ win32 程序,并发送鼠标光标应该移动的位置。我正在使用 SetCursorPos 函数来设置位置,这对于控制大多数程序非常有用。但是当我尝试控制例如任务管理器时,光标不再移动。当我从任务管理器切换回其他程序时,它又可以工作了。我也尝试使用 SendInput 函数,结果相同。

这就是我的代码使用 SendInput 的样子:

INPUT Input = { 0 };
Input.type = INPUT_MOUSE;

Input.mi.dx = (LONG)posX;
Input.mi.dy = (LONG)posY;

// set move cursor directly
Input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;

SendInput(1, &Input, sizeof(INPUT));

使用 SetCursorPos 只需一行:

SetCursorPos(posX, posY);

谁能告诉我为什么它不适用于某些程序?我知道它必须可以做到这一点,因为我尝试了一个控制光标的智能手机应用程序,它适用于所有程序。

最佳答案

您不能设置需要比您的程序更高权限的窗口的光标位置或输入..

如果您希望您的程序能够将光标移动到任务管理器上,您需要与任务管理器相同的权限:管理员权限。

这是在 Windows 8+ 上完成的。

我尝试了以下方法:

int main()
{
HWND window = FindWindow("TaskManagerWindow", "Task Manager");
if (window)
{
RECT rect = {0};
GetWindowRect(window, &rect);

SetForegroundWindow(window);
SetActiveWindow(window);
SetFocus(window);
Sleep(300);
SetCursorPos(rect.right - 200, rect.bottom - 200);
}

return 0;
}

光标仅在以管理员身份运行时移过任务管理器。 Windows 8+ 中的所有上下文菜单和窗口都是一样的。不仅仅是任务管理器。

关于C++ 使用 SetCursorPos 在窗口中移动鼠标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22259936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com