Modifier l'heure de démarrage/activation du mac

iNathiNath Membre
Bonjour,

je suis nouveau dans le monde du développement sur mac.

J'ai besoin pour une application de modifier l'heure d'activation du mac, celle que l'on peut modifier via l'interface dans Préférences Système > à‰conomiseur d'énergie > Programmer...

Je me suis penché sur plusieurs solutions :
- via un AppleScript utilisant System Events : trop instable à  mon goût
- en allant directement modifier le fichier /Library/Preferences/SystemConfiguration/com.apple.AutoWake.plist : ça me semble bizzar...

et puis je me suis dis qu'il y avait peut-être une solution beaucoup plus simple et donc me voilà  :D je vous le demande.

Dans la doc, je suis tombé sur "Power Manager Reference" de CoreServices (si j'ai bien compris) avec des fonctions comme SetStartupTimer ou SetWakeupTimer mais elles sont dépréciées et je n'ai pas vraiment compris à  quoi elles correspondaient...

J'espère que vous avez compris mon problème et que vous pourrez m'aider. Merci ;)

Réponses

  • muqaddarmuqaddar Administrateur
    23:17 modifié #2
    En attendant que quelqu'un te réponse, bonjour et bienvenue à  toi !
    Tu peux aller te présenter dans le salon.


  • DrakenDraken Membre
    23:17 modifié #3
  • laudemalaudema Membre
    23:17 modifié #4
    dans 1295799838:

    elles sont dépréciées et je n'ai pas vraiment compris à  quoi elles correspondaient...

    Peut être sont elles difficiles à  comprendre dans l'environnement actuel. Souvent quand une fonction est dépréciée la remplaçante est indiquée. Ici il est conseillé d'aller voir l' I/O kit et plus particulièrement la gestion de l'alimentation, il y a un chapà®tre qui semble t'attendre là  bas http://developer.apple.com/library/mac/#DOCUMENTATION/DeviceDrivers/Conceptual/IOKitFundamentals/PowerMgmt/PowerMgmt.html

    dans 1295799838:

    J'espère que vous avez compris mon problème et que vous pourrez m'aider. Merci ;)

    Aucune idée car je ne sais pas pourquoi tu veux contrôler ça, ici les instructions semblent données dans le but de gérer un pilote, pas forcément ce que tu cherches.
    Mais peut être as tu trouvé depuis ?
  • iNathiNath Membre
    23:17 modifié #5
    @laudema: c'est ce que je me disais aussi mais je ne comprenais pas trop, mais effectivement ça ne semble pas correspondre à  ce que je cherche.

    En tout cas, j'ai trouvé quelque chose dans le framework IOKit :
    IOPMCopyScheduledPowerEvents
    IOPMSchedulePowerEvent

    Avec ça je peux récupérer les valeurs et les modifier.

    Par contre, pour la 2eme fonction il faut être en root, donc apparemment créer un bundle qui s'exécutera en root si j'ai bien compris. J'ai trouvé un code d'exemple mais je ne comprends pas bien la création du bundle. Je pense que je reviendrais à  la charge dans un nouveau topic pour trouver de l'aide à  ce propos.

    Voilà , merci à  vous en tout cas 

    Bye

    PS: je suis allé me présenter :D
  • AliGatorAliGator Membre, Modérateur
    23:17 modifié #6
    Pour exécuter des trucs avec les privilèges root :
    Secure Coding Guide : Elevating Privileges Safely en particulier Factorying Applications
  • iNathiNath Membre
    23:17 modifié #7
    J'étais parti pour utiliser ça, mais je n'avais pas lu cette partie de la doc. Et ça me confirme donc que c'est cette technique qu'il faut que j'utilise. Apparemment c'est assez difficile de mettre tout ça en place, c'est ce qu'ils disent dans la doc...

    Je me suis donc lancé dans tout ça. Mais voilà  qu'un obstacle s'est déjà  dressé :s

    Ma question est :
    comment fait-on pour avoir un exécutable dans notre application accessible à  l'aide de la classe NSBundle, c'est à  dire qui se trouve dans /MonApp.app/Contents/Resources/

    J'ai créé un fichier helper.m qui essaye d'écrire dans un fichier dont je n'ai pas les droits, seul l'admin les a.

    J'ai créé une nouvelle target appelée helper en choisissant dans la catégorie Cocoa : Shell Tool. J'ai ensuite indiqué que cette target serait la cible de mon helper.m. Et en effet quand je build et que j'éxécute l'exécutable helper une fenêtre terminale s'ouvre et affiche le résultat attendu soit "Permission denied" .

    Cependant, cet exécutable n'est pas dans mon répertoire Ressources/ de mon application, ce qui a pour conséquence que quand j'ai cette ligne de code dans mon application :
    NSBundle *thisBundle = [NSBundle mainBundle];<br />	char * helperPath =(char*) [[thisBundle pathForResource:@&quot;helper&quot; ofType:nil] UTF8String];<br />	<br />	NSLog(@&quot;thisBundle : %@, helperPath: %s&quot;, thisBundle, helperPath);//helperPath vaut null
    

    je m'aperçois que helperPath vaut null. Et donc je ne peux pas tester la fonction AuthorizationExecuteWithPrivileges() :(

    Merci d'avance ;)
Connectez-vous ou Inscrivez-vous pour répondre.