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

Windows Discussion :

Plusieurs questions sur le développement Windows


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut Plusieurs questions sur le développement Windows
    Tout d'abord bonjour

    Alors en fait, je suis depuis une semaine en train de me plonger sérieusement dans l'api Windows. Et plus généralement le développement Windows.
    Je suis sous Vista.
    ( je précise que je suis étudiant donc loin d'être un connaisseur )
    Cela dit, msdn est assez bien foutu mais beaucoup trop importante pour être tout a fait claire, ce qui fait que je bloque sur plusieurs truc :

    En tout premier lieu :
    - je développe en C / C++ ( vive la fac ) sous minGW. Suis-je limité d'une quelconque façon ? ( même si jusque la gcc s'est montré particulièrement efficace sous Windows je me pose tout de même la question...)

    - je voudrais avoir accès au matériel ( récupérer les température et gérer les ventilos par ex, récupérer les infos de la CG, Carte Son , tout le fratra quoi ) et j'ai vu que "WMI" permettais tout cela ( je met des " car j'ai pas bien saisi ce que c'était ) sauf que je n'ai pas compris comment l'utiliser, y a-t-il une api ou quoi a installer ?

    - dans la même lignée que la question précédente. J'ai vu chez un pote un de ces animaux virtuels qui sont sur votre écran et qui se baladent. Je doit avouer que je suis intrigué, comment peux on faire pour afficher une image qui ne semble pas être dans une fenêtre et semble être toujours au premier plan ?

    - Sur msdn, je voit un peu partout la notion de "COM", qu'est ce que c'est ? Un lien vers un cours ou autre x) ?

    PS : question hors sujet, mais tant que j'y suis :
    CUDA me demande un truc appelé cl.exe c'est quoi ?


    Voila désolé pour ce pavé mais je suis dans une fac ou Linux est même pas roi mais empereur et on risque la pendaison au simple mot "Windows" alors j'ai que ici ou aller demander xD

    Merci de vos réponses.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Bonjour,
    Je n'ai pas les réponses à tout, mais:
    • Je ne connais pas trop les limitations de MinGW, mais dans certains cas, ce sont celles du vieux Visual C++ 6.0 : Notamment, la fonction printf() (et ses sœurs) sont incapables d'afficher un long double de MinGW et les codes pour les types de taille supérieure à 32bits ne sont pas les codes standard).
      De plus, certaines parties de l'API Windows sont manquantes dans le SDK de MinGW, notamment certaines interfaces COM (voir ci-dessous).
    • J'ignore comment marche VMI, mais c'est une partie de Windows. Je ne sais plus si elle peut s'utiliser en tant que fonctions C ou s'il faut utiliser COM (voir ci-dessous) pour cela. S'il s'agit de fonctions C, j'ignore si elles sont déclarées dans le SDK de MinGW.
    • Il y a des "trucs" pour ça. L'un d'eux est la "fenêtre sans bord", qui comme son nom l'indique est une fenêtre déguisée en autre chose. Windows Live Messenger et Windows Media Player sont des exemples, mais Winamp est plus approprié sur ce qu'on peut faire avec. De plus, une fenêtre dite "topmost" est toujours au premier plan (enfin, elle peut être derrière d'autres fenêtres topmost).
    • Au sujet de COM:
      • COM est un standard pour faire de la programmation orientée objet entre différents langages. C'est avec ça qu'on peut, en Visual Basic, utiliser des composants créés en C++, ou inversement.
      • On n'accède jamais à un objet COM directement par son type C++: On passe par des "interfaces" (un peu comme les interfaces java) que l'objet implémente.
      • Ces interfaces gèrent également le cycle de vie des objets, avec un comptage de références intrusif. Dans des langages de haut niveau comme VB on n'a pas à s'en préoccuper, mais en C ou en C++ brut on doit appeler explicitement les fonctions AddRef() et Release() pour jouer sur le compte de références (enfin, en C++, on a des "pointeurs intelligents" pour ça).
      • COM n'est pas .Net : Par contre, il existe des "ponts" dans les deux sens pour utiliser des objets COM depuis .Net ou des objets .Net depuis COM.
      • COM n'est pas RPC : Par contre, un des mécanismes de COM utilise RPC, permettant au même objet COM d'être utilisé depuis plusieurs processus.
      • COM n'est pas limité aux langages orientés objet: Bien que ça ne soit pas toujours évident, on peut utiliser un objet COM depuis un programme en C.
      • Beaucoup de composants de Windows sont exposés en tant qu'objets COM, permettant de les manipuler depuis un programme. Pareil pour Microsoft Office.
    • cl.exe est le compilateur en ligne de commande utilisé par Visual C++.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    He bien c'est pas mal du tout ça.

    Ça comble une bonne partie de ce que j'avais en tête.
    Si d'autres veulent rajouter des éléments de réponse je prend avec joie.

    Merci.

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par Naarshakta Voir le message
    - je développe en C / C++ ( vive la fac ) sous minGW. Suis-je limité d'une quelconque façon ? ( même si jusque la gcc s'est montré particulièrement efficace sous Windows je me pose tout de même la question...)
    Pour les nouvelles API oui.
    VC++ 2008 est en téléchargement gratuit je crois.
    Tu ne peux pas faire de code managed par contre tu peux programmer en win32

    - dans la même lignée que la question précédente. J'ai vu chez un pote un de ces animaux virtuels qui sont sur votre écran et qui se baladent. Je doit avouer que je suis intrigué, comment peux on faire pour afficher une image qui ne semble pas être dans une fenêtre et semble être toujours au premier plan ?
    Tu dois appeler GetDeskTopWindows() pour le HWND du bureau/de l'écran et au besoin
    LockWindowUpdate ()/LockWindowUpdate() .
    GetDesktopWindow Function

    ------

    The GetDesktopWindow function returns a handle to the desktop window. The desktop window covers the entire screen. The desktop window is the area on top of which other windows are painted
    Attention à bien utiliser cette API (LockWindowUpdate) ça verrouille le rafraichissement.
    Ensuite si tu as le HWND , tu as un HDC.
    Si tu veux dessiner en transparence il ya TransparentBlt()
    Je peux te donner un exemple du Peztold sur la programmation win32.
    M'envoyer un mp.

    Sinon il a aussi GetShellWindow()
    - Sur msdn, je voit un peu partout la notion de "COM", qu'est ce que c'est ? Un lien vers un cours ou autre x) ?
    COM c'est me semble-t-il une architecture distribuée, un peu l'ancêtre de .NET et le successeur de OLE-AUTOMATION.
    C'est en quelque sorte l'épine dorsale de la couche applicative de Windows.
    Comme le dit Medinoc cela permet l'intéropérabilité entre les applis Microsoft comme Office,Internet Explorer....
    Tu peux créer un objet COM en C++ une autre application n'a pas besoin de savoir ce qu'il y a dedans; il suffit d'appeler les bonnes méthodes.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Ok, nickel.

    Par contre au sujet des COM, j'ai pas bien saisi comment on pouvais y accéder en C++ ...

    Par exemple j'ai dl le SDK de Windows Media Player qui me fournis des headers.

    J'ai bien saisi que c'etait pas des classes utilisable directement. Mais du coup je voit pas comment on peux les utiliser. Faut un appel système pour "remplir" les classes désirées ? Ou les pointer comme il faut ?

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    CoInitialize() pour utiliser COM.
    CoCreateInstance() pour créer un objet COM. Le header doit déclarer les CLSID des classes COM disponibles, et les IID des interfaces qu'elles implémentent.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par Naarshakta Voir le message
    Par exemple j'ai dl le SDK de Windows Media Player qui me fournis des headers.

    J'ai bien saisi que c'etait pas des classes utilisable directement. Mais du coup je voit pas comment on peux les utiliser. Faut un appel système pour "remplir" les classes désirées ? Ou les pointer comme il faut ?
    Normalement Microsoft fournit toujours des exemples avec ses SDK.
    L'éditeur est souvent dénigré mais je trouve que ses SDK sont assez complets.
    Avec le SDK de Direct X il y a plein d'exemples donc tu dois trouver des exemples avec le SDK de Windows Media Player..
    Il faut appeler les fonctions données par Medinoc ( CoInitialize....)

    Sinon pour le screen mate j'ai trouvé une autre méthode c'est de dessiner une fenêtre transparente avec SetLayeredWindowAttributes et de dessiner soit une bitmap avec TransparentBlt soit avec le GDI.
    Ca marche j'ai commencé à programmer quelque chose je te l'enverrai quand j'aurais fini.
    Si cela intéresse aussi d'autres personnes..
    sinon avec GetDesktopWindow cela fonctionne aussi mais je n'arrive pas à effacer le sprite à l'écran
    .

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Ok, j'ai maté CoInitialize() sur msdn, et ya effectivement des exemples dans le sdk sry x)

    Mais j'ai l'impression que je viens de toucher les limites de minGW vu qu'il reconnais pas certaines instructions de wmp.h ...

    Jvais installer Visual voir ce que ca donne.

    Mar.M > ca m'interresse x) j'ai aussi utilisé SetLayeredWindowAttributes personnellement.

    +

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut
    pour WMI on utilise des interfaces COM.
    Faq Win32
    http://windows.developpez.com/faq/wi...=environnement
    Faq COM
    http://windows.developpez.com/faq/dcom/
    Tuto WMI
    http://laurent-dardenne.developpez.com/articles/wmi-p1/

    Pour
    accès au matériel ( récupérer les température et gérer les ventilos par ex, récupérer les infos de la CG, Carte Son ,
    Pas sûr que cela soit possible sous toutes les versions de Windows et que toutes les cartes-mére propose des classe pour gérer ces aspects-là.
    Dans ce cas, j'ai bien peur qu'il faille passer par le hard...

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Super les liens, jvais y passer l'apres midi encore xD

    Mais quand tu dit passer par le hard ... ?
    Assembleur c'est ca ?

  11. #11
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Naarshakta Voir le message
    Mais quand tu dit passer par le hard ... ?
    Assembleur c'est ca ?
    Pas forcément j'aurais dû utiliser l'expression bas niveau, étant donné que WMI encapsule des API dites de "bas-niveau" et masque une certaine compléxité.
    Consulte ce post par exemple. Cela ne correspond peut être pas à ton besoin mais te donnera qq pistes.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Ok, alors après maintes batailles contre Visual et le SDK de Microsoft, ( il a perdu ) j'ai réussi a utiliser les classes WMI. Mais etant donné que la moitié ne sont pas utilisable et que c'est justement cette moitié qui est interressante.

    Je déconseille a tous l'utilisation de WMI.
    Jvais aller voir le post histoire d'avoir des idées paske du coup la j'ai plus aucune piste quoi. Si qqn a une idée x)

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Bon alors je sais que pas mal de gens cherchent comment récupérer la température du processeur.

    J'ai pas trouvé comment le faire directement ( la classe WMI pour les températures est inutilisable ) mais j'ai trouvé un petit soft : CoreTemp qui fournit une librairie pour récupérer la mémoire partagée du soft qui contiens les températures les charges des cores le nom toussa .

    Alors le truc ennuyeux c'est qu'il faut que le soft soit lancé pour avoir accès aux températures, on sais pas comment c'est foutu blabla. mais bon ca peux toujours servir.

Discussions similaires

  1. plusieurs questions sur formulaire de contact
    Par pp51 dans le forum Langage
    Réponses: 7
    Dernier message: 13/06/2006, 13h24
  2. Plusieurs questions sur Samba sous Ubuntu
    Par Niktou dans le forum Réseau
    Réponses: 12
    Dernier message: 12/02/2006, 15h45
  3. Question sur les services windows
    Par bilb0t dans le forum Windows
    Réponses: 8
    Dernier message: 09/11/2005, 15h31
  4. Réponses: 15
    Dernier message: 18/01/2005, 23h18
  5. Réponses: 4
    Dernier message: 11/09/2004, 16h38

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