gpt4 book ai didi

c - 在 OpenGL 中忽略 macOS 上的模拟鼠标事件

转载 作者:行者123 更新时间:2023-11-30 16:45:37 25 4
gpt4 key购买 nike

我有一个更大的项目,我想要一个功能,如果运行,在当前光标位置单击的速度尽可能快 10 倍。

这种方法适用于我的桌面,例如我尝试在终端中运行该程序并将光标放在菜单栏上。但是,如果我切换到另一个应用程序(我在窗口模式下尝试过游戏)(我首先让我的程序休眠 4 秒,这样我就有足够的时间进行切换),它只会点击一次。该游戏是一款射击游戏,因此它应该快速发射几次,但它只发射一次并忽略所有其他事件。

如果我让程序在周期之间休眠 1 秒,它就会起作用。

也许我用错了CGEvents?使用 MouseEvents 和实际单击之间有区别吗?我的意思是游戏不应该完全相同吗?

这是我的独立代码:

// Compile with: gcc -o click test.c -Wall -framework ApplicationServices

#include <ApplicationServices/ApplicationServices.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
// To click on current position (seems to work)
CGEventRef event = CGEventCreate(NULL);
CGPoint cursor = CGEventGetLocation(event);


CGEventRef click_down = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, cursor, kCGMouseButtonLeft);

CGEventRef click_up = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseUp, cursor, kCGMouseButtonLeft);

// Tried adding usleep between both events but anything under 1s doesnt work
for(int i = 0; i < 10; i++){
CGEventPost(kCGSessionEventTap, click_down);
// usleep(500);
CGEventPost(kCGSessionEventTap, click_up);
// usleep(500);
}

// Release the events
CFRelease(event);
CFRelease(click_down);
CFRelease(click_up);

}

我阅读并尝试过但没有帮助的内容:

Simulate mouse on Mac

Simulating mouse clicks on Mac OS X does not work for some applications-> 不幸的是没有帮助或解决问题

Synthetic click doesn't switch application's menu bar (Mac OS X)

最佳答案

我自己找到了解决方案,它非常简单:

首先我忘记了 usleep 的单位是微秒而不是毫秒。

此外,显然 macOS 会缓冲 native 环境中的点击或键盘输入,但 OpenGL 不会。因此,如果您在单击/按下键盘之间暂停 1 秒,它当然可以工作,但在 OpenGL 中,如果它们太快,它只会丢弃它们。解决方案是在单击或按键之间等待一小段时间。对我来说,工作了 100 毫秒,这意味着按下之前和之后的 usleep(100000)。

关于c - 在 OpenGL 中忽略 macOS 上的模拟鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44059203/

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