6

アプリのユーザーは、セッションの開始時にアプリを起動するかどうかを選択できます。

これを行うには、ここで説明されているように LSSharedFileListRef を使用します: How do you make your App open at login?

私が今欲しいのは、セッションの開始時に、またはドックのアイコンをクリックして、アプリが自動的に起動されたかどうかを知ることです。実際、これら 2 つのケースでは、異なるアクションを実行する必要があります。

これを行うために、次のデリゲート メソッドで通知のパラメーターを使用することはできないと感じています。

- (void)applicationDidFinishLaunching:(NSNotification *)notification

次の投稿を見ましたが、役に立ちません。

自分のアプリが Mac OS でどのように起動されたかを知るにはどうすればよいですか? =>もっと役に立たない他の投稿へのリンクを除いて、答えはありません...

ユーザーがアプリを起動したかどうかを知る=> この投稿で定義されている「Y」パラメーターを設定/取得する方法がわかりません

Mac OS X: ログイン時にメイン ウィンドウを表示せずにアプリケーションを開く=> 起動時にメイン ウィンドウを非表示にするかどうかを処理します。私が欲しいのは、より一般的なものです: アプリがどのように起動されたかを知る方法は?

誰でも私を助けることができますか?

ありがとう !

4

4 に答える 4

2

親プロセスIDを確認します。1 の場合は、起動時に launchd によって起動されたことを意味します。

struct kinfo_proc info;
size_t length = sizeof(struct kinfo_proc);
int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pid };
if (sysctl(mib, 4, &info, &length, NULL, 0) < 0)
    return OPProcessValueUnknown;
if (length == 0)
    return OPProcessValueUnknown;

 //info.kp_eproc.e_ppid is what you need 
于 2013-01-04T22:47:30.467 に答える
2

アプリケーションが起動時に実行されるように設定されている場合、アプリケーションは実行されます (なぜでしょうか?)。そのため、アプリケーションの開始時間をどこかで節約できます。その後の実行時 (たとえば、ユーザーがアプリケーションを終了して再度実行した場合) に、このパラメーターがあるかどうかを確認し、システムの起動時間よりも遅い場合は、今回のアプリケーションは自動的に実行されません。

[NSProcessInfo systemUptime] でシステムの起動時間を確認できます。

于 2013-01-04T22:44:57.330 に答える
1

@bioffeの回答が機能しない場合は、もう少し追加してください。

から: http://www.objectpark.net/parentpid.html

#include <sys/sysctl.h>

#define OPProcessValueUnknown UINT_MAX

//Returns the parent process id for the given process id (pid).
int OPParentIDForProcessID(int pid)
{
    struct kinfo_proc info;
    size_t length = sizeof(struct kinfo_proc);
    int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pid };
    if (sysctl(mib, 4, &info, &length, NULL, 0) < 0)
        return OPProcessValueUnknown;
    if (length == 0)
        return OPProcessValueUnknown;
    return info.kp_eproc.e_ppid;
}
于 2013-04-20T22:02:51.793 に答える
0

@AnoopVaidyaが指摘したように、ターミナルウィンドウを開き、入力last | grep '^reboot' | awk 'END { print $3" "$4" "$5" "$6 }'して再起動時間を取得し、特定のアプリケーションの起動時間と一致させます。

于 2013-01-04T22:28:14.200 に答える