2013-04-22 7 views
11

私はバックグラウンドで実行され、バネボードや他のアプリにタッチを注入するアプリを書こうとしています。プライベートAPIと構造体を使用することを理解します。アプリはエンタープライズアプリであり、AppStoreの承認を受ける必要はありません。IOS 5以上のフロントアプリケーションの紫色のポートを見つけるにはどうすればいいですか?

私は、IOS 5/6のいくつかのマイナーな変更を加えて、KennyTMが提案するGSEvent構造を使用しています。 GSSystemEventsを送信して、Springboardにタッチイベントやその他のイベントを送信できます。

他のアプリケーションにも同様のイベントを送信する必要がありますが、ほとんどのアプリケーションでポートを見つけることができません。

私は自分のGSEventsをアプリケーションに送ることができるように、起動して実行中のアプリケーション用のポートを取得する方法はありますか?

誰かが私に例を教えたり、どのように私がフロントのほとんどのアプリの紫色のポートを得ることができるかを教えてくれればいいです。

ありがとうございます!

答えて

12

更新:これはios7でテストしていません。

私は前とまったく同じ要件に取り組んでいます。

パープルポートを取得するには、バンドルIDを引数としてGSCopyPurpleNamedPort()を使用できます。

SpringBoardでタッチをシミュレートする必要がある場合は、GSGetPurpleSystemEventPortを使用します。

このコードでは、ポートを取得してタッチシステム全体に注入することができるはずです。私がテストしてみた

#import <dlfcn.h> 
// Framework Paths 
#define SBSERVPATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices" 
-(mach_port_t)getFrontMostAppPort 
{ 
    bool locked; 
    bool passcode; 
    mach_port_t *port; 
    void *lib = dlopen(SBSERVPATH, RTLD_LAZY); 
    int (*SBSSpringBoardServerPort)() = dlsym(lib, "SBSSpringBoardServerPort"); 
    void* (*SBGetScreenLockStatus)(mach_port_t* port, bool *lockStatus, bool *passcodeEnabled) = dlsym(lib, "SBGetScreenLockStatus"); 
    port = (mach_port_t *)SBSSpringBoardServerPort(); 
    dlclose(lib); 
    SBGetScreenLockStatus(port, &locked, &passcode); 
    void *(*SBFrontmostApplicationDisplayIdentifier)(mach_port_t *port, char *result) = dlsym(lib, "SBFrontmostApplicationDisplayIdentifier"); 
    char appId[256]; 
    memset(appId, 0, sizeof(appId)); 
    SBFrontmostApplicationDisplayIdentifier(port, appId); 
    NSString * frontmostApp=[NSString stringWithFormat:@"%s",appId]; 
    if([frontmostApp length] == 0 || locked) 
     return GSGetPurpleSystemEventPort(); 
    else 
     return GSCopyPurpleNamedPort(appId); 
} 

...これは、ロック画面が現れたときに注入しない場合は、ロック部を必要としないかもしれないのiOS 5と6 で正常に動作します。 これが役立つことを願っています。

+0

すごくうまくいった!ありがとう! – mercury00x

+0

@ mercury00xあなたは大歓迎です – pt2121

+1

すばらしい!チャームのように働いて.. !! – Apurv