使用 GraphicsServices.h/GSEvent 以及使用 Xcode 编译 CLI iPhone 工具

2023-12-07

我将其发送给 KennyTM(在 GitHub 上有所有私有框架标头),但我想我也会在这里问,以防万一有人有一些好的想法或任何方法来帮助我。

我正在尝试编写一个命令行实用程序,它发送 GSEvents 来操作键盘、触摸/拖动屏幕上的元素以及操作硬件按钮(音量、主页、睡眠等)

我抓住了 MouseSupport 代码并尝试查看它,但我找不到发送 GSEvents 的最简单方法。我希望这里有人能帮助我。

首先,声明 GSEvent 并发送它的最简单方法是什么?我查看了 iPhone 开发 wiki,但文档非常模糊。我知道我必须将这些事件发送到一个紫色事件端口(?),但我不明白该怎么做。有人可以提供一些示例,例如触摸坐标、键入某个键或按下硬件按钮吗?

另外,如果我希望这个实用程序能够像 Springboard 一样操作所有应用程序,我是否必须编写或执行任何特殊操作?我不知道这是否是一个特殊情况,因为我希望它在操作系统级别。理想情况下,我会通过 SSH 连接到手机,启动程序,然后它将发送 GSEvent,这些事件将由打开的任何应用程序处理。

至于编译这段代码,在Xcode下有什么办法吗?我不知道应该使用哪种项目模板(如果有的话),这让我很失望。我不需要“构建并运行”支持,我非常乐意将程序发送到电话上。据我了解,在手机上编译代码也是可行的。我的手机上有 SDK 中的所有标头以及 iphone-gcc,但是在编译一些测试程序时,我仍然收到有关找不到 mach 标头和 CoreFoundation 的错误。有没有更简单的方法来做到这一点?

最后,是否还有其他指南或文献可供我参考以了解更多相关信息?我很高兴能够进入开放式 iPhone 开发(我有使用官方 SDK 的经验,但我想更深入)。

感谢人们提供的所有帮助!


首先,声明 GSEvent 并发送它的最简单方法是什么?

这取决于 GSEvent 的类型。有些事件具有方便的功能,可以一步创建和发送,例如GSEventLockDevice()。但HID事件(触摸、按键等)不具备这些简单的功能。原因很可能是因为GSEventLockDevice()等将被发送from将应用程序发送到 SpringBoard,但发送 HID 事件fromSpringBoard 到应用程序。因此,只有SpringBoard团队需要知道如何构造一个复杂的GSEvent。

无论如何,要创建 HID 事件(例如加速度计事件),您不需要创建 GSEvent。只需使用GSSendEvent():

// (not tested.)

GSAccelerometerInfo accel = {0.0f, 0.0f, 1.0f};
GSEventRecord header;
memset(&header, 0, sizeof(header));
header.type = kGSEventAccelerate;
header.infoSize = sizeof(accel);
header.timestamp = mach_absolute_time();
// fill in other members.

struct {
  GSEventRecord record;
  GSAccelerometerInfo info;
} record = {header, accel};

// ... see below ...

GSSendEvent(&record, thePortOfApp);

但什么是“应用程序端口”?不幸的是没有函数可以实现这一点。从 3.1 开始,mach 端口的名称与其捆绑包 ID 相同,因此您可以使用:

mach_port_t thePortOfApp = GSCopyPurpleNamedPort("com.unknown.appBundleID");
...
mach_port_deallocate(mach_task_self(), thePortOfApp); // remember to release the port.

另外,如果我希望这个实用程序能够像 Springboard 一样操作所有应用程序,我是否必须编写或执行任何特殊操作?

据我所知,没有。


对于另外两个问题,您可能应该将它们分成单独的问题。

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

使用 GraphicsServices.h/GSEvent 以及使用 Xcode 编译 CLI iPhone 工具 的相关文章

  • Open 方法仅使用完整路径打开文件 C++

    如果我写入完整路径 完整路径 roots txt 文件将打开 如果我只写文件名 roots txt 文件将无法打开 然而 roots txt 与 main cpp 位于同一文件夹中 我应该检查 XCode 上的任何设置吗 这是代码 stri
  • 错误域=kAFAssistantErrorDomain 代码=209“(空)”

    我面临着一个问题SFSpeechRecognizer 启动应用程序几秒钟后 我开始收到错误消息 错误域 kAFAssistantErrorDomain 代码 209 空 和 错误 域 kAFAssistantErrorDomain 代码 2
  • 有关 Swift 编译器选项的文档

    您好 我想开始在 Apple Swift 语言上运行一些微基准测试 然而 我觉得很难找到有关编译器优化的不同选项的适当文档 我读过很多关于其他人的语言微基准的问题和文章 但是如果能有一些关于该主题的可靠文档那就太好了 在最新的测试版中 使用
  • 每 24 小时触发一次方法

    我正在尝试每天在给定时间触发一个方法 我尝试了一些方法 但我无法真正使其发挥作用 任何意见 将不胜感激 此外 如果无论应用程序是否打开它都会触发 那就更理想了 这可能吗 UI本地通知 http developer apple com lib
  • 使用未解析的标识符“FlurryAdInterstitial”

    我正在尝试整合Flurry Interstitial Ads使用cocoapods in Swift and Xcode 7 1 1 我正在关注开发人员雅虎网站上的此文档 https developer yahoo com flurry d
  • “预期的 ';'在 Swift 下的顶级声明符之后”

    我正在尝试将所有颜色设置在一个 Swift 文件中 该文件可以在我的整个应用程序中使用 下面的代码会导致 import Foundation import UIKit class DotColors let tsblueColor UICo
  • iPhone:UIApplication WillResignActiveNotification 从未被调用

    我正在视图控制器中播放视频 当用户按下硬件主页按钮并且当前正在播放视频时 应用程序崩溃并显示EXC BAD ACCESS在模拟器中 我读到我应该使用applicationWillResignActive停止视频播放的消息应该可以解决崩溃问题
  • 像 TraceGL 一样分析 Objective C 中的代码路径?

    TraceGL 是一个非常简洁的项目 它允许 JS 程序员跟踪 Javascript 中的代码路径 它看起来像这样 我想为 Objective C 构建类似的东西 我知道运行时使跟踪方法调用变得相当容易 但是我如何跟踪控制流 例如 在上面的
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S
  • CAShapeLayer 上的渐变颜色效果

    我正在尝试在 CAShapeLayer 上应用渐变颜色 为此我编写代码 void addCircle Drawing code UIBezierPath aPath UIBezierPath bezierPathWithArcCenter
  • Cocos2d-x:如何将使用XCode开发的Cocos2d-x项目移植到Android(通过Eclipse)?

    我使用 XCode 开发了一个 Cocos2d X 应用程序 当我在 iOS 设备上从 XCode 启动它时 它可以完美运行 现在 我想把它移植到Android上 我的理解是 我必须找到一种方法将我的 XCode 项目 导入 Eclipse
  • iOS 应用程序测试。应用程序安装失败。找不到代码签名[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我尝试在多个 iOS 设备上安装我的应用程序 但这件事不让我这么做 我想知道 问题是什么以及我应该如何解决它 就我而言
  • CSS 安全区域属性在 iPhone X 上不起作用

    就我而言 我正在 iPhone X 上运行一个 Web 应用程序 我尝试在顶部添加一个填充 以使用 Webkit 的安全区域 css 属性将我的身体推到安全区域padding top constant safe area inset top
  • 如何使用 MonoTouch c# 以编程方式获取联系人?

    如何获取 iPhone 中的联系人 我需要从 iPhone 联系人中获取所有属性 如何使用MonoTouch以编程方式实现 ABAddressBook iPhoneAddressBook new ABAddressBook ABPerson
  • 我可以安全地将 UInt32 存储到 NSUInteger 吗?

    在标头中 它的定义如下 if LP64 TARGET OS EMBEDDED TARGET OS IPHONE TARGET OS WIN32 NS BUILD 32 LIKE 64 typedef long NSInteger typed
  • 从应用程序打开/关闭 iPhone 的 Wifi

    我需要打开或关闭 iPhone 中的 wifi 有什么方法可以做到吗 还是被禁止了 私有框架 所有使用公共 SDK 编写的应用程序都经过沙箱处理 他们只能访问苹果认为可以在该沙箱中使用的属性和数据 恐怕 Wi fi 不在列表中 请看一下这个
  • Objective-C 中 NSURL 为 null 而 NSString 是正确的

    我有一个NSString包含一个 url 以及当我分配时NSURL与NSString NSURL 输出 空 这是因为url中有一些非法字符 导致NSURL不编码就无法读取NSString包含网址 NSString u incomingUrl
  • 为 UISlider 设置刻度线

    有没有为 UISlider 设置刻度线的方法 NSSlider 有一个叫做 void setNumberOfTickMarks NSInteger numberOfTickMarks 但 UISlider 似乎没有 我想要做的是将滑块值设置
  • Xcode 中的 Prefix.pch 文件是什么?

    许多开发人员正在向其中添加各种方便的宏Prefix pch 但我的问题是那是什么Prefix pch file 如果我删除它Prefix pch来自我的文件Xcode 那么我的应用程序会运行吗 或者会显示什么错误吗 或者它会在构建过程中崩溃
  • 在启动屏幕中执行代码已更新

    在原始启动屏幕中执行代码 https stackoverflow com questions 27642016 execute code in launch screen 现在默认的LaunchScreenXcode 项目中的文件已更改为

随机推荐

  • 在 PHP5 中创建 Singleton 设计模式

    如何使用 PHP5 类创建 Singleton 类 Singleton class final class UserFactory private static inst null Prevent cloning and de serial
  • 固定div的CSS水平居中?

    menu position fixed width 800px background rgb 255 255 255 The Fallback background rgba 255 255 255 0 8 margin top 30px
  • 安卓中的动画?

    我是 android 新手 我需要了解 Android 中视图和视图组的基本动画 任何人都可以提供一些指导线来学习它 提前致谢 您可以先阅读官方指南到动画
  • JAIN API 和 JAIN SLEE API 之间的区别

    我正在阅读有关 SIP 的内容 发现有一个 java API JAIN SIP 可以开发基于 SIP 的应用程序 然后我还发现有JAIN SLEE和SIP servlet 我相信 JSLEE 和 SIP Servlet 是分别部署基于 JA
  • SQL Server 一轮又一轮的划分

    在存储过程中我有一个像这样的表达式 select some val in percents total val 100 some val 如果我使用Round像这样的函数 select some val in percents Round
  • 新手:在函数调用上挂起浏览器

    我刚刚开始学习 JavaScript 想知道为什么当我单击 调用函数 按钮时这个简单的代码片段会挂起 我缺少什么
  • 从 MATLAB 运行多进程应用程序

    我用 VC 编写了一个多进程应用程序 并尝试使用命令行参数执行它system来自 MATLAB 的命令 它可以运行 但只能在一个核心上运行 有什么建议吗 Update 事实上 它甚至没有看到第二个核心 我使用了 OpenMP 并使用了omp
  • 在windows和pycharm中设置SPARK-HOME路径变量

    我是 SPARK 的新手 并尝试在 Windows 中使用它 我能够使用 hadoop 的预构建版本成功下载并安装 Spark 1 4 1 在以下目录中 my spark directory bin 我可以运行 Spark shell 和
  • Google Android应用内购买“内容交付” 如何正确交付内容?

    我目前正在尝试对应用内购买进行编码 我一直在寻找有关 Google 无法处理的一些内容的最佳实践的文档 信息和教程 到目前为止我所做的 我正在运行一个计费服务来处理与 Google Play 的对话 该服务可以完成 示例 交易 并且我的应用
  • Python Kafka 消费者缺少轮询一些消息

    我的 Kafka 消费者的代码如下所示 def read messages from kafka topic my topic consumer KafkaConsumer bootstrap servers my host1 my hos
  • 使用序列化在实体框架中的两个 ObjectContext 之间复制实体

    Preface 我知道这可能已经被视为疯狂的问题 但我正在寻找最有教养的建议和PROVEN关于如何进行复印的建议ALL来自某个实体的数据 即所有实体和关系 ObjectContext到一个新创建的ObjectContext在另一家商店支持
  • 如何将 json 字符串发送回 jquery

    我需要将一些数据发送到外部 php 页面 并且该页面必须将所需的数据发送回 jQuery 我的问题是如何将数据从外部页面发送回发送它的页面上的 jQuery 这是将数据发送到外部页面的 jQuery 代码 function LoadImag
  • GWT 向导未显示在 Eclipse 向导菜单中

    谷歌文档http code google com webtoolkit tools gwtdesigner wizards gwt uibinder dialogbox html在 Eclipse 中显示 GWT 向导 但是 在我的系统上
  • Murmur3 散列 Python 和 Java 实现之间的不同结果

    我有两个不同的程序 希望分别在 Python 和 Java 中使用 Murmur3 哈希相同的字符串 Python 版本 2 7 9 mmh3 hash128 abc 给出 792679617637421130190083470206475
  • 每个类在jar文件中都有两个类文件

    我有一个 jar 文件 每个 java 文件有两个类文件 Java Foo java Bar java 类文件 Foo class Foo class Bar class Bar class 我已经验证每个类只有一个 java 文件 jav
  • 将 powershell 变量值返回给 c# 应用程序

    我正在从 C 运行 powershell 脚本 string scriptPath script myscript ps1 Runspace runspace RunspaceFactory CreateRunspace runspace
  • g++ 的 json-spirit 链接器标志是什么?

    我在任何地方都找不到这个 我已经在我的 ubuntu 服务器上安装了 json spiritapt get install json spirit dev 必须与什么链接器标志一起使用g 使用 json spirit 唯一的图书馆列在该包中
  • WebLogic 的 JavaEE API

    有不同的服务器特定 JavaEE API 实现 例如 glassfish javaee 或 jboss javaee 它们作为单独的 jar 文件分发 并且可以使用 Maven 依赖项附加到某些项目 有没有专门为WebLogic AS设计的
  • UDP 数据包未被 Wireshark 捕获,但被 UDP 应用程序捕获

    我有一个设计并运行的应用程序 它在端口上接收 UDP 广播 该应用程序一直工作得很好 但我想将应用程序收到的数据包与 Wireshark 捕获进行比较 我试图确保以最小的数据丢失捕获尽可能多的数据包 我最初认为我应该运行 Wireshark
  • 使用 GraphicsServices.h/GSEvent 以及使用 Xcode 编译 CLI iPhone 工具

    我将其发送给 KennyTM 在 GitHub 上有所有私有框架标头 但我想我也会在这里问 以防万一有人有一些好的想法或任何方法来帮助我 我正在尝试编写一个命令行实用程序 它发送 GSEvents 来操作键盘 触摸 拖动屏幕上的元素以及操作