CGEventPostToPSN() 不适用于鼠标点击

2024-01-25

我需要将鼠标单击事件发送到任意进程(不一定是前面的进程),而不将该进程的窗口带到前面。

此代码用于发送鼠标单击并让窗口服务器将其发送到它认为具有焦点的任何进程:

#include <ApplicationServices/ApplicationServices.h>

int
main()
{
    CGEventRef down, up;

    down = CGEventCreateMouseEvent(
        NULL,
        kCGEventLeftMouseDown,
        CGPointMake(16, 36),
        kCGMouseButtonLeft
    );
    up = CGEventCreateMouseEvent(
        NULL,
        kCGEventLeftMouseUp,
        CGPointMake(16, 36),
        kCGMouseButtonLeft
    );

    CGEventPost(kCGHIDEventTap, down);
    CGEventPost(kCGHIDEventTap, up);

    CFRelease(down);
    CFRelease(up);

    return 0;
}

我可以通过 CGEventPost() 发送鼠标单击事件,但这需要目标进程具有焦点(我试图避免)。

我可以通过 CGEventPostToPSN() 发送键盘事件,据我所知,鼠标移动事件也可以工作,我遇到的问题是鼠标向下/向上事件。

这段代码(与上面差不多,唯一的区别是我自己指定将事件发送到哪个进程)不起作用,我什至不知道如何找出它崩溃的位置。

#include <ApplicationServices/ApplicationServices.h>
#include <Carbon/Carbon.h> /* for ProcessSerialNumber stuff */
#include <stdio.h>

int
main()
{
    ProcessSerialNumber psn;
    CGEventRef      down, up;

    if (GetFrontProcess(&psn) != noErr) {
        printf("Unable to get front process\n");
        return 1;
    }

    down = CGEventCreateMouseEvent(
        NULL,
        kCGEventLeftMouseDown,
        CGPointMake(16, 36),
        kCGMouseButtonLeft
    );
    up = CGEventCreateMouseEvent(
        NULL,
        kCGEventLeftMouseUp,
        CGPointMake(16, 36),
        kCGMouseButtonLeft
    );

    CGEventPostToPSN(&psn, down);
    CGEventPostToPSN(&psn, up);

    CFRelease(down);
    CFRelease(up);

    return 0;
}

我已经被这个问题困扰了好几天了,我似乎无法弄清楚。根据文档 https://developer.apple.com/library/mac/#documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html(据我所知)这正是应该如何完成的。

我在 Snow Leopard 和 Lion 上测试了这段代码,得到了相同的结果。

通过 CGEventPostToPSN() 成功点击的人能否就完成此操作的正确方法提供一些见解?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CGEventPostToPSN() 不适用于鼠标点击 的相关文章

  • 使用 NSTokenField 强制 NSPopover 不成为第一响应者

    我有一个 NSTokenField 并且在弹出窗口内提供自定义自动完成功能 不幸的是 一旦显示弹出窗口 它就会强制 NSTokenField 放弃第一响应者 有没有办法显示弹出窗口但不丢失 NSTokenField 上的第一个响应者 重写
  • 如何检测 UIImage 的非透明部分何时与 UIImage 的另一个非透明部分接触

    我在完成一些我认为会容易得多的事情时遇到了困难 每当 UIImage 中图片的非透明部分接触 UIImage 中包含的图像的另一个非透明部分时 我试图运行一个方法 我举了一个例子来帮助进一步解释我的问题 正如您在上图中看到的 我有两个三角形
  • 4.4 中新的 Objective-c 文字

    我可以写 42 这会创建一个NSNumber with int值 42 我可以用变量来做到这一点 例如 someIntVar 显然我尝试过但它不起作用 这很糟糕 因为然后我必须经历 NSNumber numberWithInt someIn
  • 将数据从子模态 VC 传递到父视图控制器的最佳方法?

    将数据从子模式视图传递到父视图控制器的最佳方法是什么 我的 iPad 应用程序上有一个子模式登录屏幕 我想将用户信息传回父级分割视图控制器 我正在考虑使用 NSNotification 但我不确定这是否是将数据传递回父级的最简单 最有效的方
  • 如何确定自定义 UINavigationItem.titleView 的大小/框架?

    创建自定义视图并将其分配给 navigationItem titleView 属性后 它的显示如下 自定义视图填充两个按钮之间的空间 因此 自定义视图并不以导航栏为中心 如何确定 titleView 属性中视图的框架 我想在导航栏中居中放置
  • 为什么无论 -rdynamic 如何,backtrace 都不包含 Objective-C 符号?

    Update 我正在 Linux 上使用 GNU 运行时 问题是not发生在带有 Apple 运行时的 MacOS 上 更新2 我在 MacOS 上编译了 GNU 运行时并用它构建了示例 该错误确实not发生在带有 GNU 运行时的 Mac
  • 如何调试不在启动时运行的 Launchd 脚本?

    我有一些launchd脚本来自Homebrew 但是 当我重新启动计算机时 我必须手动运行它们 launchctl load w Library LaunchAgents com mysql mysqld plist
  • 如何更改标签栏图标颜色从默认蓝色?

    我有四个标签 我能够将选项卡图标颜色从默认的蓝色更改为红色 或可能任何颜色 并且效果非常好 问题是它仅适用于三个选项卡项目 最后一个选项卡默认为蓝色 下面是代码 我正在编码这个rootviewcontrollerAppDelegate m您
  • 在 Objective C 中断言每个对象创建都成功是必要的吗?

    我最近阅读了Apple的示例代码MVC网络 http developer apple com library ios samplecode MVCNetworking 由 Apple 开发者技术支持大师 Quinn The Eskimo 撰
  • “config”脚本存在于系统或 Homebrew 目录之外

    运行 brew doctor 并出现一些错误 我按照此链接中的建议设法解决了路径问题 如何修改 Homebrew 的 PATH https stackoverflow com questions 10343834 homebrew want
  • Intellij 基本完整的 ctrl + space 在 mac 上不起作用

    我在跑步IntelliJ on my macOS Big Sur and ctl space对于基本完整似乎不起作用 我查看了 首选项 gt 键盘映射 gt 代码完成 gt 基本 它似乎按顺序排列 有任何想法吗 发现操作系统本身已经采取了这
  • 如何对 iPad 应用程序进行类转储?

    我正在尝试运行 iPad 应用程序的类转储来探索其架构 我使用 The Unarchiver 提取了 ipa 文件 并从 Payload 文件夹中对 app 文件运行了 class dump 但是 我收到此错误 Generated by c
  • NSWindow 关闭时退出应用程序

    当主应用程序 唯一的应用程序 关闭时 如何正确退出 Mac OS X 应用程序 我知道有一个方法 void windowWillClose NSNotification notification in NSWindowDelegate 但它
  • 如何执行 UIAlertAction 的处理程序?

    我正在尝试编写一个帮助程序类以允许我们的应用程序支持两者UIAlertAction and UIAlertView 然而 当写alertView clickedButtonAtIndex 方法为UIAlertViewDelegate 我遇到
  • iOS:保持应用程序在后台运行

    如何让我的应用程序在后台运行 我需要越狱我的 iPhone 才能执行此操作吗 我只需要这个应用程序每隔设定的时间间隔从互联网上检查一些内容 并在需要时发出通知 以供我自己使用 是的 不需要越狱 查看本文档的 实现长时间运行的后台任务 部分A
  • 使用 AFNetworking 的 setImageWithURL 时如何配置缓存

    我在用着setImageWithURL在我的应用程序中下载一些图像 是否可以 指定此图像必须在缓存中保存多长时间 例如 1 周 指定缓存的最大总大小有多大 例如 200 兆 查看图像缓存中有什么 清除缓存 文档 http engineeri
  • UITextField 字体大小在开始或停止输入字符时发生变化

    我见过很多线程 但没有找到解决这个问题的任何具体解决方案 我使用 XIB 创建了 UITextfield 尚未以编程方式对该字段执行任何操作 一旦我开始打字 文本字段的字体就会改变 一旦我将焦点移出文本字段 并且随着键盘消失 字体大小就会减
  • macOS 应用程序中还需要 Swift 的嵌入式 dylib吗?

    Swift 5 发行说明说 对于运行 iOS 12 2 watchOS 5 2 和 tvOS 12 2 的设备 Swift 应用程序不再在构建变体中包含 Swift 标准库和 Swift SDK 覆盖的动态链接库 但在同一上下文中没有提及
  • 自动布局:Y 位置为两个值中的最大值

    我有一个按钮 play Button 和两个 UIView myView 1 和 myView 2 它们的位置在执行过程中可能会发生变化 我希望 playButton 的顶部比 UIView 1 的底部或 UIView 2 的底部低 10
  • 跟踪所有 ObjC 方法调用?

    有时 当查看别人的大型 Objective C 程序时 很难知道从哪里开始 在这种情况下 我认为记录对每个非 Apple 方法的每次调用会很有帮助 有没有办法做到这一点 基本上 在某个中心位置进行一项更改 并记录调用的每个方法 最好仅限于非

随机推荐