問題タブ [nsrunningapplication]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
743 参照

objective-c - pid から NSRunningApplication オブジェクトを取得する

私はObjective-cの初心者なので、助けていただければ幸いです... PIDがアクティブなアプリケーションのPIDであるかどうかを確認する必要があります。pidNSRunningApplicationに変換してから、インターフェイスisActiveを使用します。私の質問は、どうすれば PID を NSRunningApplication に変換できますか? または、PIDがアクティブかどうかを確認する他の方法がありますか?

PS すべてのアプリケーションのリストを取得し、各アプリがアクティブかどうかを確認する実装を見ました。次に、アクティブな pid から pid を取得します。あまり効率的ではないようです。

0 投票する
1 に答える
1034 参照

objective-c - -[NSRunningApplication activateWithOptions:] が機能しない

特定のアプリケーション (起動されている場合) にフォーカスするプログラムを作成しようとしています。これが私のコードです:

これを実行すると、「アクティブ化に失敗しました」と出力され、Firefox がフォーカスされません。私は何を間違っていますか?

0 投票する
0 に答える
186 参照

objective-c - NSRunningApplication メモリの問題

タイマーによって次の関数が実行されると、メモリが大量に使用されることに気付きました。

コードは基本的に何もしません。

NSRunningApplication インスタンスのほぼすべてのプロパティ (bundleIdentifier、bundleURL、description...) にアクセスすると、メモリ使用量が ~1MB/秒 (指定された時間間隔を考慮して) 増加します。そして最悪なのは、それが止まらないことです。まだ限界までやってないけど…

Instruments (Leaks テンプレート) を使用してプロファイリングを試みましたが、メモリ リークは見つかりませんでした。

どんな手掛かり?


編集#1:

私は簡単な実験を行い、単一の迅速なファイルでコンソール アプリケーションを作成しました。

実行中の pid を入力します。数秒でギグがかかります...


編集#2:

私の最新の発見は、プロセスの種類が動作に直接影響するということです。検討:

processType = kProcessTransformToBackgroundApplication または kProcessTransformToUIElementApplication の場合、問題に直面します。プロセス タイプ = kProcessTransformToForegroundApplication (デフォルト値) の場合、すべてが正常に機能します。

0 投票する
2 に答える
911 参照

objective-c - Objective-C: FrontmostApplication の更新

私はこの小さなプログラムを書きました。このプログラムは、現在の最前面のアプリケーションを 2 回印刷し、その間に 3 秒の休憩を挟みます。

このプログラムを実行すると、2 回目の呼び出し時に frontmostApplication が更新されないことに気付きました。ここで解決策を見つけました。しかし、まだ 2 つの質問があります。

1) frontmostApplication が更新されない理由を知りたい。

2) 呼び出すたびに強制的に更新するにはどうすればよいですか? 最前面のアプリケーションが非アクティブになるたびに通知を受け取りたくありません。私の目的には少し非効率的だからです。

編集: 明確にするために、現在の時刻が 10:00:00 であるとしましょう。printFrontmostApp を呼び出すと、コンソールに "Xcode" が出力されます。これは、Xcode が現在最前面にあるアプリであるためです。その後、プログラムは 3 秒間スリープします。10:00:01 に、TextEdit などの別のアプリを開きました。10:00:03 に、私のプログラムは printFrontmostApp を 2 回呼び出します。現在の最前線のアプリケーションである「TextEdit」を印刷することを期待しています。ただし、代わりに「Xcode」を出力します。この振る舞いが理解できません。

誰かが 10:00:03 に何が起こったのか説明してもらえますか? この関数は、10:00:00 の frontmostApplication の値を「記憶」しているようで、2 回目に呼び出されたときにそれを保持します。範囲外になるとメモリが解放されると思っていたのに、なぜこれが起こっているのですか?

また、プログラムで 10:00:03 に最前面のアプリを取得するにはどうすればよいでしょうか? 10:00:00 に最前面のアプリを取得できますが、3 秒後に同じことができるはずですよね?

0 投票する
1 に答える
582 参照

objective-c - NSRunningApplication には特定のアプリ ウィンドウがありません

現在実行中のすべてのアプリをアプリケーションに認識させ、表に表示したいと考えています。テーブルには、実行中のすべてのアプリ名が表示され、各アプリの横にボタンが表示されます。ボタンをクリックすると、特定のアプリが最小化または閉じられていても、そのウィンドウを開く必要があります。次のコードで実行中のアプリのリストを取得しましたが、NsRunningApplication オブジェクトにはウィンドウまたはビューがないため、アプリのウィンドウを取得できません。誰でも私を助けてもらえますか?

0 投票する
0 に答える
833 参照

objective-c - [NSRunningApplication activateWithOptions:] が NO を返すのはなぜですか

アプリケーションのアクティブ化に失敗する明確な理由がない場合に[NSRunningApplication activateWithOptions:]戻るという問題があります。NO

これは-[NSRunningApplication activateWithOptions:] が機能しないのと同じではありません

その質問に対する受け入れられた答えはNSApplicationActivateIgnoringOtherApps代わりに使用することですNSApplicationActivateAllWindowsが、2 つのオプションはオプション値が示すように異なる方法でアプリケーションをアクティブ化することを目的としているため、受け入れられる答えではありません。

私のコード内には[NSRunningApplication activateWithOptions:]機能する場所がありますが、EventTap を介して呼び出すと、NONSApplicationActivateAllWindowsまたは引数NSApplicationActivateIgnoringOtherAppsとしての使用に関係なく、ほとんどの場合返されます。option「ほぼ」常に返さNOれると言う理由は、最初に呼び出されたときに機能するためです。2 回目以降の呼び出しはすべて失敗します。

基本的に、Dock のアプリケーション アイコンでシングルクリック イベントを処理しています。Dockで作成されたプロセスにインストールされた EventTap を使用していCGEventTapCreateForPSN()ます。イベント タップ コールバック内で、process identifierでクリックされたアイコンの を正常に特定しましたDock。プロセス ID は、Accessibility API.

次に、アプリケーションをアクティブ化する必要があるため、次のように呼び出します。

上記の例では、currentAppが有効であること bundleIdentifier、 、 processIdentifierおよびオブジェクト内の他のいくつかのインスタンス変数RunningApplicationが正しいことを確認しました。

前述のように、NSApplicationActivationOptions使用に関係なく、アプリケーションは起動せず、メソッドは を返しますNO。繰り返しになりますが、最初のクリックでは機能する場合がありますが、アプリケーションのドック アイコンの後続のすべてのクリックでは失敗します。

このような単純な方法が失敗する理由を誰か説明できますか? おそらく、最初に呼び出されたときにのみ機能するのはなぜですか? EventTap から実行されていない場合に常に機能するのはなぜですか?

この問題を解決するために数時間を費やしましたが、常に機能する唯一SetFrontProcessWithOptions(&psn, 0);の方法は、の代わりに非推奨のメソッドを使用することです[NSRunningApplication activateWithOptions:NSApplicationActivateAllWindows]

への呼び出しをラップしようとしましたが、EventTap[NSRunningApplication activateWithOptions:]dispatch_asyncから操作キューを使用しようとしましたが、どちらも問題を解決しません。最後に、通知の送信と[NSRunningApplication activateWithOptions:]通知コールバック内からの呼び出しを試みましたが、これも失敗しました。これは私のイベントタップのコードです:

どんな支援も大歓迎です!デバッグ画面のグラブが添付されており、ドック アイコンをクリックしてアプリをアクティブ化する最初の試行が成功し、その後のクリックでアプリのアクティブ化が失敗する方法を示しています。

ここに画像の説明を入力

更新と半分解決:[NSRunningApplication activateWithOptions:] 1 回目の試行で機能し、2 回目以降の試行で失敗 する理由を特定しました。Dock のアプリケーション アイコンを初めてクリックすると、そのアプリケーションがアクティブな app になります。その後アプリ アイコンをクリックすると、他のアプリケーションがアクティブになります。したがって、ここでの問題[NSRunningApplication activateWithOptions:]は、アプリケーションが最前面のプロセスである場合にのみ機能するようです。

[NSApp activateIgnoringOtherApps:YES];への呼び出しの前に追加する[NSRunningApplication activateWithOptions:]と、一貫して意図したとおりに機能しますが、アプリをアクティブ化してから別のアプリをアクティブ化するため、メニューバーがちらつきます。したがって、質問は次のようになります。

[NSRunningApplication activateWithOptions:]アプリケーションが最前面に表示されていない場合に作業を開始する方法はありますか? このように動作することにactivateWithOptions:なっていますか?

0 投票する
2 に答える
3008 参照

excel - マクロを自動的に実行するデイリー タイマー

毎日午前9時にマクロを実行しようとしています。OnTime アプリケーションを使用しようとしており、特定の時間に起動するマクロをテストしましたが、自動的に機能しません。メッセージ ボックスをポップアップ表示するには、マクロを手動で実行する必要があります。何かアドバイス?