Table des matières du Kit d'Application | Index du Kit d'Application |
Hérité de : aucun
Déclaré dans : be/app/Roster.h
Bibliothèque : libbe.so
L'objet BRoster représente un service chargé de conserver la liste de toutes les applications en cours d'exécution. Il peut fournir des informations sur chacune de ces applications, en activer une, ajouter une autre application à la liste en la lançant, ou encore donner des informations sur une application pour vous aider à décider de la lancer ou non.
Il n'y a qu'une liste (roster), partagée par toutes les applications. Lorsqu'une application démarre, un objet BRoster est construit et assigné à une variable globale, be_roster. Vous pouvez toujours accéder à la liste via cette variable ; il n'est jamais nécessaire d'instancier un BRoster dans le code des applications.
Le BRoster identifie les applications de trois manières :
Lorqu'une application est lancée plus d'une fois, la liste comprend une entrée pour chaque instance de l'application active. Ces instances ont la même signature, mais des identifiants de team différents.
|
Met en place la connexion de l'objet au service de liste (roster).
Quand une application construit son objet BApplication, le système construit un objet BRoster et l'assigne à la variable globale be_roster . Un BRoster est donc disponible dès l'initialisation de l'application jusqu'à l'instant où elle se termine ; Il n'est pas nécessaire de construire un Broster. Le constructeur est public pour donner accès à la liste aux programmes qui ne disposent pas d'objets BApplication.
|
Ne fait rien.
|
Active la team de l'application (en faisant passer une de ses fenêtres au premier plan, qui devient la fenêtre active). Cette fonction n'est effective que si l'application cible dispose d'une fenêtre à l'écran. L'application récemment activée est avertie par un message B_APP_ACTIVATED .
Voir aussi : BApplication::AppActivated()
|
AddToRecentDocuments() ajoute à la liste des documents récents le document spécifié par document. Si vous souhaitez enregistrer qu'une application spécifique a utilisé le document, vous pouvez spécifier la signature de cette application en utilisant l'argument appSig ; sinon vous spécifierez NULL.
GetRecentDocuments() retourne la liste des documents les plus récents. La BMessage refList sera constituée des informations concernant les maxCount documents les plus récemment utilisés. Si vous souhaitez obtenir la liste des documents d'un type spécifique, vous pouvez spécifier un pointeur vers la chaîne de caractère du type MIME désiré dans l'argument ofType. De même, si vous êtes uniquement intérressé par les fichiers demandant à être ouverts par une application spécifique, spécifiez la signature de cette application dans openedByAppSig ; sinon, passez NULL.
Si vous voulez obtenir une liste de fichiers de divers types, vous pouvez spécifier un pointeur sur un tableau de chaînes de caractère dans ofTypeList, et le nombre de types dans la liste dans ofTypeListCount.
Spécifier NULL pour ofType retouve tous les fichiers pour tous les types.
La refList résultante possédera un champ, "refs", contenant les entry_refs vers les fichiers de la liste.
|
AddToRecentFolders() ajoute à la liste des dossiers récents le dossier spécifié par folder. Si vous souhaitez enregistrer qu'une application spécifique a utilisé le dossier, vous pouvez spécifier la signature de cette application en utilisant l'argument appSig ; sinon vous spécifierez NULL.
GetRecentFolders() retourne la liste des dossiers les plus récemment accédés. La BMessage refList contiendra des informations sur les maxCount dossier les plus récemment utilisés. Si vous êtes uniquement intéressé par les dossiers qui ont été utilisés par une application spécifique, spécifiez la signature de cette application dans openedByAppSig ; sinon, passez NULL.
La refList résultante possédera un champ, "refs", contenant les entry_refs vers les dossiers de la liste.
|
Envoie un message vers chaque application active, à l'exception des applications (B_ARGV_ONLY) qui n'acceptent pas les messages. Le message est envoyé en mode asynchrone avec un timeout de 0. Comme c'est le cas pour les autres fonctions émettrices de messages, l'appelant reste propriétaire du message.
Cette fonction effectue son retour immédiatement après mise en place de l'opération de diffusion générale (broadcast). Elle n'attend pas que les messages soient envoyés et ne retourne aucune erreur s'il s'en rencontre. Elle retourne une erreur uniquement dans le cas où l'opération de broadcast ne peut démarrer. Si le démarrage de l'opération est un succès, elle retourne B_OK.
Les réponses au message broadcast seront envoyées via le reply_to BMessenger, s'il est spécifié. Si reply_to est absent, les réponses seront perdues.
Voir aussi : BMessenger::SendMessage()
|
Trouve l'application associée au type de donnée MIME ou au file spécifié, et modifie la structure app entry_ref de telle sorte qu'elle référence le fichier exécutable de cette application. Si le type est une signature d'application, cette fonction retrouve l'application qui possède cette signature. Sinon, elle retrouve l'application préférée pour le type. Si le file est un exécutable, FindApp() copie simplement la référence du fichier dans l'argument app. Sinon, elle retrouve l'application préférée pour le type de fichier.
Autrement dit, cette fonction retrouve une application de la même manière que Launch() trouve l'application à lancer.
Si elle peut translater le type ou le file en une référence à un exécutable, FindApp() retourne B_OK. Sinon, elle retourne un code erreur, typiquement un code décrivant une erreur de système de fichier.
Voir aussi : Launch()
|
Ces fonctions retournent (dans appInfo) des informations sur une application spécifique. Dans tous les cas, l'application doit être en cours d'exécution.
Si ces fonctions se révèlent capables de remplir la structure app_info avec des valeurs signifiantes, elles retournent B_OK. GetActiveAppInfo() retourne B_ERROR s'il n'y a pas d'applications actives. GetRunningAppInfo() retourne B_BAD_TEAM_ID si team n'est pas l'identifiant d'une application en cours d'exécution. GetAppInfo() retourne B_ERROR si l'application n'est pas en cours d'exécution.
La structure app_info contient les champs suivants :
thread_id thread
Identifiant du thread principald'exécution de l'application
, ou –1 si l'application n'est pas en cours d'exécution. (Le thread principal est le thread
à partir duquel l'application est lancée et dans lequel s'exécute sa fonction
main().)
team_id team
Identifiant de la team de l'application, ou –1 si l'application n'est pas en cours d'exécution.
(C'est la même chose que la team passée à GetRunningAppInfo().)
port_id port
Port où le thread principal de l'application
reçoit les messages, ou –1 si l'application n'est pas en cours d'exécution.
uint32 flags
Masque contenant des informations sur le
comportement de l'application.
entry_ref ref
Référence au fichier qui était, ou pourrait
être, exécuté pour activer l'application. (C'est la même chose que l'executable passé à GetAppInfo().)
char signature[]
Signature de l'application.
(C'est la même chose que la signature passée à GetAppInfo().)
Le masque flags peut être testé (grâce à l'opérateur de bits & ) par deux constantes :
Le masque flags contient également une valeur expliquant le comportement de l'application au lancement. Cette valeur doit être filtrée de flags en combinant flags avec la constante B_LAUNCH_MASK . Par exemple :
unit32 behavior = theInfo.flags & B_LAUNCH_MASK;
Le résultat correspondra à une de ces trois constantes :
Ces flags affectent la fonction Launch() de BRoster. Launch() peut toujours démarrer une application B_MULTIPLE_LAUNCH . En revanche, elle ne peut lancer une application B_SINGLE_LAUNCH si une application active a déjà été lancée à partir du même exécutable. Elle ne peut lancer une application B_EXCLUSIVE_LAUNCH si une application de même signature est déjà en cours d'exécution.
Voir aussi : Launch(), BApplication::GetAppInfo()
|
Remplit la teams BList par les identifiants de team des applications contenues dans le roster. Chaque élément de la liste est du type team_id. L'élément doit être forcé (cast) à ce type lorsqu'il est récupéré de la liste, comme suit :
BList *teams = new BList; be_roster->GetAppList(teams); team_id who = (team_id)teams->ItemAt(someIndex);
La liste contient un élément pour chaque instance d'une application active. Par exemple, si la même application a été lancée trois fois, la liste inclut les team_id de chaque instance active de cette application.
Si une signature est passée, la liste identifie uniquement les applications s'exécutant sous cette signature. Si aucune signature n'est spécifiée, la liste identifie toutes les applications en cours d'exécution.
Voir aussi : TeamFor(), le constructeur BMessenger.
|
GetRecentApps() retourne la liste des applications les plus récemment lancées. La BMessage refList contient des informations sur les maxCount applications les plus récemment lancées.
La refList résultante possède un champ, "refs", contenant les entry_refs des applications résultantes.
|
Lance l'application associée à un type MIME ou à un file particulier. If le type MIME est une signature d'application, cette fonction lance l'application de cette signature. Sinon, elle lance l'application préferée pour ce type. Si le file est un exécutable, elle lance l'application. Sinon, elle lance l'application préférée pour ce type de fichier et passe la référence du file à l'application via un message B_REFS_RECEIVED . Autrement dit, Launch() trouve l'application à lancer comme FindApp() retrouve une application pour un type ou un file particulier.
Si un message est spécifié, il sera envoyée à l'application en cours de lancement où il sera reçu et répondu avant qu'il soit notifié à l'application de démarrer. De manière identique, si une liste de messages est spécifiée, chacun sera remis au lancement. L'appelant reste propriétaire des objets BMessage (et du container BList) ; ils ne seront pas détruits pour vous.
C'est une bonne idée d'envoyer un message au lancement si cela aide l'application à se configurer elle-même avant démarrage en obtenant d'autres messages. Pour lancer une application et lui envoyer un message ordinaire, appeler Launch() pour la lancer, positionner ensuite un objet BMessenger pour l'application et appeler la fonction SendMessage() de BMessenger.
Si l'application cible est déjà active, Launch() ne la relance pas, sauf si elle autorise des instances multiples à s'exécuter concurremment (elle n'attend pas la délivrance des messages ni ne rend compte des erreurs rencontrées le cas échéant). Elle échoue pour les applications B_SINGLE_LAUNCH ou B_EXCLUSIVE_LAUNCH qui ont déjà été lancées. De toute façon, elle suppose que vous voulez que les messages parviennent à l'application et donc les délivre à l'instance active en cours.
Au lieu de messages, vous pouvez lancer une application avec des arguments dans un tableau de chaînes de caractères qui sera passé à sa fonction main(). argv contient le tableau et argc compte le nombre de chaînes de caractères. Si l'application accepte les messages, ces informations seront également placées dans un message B_ARGV_RECEIVED que l'application recevra au lancement.
En cas de succès, Launch() place l'identifiant de l'application nouvellement lancée dans la variable référencée par team et retourne B_OK. En cas d'échec, elle positionne la variable team à –1 et retourne un code erreur, typiquement un des suivants :
Voir aussi : la classe BMessenger , GetAppInfo(), FindApp()
|
StartWatching() initialise le surveillant (monitor) d'évènements d'application, qui est utilisé pour garder les traces d'évènements tels que les lancements d'application. L'appelant spécifie les évènements à surveiller via l'argument events ; target est le BMessenger vers lequel sont envoyées les notifications de messages correspondantes. Les flags events et les messages correspondants sont listés ci-après :
Flag | Message |
---|---|
B_REQUEST_LAUNCHED | B_SOME_APP_LAUNCHED |
B_REQUEST_QUIT | B_SOME_APP_QUIT |
B_REQUEST_ACTIVATED | B_SOME_APP_ACTIVATED |
Les champs du message de notification décrivent l'application lancée, quittée ou activée :
Field | Type | Description |
---|---|---|
"mime_sig" | B_STRING_TYPE | MIME signature |
"team" | B_INT32_TYPE | team_id |
"thread" | B_INT32_TYPE | thread_id |
"flags" | B_INT32_TYPE | application flags |
"ref" | B_REF_TYPE | executable's entry_ref |
StopWatching() met fin au surveillant d'application initialisé préalablement pour un BMessenger donné.
|
Ces deux fonctions déterminent si l'application identifiée par sa signature ou par une référence à son fichier executable est en cours d'exécution. TeamFor() retourne son identifiant de team s'il existe, ou B_ERROR s'il n'existe pas. IsRunning() retourne true si c'est le cas, ou sinon false.
Si l'application est en cours d'exécution, vous voudrez probablement un identifiant de team (pour positionner un BMessenger, par exemple). Dans ce cas, il est plus rentable d'appeler simplement TeamFor() et d'oublier IsRunning().
Si plus d'une instance de l'application signature sont en cours d'exécution, ou si plus d'une instance ont été lancées à partir du même fichier executable, TeamFor() sélectionne arbitrairement une des instances et retourne son team_id.
Voir aussi : GetAppList()
Table des matières du Kit d'Application | Index du Kit d'Application |
Copyright © 2000 Be, Inc. All rights reserved..