7

プログラムでシステム環境設定の支援機器へのアクセスを有効にしたい。しかし、問題は、私のアプリケーションがrootユーザーとして実行されておらず、アプリケーションをrootユーザーとして使用したくないことです。また、その間に認証を要求するべきではありません。

すべてのキーボードイベントをグローバルにタップしたい。同じためにCGEventTapCreate()を使用しています。CGEventTapCreate()APIのドキュメントでは、次の条件のいずれかが当てはまる場合、イベントタップはキーアップイベントとキーダウンイベントを受信すると記載されています。

  1. 現在のプロセスはrootユーザーとして実行されています。
  2. 支援機器へのアクセスが有効になっています。Mac OS X v10.4以降では、システム環境設定、ユニバーサルアクセスパネル、キーボードビューを使用してこの機能を有効にできます。

システム環境設定から支援機器のアクセスを有効にするをチェックして手動で試しましたが、期待どおりの出力が得られます。

それで、認証を要求せずにプログラムを介して同じことを行う方法はありますか?また、アプリケーションはrootユーザーとして実行されていませんか?

ありがとう、

Dheeraj。

4

4 に答える 4

6

Applescriptを実行できます(またはApplescriptをScriptingBridgeまたはAppleEvents上のObjective-Cレイヤーに変換します)

これは、私が1つの特定のプロジェクトで使用している、必要なものと同様のことを行うApplescriptです。

on isUIScriptingOn()
    tell application "System Events" to set isUIScriptingEnabled to UI elements enabled
    return isUIScriptingEnabled
end isUIScriptingOn

on turnUIScriptingOn(switch)
    tell application "System Events"
        activate
        set UI elements enabled to switch
    end tell
end turnUIScriptingOn

on run
    if not isUIScriptingOn() then
        display dialog "Enable Access for assistive devices (found in the Universal Access System Preference) must be on for this software to correctly work. This program will enable this setting for you"
        turnUIScriptingOn(true)
        display dialog "Access for assistive devices in now on"
    end if
end run
于 2010-06-01T15:12:34.047 に答える
4

OKy'すべての解決策/いくつかの背景情報はこのアドレスで見つけることができます..

そこで、Appleはこれらの問題を解決する別のソリューションをTigerで考案しました。それは、魔法の関数AXMakeProcessTrustedです。これにより、アプリケーション専用のAPIが有効になり、rootとして実行されているプロセスから呼び出す必要があるため、安全です。。また、すべて自動であるため、ユーザーにパスワードを要求する以外に、ユーザーが行う必要はありません。問題は、誰もそれを使用していないように見えることです。私が見たすべてのサードパーティアプリケーション、そしてAutomatorでさえ、システム環境設定のチェックボックスを手動でチェックするようにユーザーに求めています。実装するのはさらに手間がかかり、文書化されていない大きなバグが1つあります(アプリケーションは実際に信頼される前に再起動する必要があります。更新:#5711990として報告されます)が、実際に人々がそれを使用する必要があると思います。そこで、アプリに簡単に実装できるようにコードをリリースすると思いました。プロジェクトにドロップできるはずのヘルパーエージェントが含まれています。

于 2012-04-29T11:55:29.740 に答える
3

明示的に許可を求めない限り、少なくともユーザーに通知せずにユーザーのシステム設定を変更することは、通常、失礼と見なされます。この設定が必要なほとんどのアプリは、有効になっているかどうかを確認し、有効になっていない場合は、ユーザーに有効にするように指示します。

于 2010-06-01T19:17:43.837 に答える
0

プロセスごとにそれを有効にする方法があります。残念ながら、私はそれが何であるかを知りません、私はこれを行うアプリを持っています、そして私はそれについて何かをココア開発メーリングリストで見たことを思い出すと思います

管理者権限がなくても、プロセスごとに有効にできると確信していますか?はいの場合、すべてのイベントがキャプチャされますか、それともプロセスに属するイベントのみですか?

于 2010-08-09T14:26:27.427 に答える