5

他のアプリを起動するこのアプリに取り組んでいます。私は以下を使用してアプリの起動を聞いています:

[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
 selector:@selector(appLaunched:) name:NSWorkspaceDidLaunchApplicationNotification
 object:nil];

そして、私はそれらを使用して起動します (メールは単なる例です):

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSArray arrayWithObject:@"lalalala"], NSWorkspaceLaunchConfigurationArguments, nil];
[[NSWorkspace sharedWorkspace] launchApplicationAtURL:[NSURL URLWithString:@"/Applications/Mail.app"] options:NSWorkspaceLaunchWithoutActivation configuration:dict error:nil];

いくつかの調査を行ったところ、アプリを起動するときに引数を送信できることがわかりました (そのため、dict上記のコードで var を使用しました)。ただし、これには問題があります: を使用してもNSWorkspaceLaunchWithoutActivation、Mail.app は起動し、新しい作成ウィンドウでフォーカスされます。なぜそんなことをしているのかわからない。

別のことですが、アプリにフォーカスせずにカスタム引数を正常に送信できた場合、アプリが自分によって起動されたかどうかを確認するにはどうすればよいですか (引数が存在するかどうかを確認してください)。

PS: App Store 対応のメソッドを探しています。

4

3 に答える 3

1

起動したアプリ名と一緒にタイムスタンプ (UTC) をサーバーまたはローカル ファイル (可能であれば) に送信します。

その後、追跡できます。

于 2013-06-30T23:44:02.647 に答える
0

まず、「機能していない」NSWorkspaceLaunchAndHide場合に試してみます。NSWorkspaceLaunchWithoutActivation理想的ではありません..しかし、クラッジ...

第二に...ここにトリックを行う「完全な実行例」があります..

#import <Cocoa/Cocoa.h>
NSString *psAUX(NSString*grep) {    
    FILE *read_f; char buff[BUFSIZ+1]; int char_rd; NSString *res, *cmnd;
    memset(buff, '\0', sizeof(buff)); 
    cmnd = [NSString stringWithFormat:@"/bin/ps aux|grep -i %@",grep];
    read_f = popen(cmnd.UTF8String, "r");
    if (read_f == NULL) return nil;
    char_rd = fread(buff, sizeof(char), BUFSIZ, read_f);
    if (!char_rd) return nil; 
    return res = [NSString stringWithUTF8String:buff], pclose(read_f), res;
}
int main(int argc, char *argv[]) { @autoreleasepool {         
    NSString* secretStr; NSURL *mailURL; NSDictionary *cfg; NSWorkspace *ws; NSApplication.sharedApplication;
    secretStr = @"TAMPAX";
    mailURL = [NSURL URLWithString:@"file:///Applications/Mail.app"];
    cfg  = @{NSWorkspaceLaunchConfigurationArguments:@[secretStr]};
    ws = NSWorkspace.sharedWorkspace;
    [ws launchApplicationAtURL:mailURL options:0 configuration:cfg error:nil];
    fprintf(stderr,"%s", 

        [psAUX(@"Mail.app") containsString:secretStr] 
      ? "You ARE Mail's baby's daddy!" 
      : "Hands off, she's NOT yours!");

[NSApp run];  }   }

NSLog->You ARE Mail's baby's daddy!

おめでとう!

于 2013-07-02T22:25:54.983 に答える