GraphicsServices.h / GSEventを使用するだけでなく、XcodeのでCLI iPhoneツールをコンパイルします
-
26-09-2019 - |
質問
私はKennyTM(GitHubの上のすべてのプライベートフレームワークヘッダを持っている)にこれを送ったが、私は誰かがいくつかの良いアイデアやヘルプ、私アウトにどのような方法がありますあまりにも念のため。
ここにお願いしたい考え出し私はオンスクリーンキーボード、タッチ/ドラッグ要素を動作させるためにGSEventsを送信し、コマンドラインユーティリティを書き込もうとし、ハードウェアボタンに動作しています(音量、家、睡眠、など。)
私はMouseSupportコードをつかんで、それを見てみましたが、私はGSEventsを送信する最も簡単な方法を見つけることができませんでした。私はここで誰かが私を助けることができる願っています。
まず、GSEventを宣言し、それを送信するための最も簡単な方法は何ですか?私はiPhoneの開発のwikiに見えたが、ドキュメントは非常にあいまいでした。私は紫色のイベントポート(?)私はこれらのイベントを送信しなければならないことがあることを理解し、私はそれを行う方法を理解していません。座標に触れ、たとえば、誰かのためにオファーの例は、
?特定のキーを入力するか、ハードウェアボタンを押すと、でしたまた、私は、このユーティリティは、すべてのアプリケーションと同様にスプリングを操作したい場合は何も特別なを書いたりしなければならないのですか?これは特殊なケースであれば、私はOSレベルでそれをしたいので、私は知りません。理想的には、私は、携帯電話にSSHプログラムを開始し、それが開いていたものは何でも、アプリケーションによって処理されるGSEventsを送信します。
限り、このコードをコンパイルすると、Xcodeの下にそうする方法はありますか?私は、ソートプロジェクトテンプレートの私が使うべきかわからない(もしあれば)、これは私を投げています。私は、私はより幸せな電話に上にプログラムをSCPによ、「ビルドをして行く」必要なサポートをしません。私は、コードをコンパイルすると、電話でも実現可能であることを理解しています。私はiphone-gccのと一緒に自分の携帯電話にSDKからヘッダーのすべてを持っていますが、いくつかのテストプログラムをコンパイルするとき、私はまだマッハヘッダとCoreFoundationのを見つからないというエラーが出。これを行うための簡単な方法はありますか?
最後に、誰もがもっとこのことについて学ぶために向けて私を指すことができることが他のガイドや文学の作品はありますか?私は(私は、公式SDKの経験があるが、私はより深く行きたい)オープンiPhoneの開発に入るために興奮しています。
任意およびすべてのヘルプの人々のおかげで、提供することができます!
解決
まず、GSEventを宣言し、それを送信するための最も簡単な方法は何ですか?
これはGSEventの種類によって異なります。一部のイベントは、例えば、作成され、1つのステップで送信することができる便利な機能を持っていますGSEventLockDevice()
。しかし、HIDのイベント(タッチ、キーの押下など)は、これらの単純な機能を持っていません。 GSEventLockDevice()
などが送信されるので、理由がありそうであるの<は/ em>の踏み台にアプリが、HIDのイベントは、ののから踏み台アプリに送信されますから。したがって、唯一の踏み台チームが複雑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の時点では、マッハポートの名前は、そのバンドルIDと同じです。
mach_port_t thePortOfApp = GSCopyPurpleNamedPort("com.unknown.appBundleID");
...
mach_port_deallocate(mach_task_self(), thePortOfApp); // remember to release the port.
<時間>
また、私は、このユーティリティは、すべてのアプリケーションを操作したい場合は何も特別なを書いたりしなければならないだけでなく、ないのスプリング?
私の知る限りでは、ありません。
<時間>他の二つの場合は、おそらくあなたは、個々の質問にそれらを分割する必要があります。