IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apple Discussion :

[DEV] Portage d'une application Win32


Sujet :

Apple

  1. #1
    Candidat au Club
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut [DEV] Portage d'une application Win32
    Bonjour à tous.

    Pour me présenter rapidement, je suis un jeune analyste programmeur d'une vingtaine d'années. Je connais le C/C++, l'assembleur x86 z80 PIC et AVR, le PHP&MySQL, le C# et le JAVA, principalement. J'ai utilisé ces langages sur PC sous Windows et Linux. Mais aujourd'hui, il me faut travailler sur une plate-forme Apple : MAC OS X.

    Je me dois de porter une application Windows développée en C++, sous MAC OS X, et je me rebute à quelques fonctions du systèmes.

    La première fonction dont j'aurais besoins, et je penses qu'elle doit être assez simple, est l'équivalent de la fonction Win32 MessageBoxA.

    La seconde, un peu plus proche du système, est celle qui me permettrait d'envoyer des commandes claviers au système. C'est à dire une fonction à laquelle je peux passer le scancode de la touche POMME avec celui de la touche TAB (il s'agit d'un exemple... of course), tout comme celui de la touche z.

    Enfin, pour compléter, il me faudrait une fonction capable de transformer n'importe quelle chaîne (char str[] = "toto\0" en un tableau de codes touches.

    Le programme étant en C++, pour faire cela sous Windows j'ai utilisé un std::vector d'objets perso ScanCodes tout à fait compatibles MAC. Seule la fonction de conversion serait à réécrire, idéalement que partiellement.


    D'avance, merci beaucoup

  2. #2
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Tu utilises quelle API sous Mac OS X ? (Carbon, Cocoa ?)

    En fonction de ça tu peux assez facilement afficher une boîte de dialogue.

    Et pour récupérer les touches du clavier, tu as besoin de mettre en place un système de gestion des événements, et pour ça il faut connaître l'API dont tu te sers.

    Enfin, pour compléter, il me faudrait une fonction capable de transformer n'importe quelle chaîne (char str[] = "toto\0" en un tableau de codes touches.
    Alors là bonne chance, en particulier pour les différents codes selon la configuration du clavier .

  3. #3
    Candidat au Club
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci pour cette réponse.

    Pour l'instant mon code n'utilise ni Cocoa, ni Carbon.

    Concernant les MessageBox j'ai réussi une fonction de la librairie Carbon (CreateAlerte de mémoire), qui faisait chose identique.

    Mais je ne trouve rien sur la création d'évènement clavier.

    Enfin pour la fonction qui converti chaine en tableau d'objet d'évènement clavier, je supposes qu'il est possible de récupérer le mappage du clavier ? De toute façon, j'ai pas l'intention de gérer des combinaisons de touches trop exotiques.

    En tout cas, merci beaucoup de votre coup de main.

  4. #4
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    La récupération des événements implique une boucle de gestion de ces événements (qui ne sont pas forcément uniquement des événements clavier), et là tu retombes dans le schéma classique d'une appli de bureau, et tu peux trouver assez facilement des exemples que ce soit avec Carbon ou Cocoa (cocoa / carbon event handling dans google).

    Citation Envoyé par ludoprgrm
    Enfin pour la fonction qui converti chaine en tableau d'objet d'évènement clavier, je supposes qu'il est possible de récupérer le mappage du clavier ?
    À priori oui, mais ce n'est pas forcément simple, et de ce que j'en sais, tu devras pour ça te servir de fonctions de Carbon (voir KeyTranslate() dans Carbon Event Manager.pdf), car Cocoa ne me semble pas permettre une gestion aussi bas niveau.

  5. #5
    Candidat au Club
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    La récupération des événements implique une boucle de gestion de ces événements (qui ne sont pas forcément uniquement des événements clavier
    Merci pour l'URL du PDF cela va m'être très utile.

    En revanche, pour mon problème, ce n'est pas l'écoute d'événement qui m'est compliqué, en fait je n'en même pas besoin, c'est pour une sorte de DLL qui n'a aucune interface graphique.

    Ce que je veux faire, c'est envoyer au système un événement clavier du style POMME+L. La DLL que je fais est en fait un plugin pour un logiciel dont on ne peut accéder à certaines fonctionnalités QUE par raccourcis claviers.

    La fonctionnalité que je vise à développer ouvre une fenêtre via un raccourci clavier, puis dois naviguer dans la boite de dialogue ainsi ouverte pour y écrire deux chaines :
    • La première est libre, et pourrais contenir n'importes quels caractères affichables
    • La seconde est un chemin vers un fichier vers le réseau.


    S'il y a possibilité d'accéder à des textboxs, pour y faire directement une sorte de SetDlgItemText JE SUIS VRAIEMENT PRENEUR. Je devrais également, probablement, sélectionner le premier élément dans une zone de liste, et simuler le clic sur des boutons.

    En fait, l'AppleScript répondrait parfaitement à mes attentes s'il n'était pas aussi lent, et interceptible par l'utilisateur.

    S'il y a moyen de réaliser la même chose en C++ qu'en AppleScript, et ce de manière quasi-instantanée (en terme de temps d'exécution), je n'aurais plus à me casser la tête. Le tout étant de pouvoir remplir des champs dans des boites de dialogue de manière cohérente (que le système ignore les actions de l'utilisateur en gros pendant l'opération).

    Merci encore de m'éclairer ^^

  6. #6
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Citation Envoyé par ludoprgrm Voir le message
    [...] c'est pour une sorte de DLL qui n'a aucune interface graphique.
    Citation Envoyé par ludoprgrm Voir le message
    La fonctionnalité que je vise à développer ouvre une fenêtre via un raccourci clavier, [...]
    Faut que tu m'expliques là .

    Et je ne crois pas que tu puisses définir un raccourci clavier général sans demander à l'utilisateur de le configurer lui-même (puisque que tu ne veux pas (a)voir d'application).

    Ce qui me semble le plus approprié dans ton cas serait un service (cf. menu de n'importe quelle application > Services). Voir System Services.

    Citation Envoyé par ludoprgrm Voir le message
    En fait, l'AppleScript répondrait parfaitement à mes attentes s'il n'était pas aussi lent, et interceptible par l'utilisateur.
    Comment tu ferais avec AppleScript ?

  7. #7
    Candidat au Club
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Le raccourci clavier est déjà défini par l'application que je cherche à contrôler ! Ma sorte de DLL est un plugin, si je ne l'ai pas déjà dit.

    En AppleScript, ce serait (algorithmiquement, je suis sur mon PC là, et je ne connais absolument pas le langage par coeur) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ###### TOUT CE BLOC POURRAIT ETRE REMPLACE PAR UN RACCOURCI CLAVIER ET UNE COMMANDE DU GENRE keystroke (ASCII character 31) using command down ######
    click menu item "MenuItem utile" of item "Fichier" of menu 1
    ##########################################
    click button "New"
    set text item 0 to ma_variable0
    set text item 1 to ma_variable1
    click button "OK"
    Bon c'est approximatif, je n'ai pas le projet sous les yeux là.

    L'AppleScript est fait est fonctionne parfaitement. Le problème est dû à la faible sécurité de ce procédé : déjà que le process est lent pour ce qu'il fait, mais, de plus, l'utilisateur peut intervenir pendant les opérations, et pourrait ainsi provoquer de grosses incohérences de données. Voilà pourquoi je dois faire cela en C++ : pour que ce soit instantané, et fiable.

    En tout cas merci.

  8. #8
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Ce que je voulais dire c'est, comment est-ce tu captes l'entrée de l'utilisateur avec AppleScript ?

  9. #9
    Candidat au Club
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Je ne la capte pas, je la génère ! Je stockerais mes données utiles dans des variables.

    Tu ne vois toujours pas ce que je veux faire ?

  10. #10
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Ben je vois pas comment ton programme est déclenché.

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut

    La première fonction dont j'aurais besoins, et je penses qu'elle doit être assez simple, est l'équivalent de la fonction Win32 MessageBoxA.
    Je ne connais pas bien Win32, mais il me semble que l'équivalent Cocoa est NSAlert (dialogue modal dans une nouvelle fenetre).


    Pour les évenements claviers, je l'avais fait en utilisant CGEventPost/CGPostKeyboardEvent (cf. Quartz Events Services Reference) si j'ai bonne mémoire.

    Apparement dans ton cas AppleScript semble interessant aussi si il peut directement définir le contenu d'un champ.
    Voilà pourquoi je dois faire cela en C++ : pour que ce soit instantané, et fiable.
    C'est plus compliqué que ça
    Les delais que tu observes sont à mon avis en grosse partie liée à l'architecture même des AppleEvents. Cela dit tu peux toujours essayer de poster ces events avec l'API C qui correspond (cf. Apple Events Programming Guide). Depuis 10.5, il y a également le Scripting Bridge qui permet d'utiliser l'architecture d'applescript avec Objective-C. Tu peux jeter un œil de ce côté là...

    Si tu es nouveau sur la plateforme Mac OS X, n'hésite pas à fouiller dans les docs d'Apple et les Sample Code qui sont plutôt bien fournis Tu peux les trouver sur developer.apple.com ou dans /Developer/Examples après avoir installé XCode.

  12. #12
    Candidat au Club
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Je programme effectivement sûr de l'os x 10.5 mais je voudrais que la solution reste compatible avec des versions antérieures. De plus je souhterais rester en c++ car l'objective-c n'est pas ma tasse de thé ...

    Merci en tout cas, bonne journée !

  13. #13
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Citation Envoyé par ludoprgrm Voir le message
    Je programme effectivement sûr de l'os x 10.5 mais je voudrais que la solution reste compatible avec des versions antérieures. De plus je souhterais rester en c++ car l'objective-c n'est pas ma tasse de thé ...

    Merci en tout cas, bonne journée !
    Et ?

  14. #14
    Candidat au Club
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Et bien dans ce cas là, l'objective-c n'est pas la solution.

    Il me faudrait tout pouvoir faire en C++

    Je vais avaler toute la doc que vous me conseillez et je verrais bien.

    Merci !!

Discussions similaires

  1. Creation d'une application Win32
    Par ksoft dans le forum MFC
    Réponses: 6
    Dernier message: 03/05/2006, 13h40
  2. Réponses: 2
    Dernier message: 02/05/2006, 21h47
  3. Réponses: 4
    Dernier message: 19/04/2006, 14h19
  4. portage d'une application à un téléphone portable?
    Par ryosnake dans le forum Développement Mobile en Java
    Réponses: 1
    Dernier message: 13/03/2006, 09h38
  5. Portage d'une application MFC sous Linux/Unix
    Par farscape dans le forum MFC
    Réponses: 29
    Dernier message: 20/02/2006, 17h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo