2

ログイン時に自動的に開く必要がある Xamarin.Mac アプリがあります。手動でクリックせずにアプリケーションにこの設定を取得させるにはどうすればよいですか?

UI の [ログイン時に開く] のスクリーンショット

4

2 に答える 2

0

LSSharedFileList ライブラリは Xamarin.Mac ではサポートされていないため、Xcode で dylib を作成し、Xamarin.Mac アプリケーションにバインドする必要があります。

1) Xcode で Dylib プロジェクトを作成します。この機能を追加します。

-(BOOL)AddLoginItem:(NSString *) AppPath{
 // Your have to send this string as argument(i.e: on a textbox, write: /Applications/Calculator.app/)

 // Get Login Items
 LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);

        if (loginItems) {

            NSLog(@"[DEBUG]Your Application Path:%@",AppPath);

            // Covert String to CFURLRef (It adds "file://" to your itemUrl1)
            CFURLRef appUrl = (__bridge CFURLRef)[NSURL fileURLWithPath:(NSString*) AppPath];

            NSLog(@"[DEBUG] appUrl:%@", appUrl);

            // Now we add the requested Login Item
            LSSharedFileListItemRef itemRef = LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemLast, NULL, NULL, appUrl, NULL, NULL);

            // Confirm that your path was correct and that you got a valid Login Item Reference
            NSLog(@"[DEBUG]Item:%@", itemRef);

            if (itemRef) CFRelease(itemRef);

            // Your item just got added to the user's Login Items List
            CFRelease(loginItems);
            return true;

        }
   return false;
}

2) TextBox、プッシュ ボタン、およびそのアクションとアウトレット コントロールを含む Cocoa プロジェクトを作成します。このリンクを使用して、objective-c DLL からの C# バインディングを支援します。

3) Xamarin.Mac プロジェクトの MainWindow.cs で、次のコードを追加し、コードに合わせて必要な変更を加えます。前のリンクで作成した .Net Assembly 参照を追加することを忘れないでください。ライン。

 // Some variables
 private string TestItemName;
 private bool rem;

 // Button Click
    partial void AddItemButton (Foundation.NSObject sender) {

        LoginItemsDLL loginItem = new LoginItemsDLL();
        // Enter this string on your TextBox TxtName /Applications/Calculator.app/
        TestItemName = TxtName.StringValue;
        rem=loginItem.AddLoginItem(TestItemName);
        Console.WriteLine(rem);
    }

アプリケーション パスを入力するには、アプリケーション名を受け取り、そのパスを AddLoginItem 引数に返す別の関数を使用します。それが役に立てば幸い!

于 2015-11-06T12:24:58.477 に答える