Partage
  • Partager sur Facebook
  • Partager sur Twitter

API windows

où la trouver ?

    19 avril 2006 à 15:58:38

    Voilà, je cherche à télécharger la librairies API Windows, et quelle n'est pas ma surprise de voir que google ne me propose aucun site où la télécharger !!
    Alors, si quelqu'un connait un site ?
    Ou bien est-ce que cette librairies serait payante ? o_O

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      19 avril 2006 à 16:01:51

      L'API Win32 et 'dans' WINDOWS ;)

      P.S. On dit UN API WIN32 :-°
      • Partager sur Facebook
      • Partager sur Twitter
        19 avril 2006 à 16:06:11

        Ahhhhh merci, et où puis-je trouver la doc ?
        • Partager sur Facebook
        • Partager sur Twitter
          19 avril 2006 à 16:12:47

          Citation : PianoPâriss

          L'API Win32 et 'dans' WINDOWS ;)

          P.S. On dit UN API WIN32 :-°



          Définition d'une API, dommage PianoPâriss ;)

          Sinon pour la doc de l'API WIN32 http://msdn.microsoft.com/library/fre/, j'ai pas trouvé le point d'entrée exact.
          • Partager sur Facebook
          • Partager sur Twitter
            19 avril 2006 à 18:21:09

            Kayl ==> Pour une API ?
            ah oui , m*rde , je croyais qu'on disait un API .

            A++ ^^
            • Partager sur Facebook
            • Partager sur Twitter
              19 avril 2006 à 18:32:50

              Citation : PianoPâriss

              Kayl ==> Pour une API ?
              ah oui , m*rde , je croyais qu'on disait un API .


              I comme interface : Une interface...
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                19 avril 2006 à 18:45:18

                Oui, "application programming interface" , j'suis bête :p
                • Partager sur Facebook
                • Partager sur Twitter
                  19 avril 2006 à 19:20:11

                  Citation : Pierre89

                  Voilà, je cherche à télécharger la librairies API Windows, et quelle n'est pas ma surprise de voir que google ne me propose aucun site où la télécharger !!
                  Alors, si quelqu'un connait un site ?
                  Ou bien est-ce que cette librairies serait payante ? o_O


                  Oui, à chaque fois que tu achètes une licence Windows...

                  L'API Win32 est constituée, pour bonne part, de DLL présentes sur ta machine (user.dll etc.) utilisées en permanence par le système et les applications. Par contre, l'interface C (les .h) n'est pas livrée avec le système. (Evidemment, pourquoi plus C que C++, C#, VB, Delphi, assembleur ou n'importe quoi d'autre...).

                  Donc, il est de la responsabilté de ton environnement de développement de fournir l'interface. Le header principal étant <windows.h> (quelle surprise !).

                  Si tu as Code::Blocks (qui utilise MinGW), l'interface (l'ensembles des .h) est fourni avec MinGW (codeblocks/include), ainsi que les bibliothèques d'accès au DLL (codeblocks/lib).

                  Pour développer des applications, il n'y a rien d'autre à ajouter. Avec C::B, il faut choisir le bon projet :

                  Pour faire une application Windows 'console' : projet console
                  Pour faire une application Windows 'GUI' : projet GUI.

                  Etonnant, non ?

                  Plus problématique : la doc.

                  Déjà, je te conseille pas de te jeter dans la programmation GUI si tu n'es pas formé. C'est un monstre !

                  Par contre, il y a des centaines de fonctions utilisables en mode console(accès au réseau, par exemple, avec winsock2).

                  La doc est disponible ici (attention ce n'est pas un tutoriel, mais un document de référence)

                  http://msdn1.microsoft.com/fr-fr/default.aspx

                  Tout celà n'a pas grand chose à voir avec le langage C...
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    20 avril 2006 à 7:06:28

                    Merci -ed- pour tes conseils, une question encore cependant : Est-ce que l'API windows 'console' à d'autre commande que le batch ? Sinon pour tout ce qui est IP, etc., le batch le fait et c'est un language bien moins compliqué (moins de risques d'erreurs donc pour un débutant comme moi ^^ )!
                    Et l'API windows 'GUI' est vraiment si compliqué que ça (bon c'est vrai la fonction remplaçant le main ça à l'air chaud mais je mettais dis que c'était peut-être que les bases ...) ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      20 avril 2006 à 9:27:20

                      Oui, il y a BEAUCOUP plus de possibilités que le batch, évidemment
                      Après c'est vrai que c'est compliqué, mais tu as un contrôle total sur le système (je crois), tu peux modifier des registres systèmes etc (mais bon c'est pas pour les débutants)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 avril 2006 à 10:29:13

                        Citation : Ze Moi

                        (...) tu peux modifier des registres systèmes (...)


                        En C aussi tu peux le faire :-°
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          20 avril 2006 à 10:48:32

                          Ha bon je savais pas désolé
                          n'empêche que winAPI tu peux tout trafiquer sur windows
                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 avril 2006 à 10:50:39

                            Citation : PianoPâriss

                            Citation : Ze Moi

                            (...) tu peux modifier des registres systèmes (...)


                            En C aussi tu peux le faire :-°



                            Détaille... plutot que de " :-° ", tu verras que...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 avril 2006 à 11:02:04

                              Le WinAPI est quand même assez compliqué (environ 200 lignes de code pour afficher une simple fenêtre)! Bien sur, tu peux utiliser MFC (Microsoft Foundation Class), en quelque sorte le Windows API version OOP... Mais il est connu pour être lent et tt ca donc je te le conseillerai pas. Il faut quand même bien maitriser le C++ pour commencer à s'attaquer au WinAPI. Comme les autres l'ont dit, dès que tu maitrises le WinAPI, tu sais quasi controler tout le système.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                20 avril 2006 à 11:09:22

                                Citation : Pierre89

                                Merci -ed- pour tes conseils, une question encore cependant : Est-ce que l'API windows 'console' à d'autre commande que le batch ? Sinon pour tout ce qui est IP, etc., le batch le fait et c'est un language bien moins compliqué (moins de risques d'erreurs donc pour un débutant comme moi ^^ )!


                                L'API Windows console, ce sont des centaines de fonctions que l'on peut appeler en C (par exemple). Je ne vois pas le rapport avec les batch. Tu ne confonds pas avec les commandes systèmes ? Rien à voir avec l'<acronyme valeur="">API</acronyme>

                                Citation : Pierre89

                                Et l'API windows 'GUI' est vraiment si compliqué que ça (bon c'est vrai la fonction remplaçant le main ça à l'air chaud mais je mettais dis que c'était peut-être que les bases ...) ?


                                Oui, c'est compliqué. Mais la tendance actuelle est plutôt de ne plus s'embêter avec les détails scabreux de l'API Win32 GUI, mais plutôt d'utiliser une surcouche (En C : GTK+, par exemple), qui fourni une API portable (Windows, GNU/Linux etc.) et qui est beaucoup plus simple à utiliser. De plus, les connaissances acquises sont 'portables', donc permettent une meilleure réutilisation des ces connaissances sur d'autres plateformes. (La maîtrise de Win32 ne te servira à rien du tout si tu passes sous Linux qui, pour faire du GUI, utilise un serveur X, et différentes couches graphiques dont GTK+ hé hé!).

                                Donc attention à ses choix...

                                Il n'empêche, évidemment, que sur chaque système, on peut avoir besoin de fonctions particulières (donc non portables). A utiliser avec précaution et parcimonie. Ne pas les disséminer dans tout le code, mais les restreindre à quelques modules system-dependent (mais çà, c'est le B.A. BA de la bonne conception...)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Music only !
                                  20 avril 2006 à 11:52:56

                                  Citation : Kayl

                                  Détaille... plutot que de " :-° ", tu verras que...


                                  Je crois que je me suis planté [cours vite se cacher], mais j'avais déja vu qq le faire en C, c'est possible ?

                                  [EDIT] A ce qu'il paraît, on sait le faire avec strcpy , c'est pas un peu bizar ça ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    20 avril 2006 à 11:56:13

                                    Il me semble que je vois à quel topic tu penses.
                                    Le mec faisait ça avec un coup de "system( une commande de la mort pour écrire dans le registre);".
                                    C'était complètement naze, pas moyen de récup les codes d'erreurs, pas de récupération de donnée (sauf via un fichier en redirigeant la sortie de l'execution de la commande).

                                    Bref pourquoi appeler une commande qui au final UTILISE l'api win32 alors qu'il est plus simple d'UTILISER soi même l'api win32. Et ça reste en C hein...
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      20 avril 2006 à 12:01:21

                                      Citation : Kayl

                                      Bref pourquoi appeler une commande qui au final UTILISE l'api win32 alors qu'il est plus simple d'UTILISER soi même l'api win32. Et ça reste en C hein...


                                      Je comprends pas trop o_O
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        20 avril 2006 à 12:10:50

                                        Pierre89, si ça t'intéresse, tu peux très bien jeter un coup d'oeil à mon code ... ici : <lien url="http://www.siteduzero.com/forum-83-34378-p1-winapi-notepad-ameliore-votre-avis.html"></lien>
                                        Comme je le dis dedans, c'est pas bon pour commencer étant donné que c'est le bordel :p mais si tu veux voir un aperçu de la quantité de code et de temps nécessaire à la création d'un simple programme (il faut le dire :lol: ) eh bien tu peux toujours y aller ^^

                                        tchuss !
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          20 avril 2006 à 12:23:52

                                          Kayl ==> J'ai retrouvé le code ( c'est en C++ ) :


                                          MainForm.cpp


                                          #include <vcl.h>
                                          #pragma hdrstop

                                          #include "MainForm.h"

                                          #pragma package(smart_init)
                                          #pragma resource "*.dfm"
                                          TForm1 *Form1;

                                          __fastcall TForm1::TForm1(TComponent* Owner)
                                                  : TForm(Owner)
                                          {
                                          }


                                          void __fastcall TForm1::Button4Click(TObject *Sender)
                                          {
                                          Close();
                                          }
                                          //-------------------------------------------------------------------------
                                          //--------Permet de creer une valeur Dword à 0 (false)---------------------

                                          void __fastcall TForm1::Button1Click(TObject *Sender)
                                          {
                                          TRegistry *Reg = new TRegistry();
                                          Reg->RootKey = HKEY_CURRENT_USER;                       //Racine de l'arborescence
                                          Reg->OpenKey("Software\\Ideosphere\\Registry",true);    //ouverture de la clé
                                          Reg->WriteBool("Ecriture d'une Valeur Dword à 0",false);    //Ecriture de la valeur ou modif.
                                          Reg->CloseKey();                                        //fermeture de la clé
                                          delete Reg;
                                          }
                                          //------------------------------------------------------------------------
                                          //-------Permet de creer une valeur Dword à 1 (true)----------------------

                                          void __fastcall TForm1::Button2Click(TObject *Sender)
                                          {
                                          TRegistry *Reg = new TRegistry();
                                          Reg->RootKey = HKEY_CURRENT_USER;                       //Racine de l'arborescence
                                          Reg->OpenKey("Software\\Ideosphere\\Registry",true);    //ouverture de la clé
                                          Reg->WriteBool("Ecriture d'une Valeur Dword à 1",true);    //Ecriture de la valeur ou modif.
                                          Reg->CloseKey();                                        //fermeture de la clé
                                          delete Reg;
                                          }
                                          //-------------------------------------------------------------------------
                                          //-----Ecriture d'une chaine de caractère----------------------------------
                                          void __fastcall TForm1::Button5Click(TObject *Sender)
                                          {
                                          TRegistry *Reg = new TRegistry();
                                          Reg->RootKey = HKEY_CURRENT_USER;                                                   //Racine de l'arborescence
                                          Reg->OpenKey("Software\\Ideosphere\\Registry",true);                               //ouverture de la clé
                                          Reg->WriteString("Ecriture d'une chaine de caractere","t'ecris ce ke tu veux");    //Ecriture du nom et du contenu de la chaine
                                          Reg->CloseKey();                                                                   //fermeture de la clé
                                          delete Reg;
                                          }


                                          void __fastcall TForm1::Button7Click(TObject *Sender)
                                          {
                                          WinExec("Regedit",SW_MAXIMIZE);      //Ouvre le Registre
                                          }
                                          //-------------------------------------------------------------------------
                                          //---------------effacement de Registry et de toute ses clés---------------
                                          void __fastcall TForm1::Button3Click(TObject *Sender)
                                          {
                                          LONG result;

                                            if ((RegDeleteKey(HKEY_CURRENT_USER, "Software\\Ideosphere\\Registry")) != ERROR_SUCCESS)     //effacement de la clé dans la base de registre
                                            {
                                            Application->MessageBox("Clé déjà effacé !", "Erreur !", MB_OK | MB_ICONERROR);               //message erreur si echec
                                            }
                                            else
                                            {
                                            Application->MessageBox("Clé effacé !","Effacé !",MB_OK | MB_ICONINFORMATION);                // message de succes
                                            }
                                          }
                                          //-------------------------------------------------------------------------
                                          //----Message de rappel à la fermeture du soft-----------------------------
                                          void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
                                          {
                                          Application->MessageBox("Pensez à effacer la clé HKCU\\ Software\\ Ideosphere !", "Rappel !", MB_OK | MB_ICONINFORMATION);
                                          }



                                          void __fastcall TForm1::Button6Click(TObject *Sender)
                                          {
                                          char myBuffer[10]="test";                               //def. du buffer et de sa taille
                                          TRegistry *Reg = new TRegistry();
                                          Reg->RootKey = HKEY_CURRENT_USER;                       //Racine de l'arborescence
                                          Reg->OpenKey("Software\\Ideosphere\\Registry",true);    //ouverture de la clé
                                          Reg->WriteBinaryData("clé test binaire", myBuffer,10);    //Ecriture de la valeur ou modif.
                                          Reg->CloseKey();                                        //fermeture de la clé
                                          delete Reg;
                                          }
                                          //-------------------------------------------------------------------------
                                          //-----Description de la fonction au passage de la souris------------------
                                          void __fastcall TForm1::Button1MouseMove(TObject *Sender,
                                                TShiftState Shift, int X, int Y)
                                          {
                                          Label1->Caption="Permet de creer une clé de Valeur DWORD à 0 (false). Fonction utilisée : TRegistry::WriteBool \nWriteBool (Nom de la clé , Valeur true ou false)";
                                          }
                                          //-------------------------------------------------------------------------
                                          //-----Description de la fonction au passage de la souris------------------
                                          void __fastcall TForm1::Button2MouseMove(TObject *Sender,
                                                TShiftState Shift, int X, int Y)
                                          {
                                          Label1->Caption="Permet de creer une clé de Valeur DWORD à 1 (true). Fonction utilisée : TRegistry::WriteBool \nWriteBool (Nom de la clé , Valeur true ou false)";
                                          }



                                          void __fastcall TForm1::Button8Click(TObject *Sender)
                                          {
                                          WinExec("Explorer.exe Help.htm",1); //Ouvre le fichier d'aide
                                          }
                                          //-------------------------------------------------------------------------
                                          //-----Description de la fonction au passage de la souris------------------
                                          void __fastcall TForm1::Button7MouseMove(TObject *Sender,
                                                TShiftState Shift, int X, int Y)
                                          {
                                          Label1->Caption="Permet d'ouvrir votre registre";
                                          }
                                          //---------------------------------------------------------------------------
                                          //-----Description de la fonction au passage de la souris--------------------
                                          void __fastcall TForm1::Button3MouseMove(TObject *Sender,
                                                TShiftState Shift, int X, int Y)
                                          {
                                          Label1->Caption="Efface l'arborescence HKCU\\Software\\Ideosphere\\Registry, Attention Ideosphere ne sera pas effacé !";
                                          }
                                          //-------------------------------------------------------------------------
                                          //-----Description de la fonction au passage de la souris------------------
                                          void __fastcall TForm1::Button5MouseMove(TObject *Sender,
                                                TShiftState Shift, int X, int Y)
                                          {
                                          Label1->Caption="Permet de creer une clé de Valeur Chaine. Fonction utilisée : TRegistry::WriteString \nWriteString (Nom de la clé , bla bla bla)";
                                          }


                                          void __fastcall TForm1::Button6MouseMove(TObject *Sender,
                                                TShiftState Shift, int X, int Y)
                                          {
                                          Label1->Caption="Permet de creer une clé de valeur Binaire. Fonction utilisée : TRegistry::WriteBinaryData \nWriteBinaryData (nom de la clé , Buffer, taille du buffer)";       
                                          }



                                          Registry.cpp

                                          //------------------------------------------------------------------

                                          #include <vcl.h>
                                          #pragma hdrstop
                                          //-------------------------------------------------------------------------
                                          USEFORM("MainForm.cpp", Form1);
                                          //-------------------------------------------------------------------------
                                          WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
                                          {
                                                  try
                                                  {
                                                           Application->Initialize();
                                                           Application->CreateForm(__classid(TForm1), &Form1);
                                                           Application->Run();
                                                  }
                                                  catch (Exception &exception)
                                                  {
                                                           Application->ShowException(&exception);
                                                  }
                                                  catch (...)
                                                  {
                                                           try
                                                           {
                                                                   throw Exception("");
                                                           }
                                                           catch (Exception &exception)
                                                           {
                                                                   Application->ShowException(&exception);
                                                           }
                                                  }
                                                  return 0;
                                          }



                                          MainForm.h



                                          #ifndef MainFormH
                                          #define MainFormH

                                          #include <Classes.hpp>
                                          #include <Controls.hpp>
                                          #include <StdCtrls.hpp>
                                          #include <Forms.hpp>
                                          #include <Registry.hpp>

                                          class TForm1 : public TForm
                                          {
                                          __published:    // Composants gérés par l'EDI
                                                  TGroupBox *GroupBox1;
                                                  TButton *Button1;
                                                  TButton *Button2;
                                                  TButton *Button3;
                                                  TButton *Button4;
                                                  TGroupBox *GroupBox2;
                                                  TGroupBox *GroupBox3;
                                                  TButton *Button5;
                                                  TButton *Button6;
                                                  TButton *Button7;
                                                  TLabel *Label1;
                                                  TButton *Button8;
                                                  void __fastcall Button4Click(TObject *Sender);
                                                  void __fastcall Button1Click(TObject *Sender);
                                                  void __fastcall Button2Click(TObject *Sender);
                                                  void __fastcall Button5Click(TObject *Sender);
                                                  void __fastcall Button7Click(TObject *Sender);
                                                  void __fastcall Button3Click(TObject *Sender);
                                                  void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
                                                  void __fastcall Button6Click(TObject *Sender);
                                                  void __fastcall Button1MouseMove(TObject *Sender,
                                                    TShiftState Shift, int X, int Y);
                                                  void __fastcall Button2MouseMove(TObject *Sender,
                                                    TShiftState Shift, int X, int Y);
                                                  void __fastcall Button8Click(TObject *Sender);
                                                  void __fastcall Button7MouseMove(TObject *Sender,
                                                    TShiftState Shift, int X, int Y);
                                                  void __fastcall Button3MouseMove(TObject *Sender,
                                                    TShiftState Shift, int X, int Y);
                                                  void __fastcall Button5MouseMove(TObject *Sender,
                                                    TShiftState Shift, int X, int Y);
                                                  void __fastcall Button6MouseMove(TObject *Sender,
                                                    TShiftState Shift, int X, int Y);
                                          private:        // Déclarations de l'utilisateur
                                          public// Déclarations de l'utilisateur
                                                  __fastcall TForm1(TComponent* Owner);
                                          };

                                          extern PACKAGE TForm1 *Form1;

                                          #endif




                                          A++ ^^
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            20 avril 2006 à 13:15:40

                                            Et à quoi ça sert ce truc monstrueux?
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              20 avril 2006 à 14:17:44

                                              Ze Moi ==> MONSTRUEUX :p .
                                              Ca sert à écrire des valeurs dans le registre, et les effacer
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                20 avril 2006 à 14:26:50

                                                Tout ça pour ça...
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  20 avril 2006 à 14:29:56

                                                  Et oui, c'est une métode un peu bourrin :p

                                                  Je crois que Kayl ( ou Google :-° ) pourra t'en dire plus ;)
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    20 avril 2006 à 14:30:20

                                                    PianoPâriss le code que tu nous donnes est celui d'une application qui édite le registre... autant donner le code de "regedit" dans ce cas.

                                                    Ce n'est pas du tout représentatif de l'API win 32 car l'accès au registre se fait avec 2/3 fonctions simples.
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      20 avril 2006 à 14:35:37

                                                      Oui, je sais, je dis que ce code est 'débile'.


                                                      Mais j'ai pas compris :

                                                      Citation : Kayl

                                                      Bref pourquoi appeler une commande qui au final UTILISE l'api win32 alors qu'il est plus simple d'UTILISER soi même l'api win32. Et ça reste en C hein...

                                                      o_O


                                                      Citation : Kayl

                                                      Ce n'est pas du tout représentatif de l'API win 32 car l'accès au registre se fait avec 2/3 fonctions simples.


                                                      Oui, mais l'API WIN32 en lui même est compliqué, +- 150 lignes pour afficher une fenêtre, non ?
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        20 avril 2006 à 14:45:32

                                                        J'ai le code d'une appli console qui permet juste d'afficher la valeur d'une clé de registre.

                                                        // ZazouReadRegValue.cpp : définit le point d'entrée pour l'application console.
                                                        //

                                                        #include "stdafx.h"

                                                        int _tmain(int argc, _TCHAR* argv[])
                                                        {
                                                                HKEY rootKey = NULL;
                                                                HKEY zKey;
                                                                LPTSTR subKey;
                                                                LPTSTR value;
                                                                LPBYTE data;
                                                                LPBYTE ptr;
                                                                DWORD dataSize;
                                                                DWORD keyType;
                                                                DWORD i;
                                                                DWORD err;

                                                                if (argc < 4) {
                                                                        _tprintf(_T("USAGE: %s Clé_Racine Clé_Chemin Nom\n"), argv[0]);
                                                                        return 0;
                                                                }

                                                                if (!_tcscmp (argv[1], _T("HKCR"))) rootKey = HKEY_CLASSES_ROOT;
                                                                if (!_tcscmp (argv[1], _T("HKLM"))) rootKey = HKEY_LOCAL_MACHINE;
                                                                if (!_tcscmp (argv[1], _T("HKCU"))) rootKey = HKEY_CURRENT_USER;
                                                                if (!_tcscmp (argv[1], _T("HKU")))  rootKey = HKEY_USERS;
                                                                if (!rootKey) {
                                                                if (argc < 4) {
                                                                        _tprintf(_T("USAGE: %s Clé_Racine Clé_Chemin Nom\n"), argv[0]);
                                                                        _tprintf(_T("       Clé = HKCR\n"));
                                                                        _tprintf(_T("ou     Clé = HKLM\n"));
                                                                        _tprintf(_T("ou     Clé = HKCU\n"));
                                                                        _tprintf(_T("ou     Clé = HKU\n"));
                                                                        return 0;
                                                                }

                                                                }
                                                                subKey = argv[2];
                                                                value = argv[3];

                                                                if (ERROR_SUCCESS != (err = RegOpenKeyEx( rootKey, subKey, 0, KEY_QUERY_VALUE, &zKey ))) {
                                                                        _tprintf(_T("Can't open key: Err=%lu\n"), err);
                                                                        return (int)err;
                                                                }

                                                                if (ERROR_SUCCESS == (err = RegQueryValueEx ( zKey, LPCTSTR(value), 0, NULL, NULL, &dataSize )))
                                                                {
                                                                        data = (LPBYTE)malloc(dataSize);
                                                                        if (!data) {
                                                                                _tprintf(_T("Can't allocate memory\n"));
                                                                                return 1;
                                                                        }
                                                                        if (ERROR_SUCCESS ==  (err = RegQueryValueEx ( zKey, LPCTSTR(value), 0, &keyType, data, &dataSize )))
                                                                        {
                                                                                switch (keyType) {
                                                                                        case REG_SZ:
                                                                                                _tprintf(_T("\"%s\"\n"), (LPTSTR)data);
                                                                                                break;
                                                                                        case REG_EXPAND_SZ:
                                                                                                ptr = data;
                                                                                                _tprintf(_T("\""));
                                                                                                while ((TCHAR)(*ptr)!=_T('\0')) {
                                                                                                        _tprintf(_T("
                                                        %c"), (TCHAR)(*ptr));
                                                                                                        ptr += sizeof(TCHAR);
                                                                                                }
                                                                                                _tprintf(_T("
                                                        \"\n"));
                                                                                                break;
                                                                                        case REG_MULTI_SZ:
                                                                                                ptr = data;
                                                                                                while ((TCHAR)(*ptr)!=_T('\0')) {
                                                                                                        _tprintf(_T("\"%s\"\n"), (LPTSTR)ptr);
                                                                                                        ptr += _tcslen((LPTSTR)ptr);
                                                                                                        /* Zéro terminal */
                                                                                                        ptr += sizeof(TCHAR);
                                                                                                }
                                                                                                break;
                                                                                        case REG_DWORD:
                                                                                                _tprintf(_T("%lu\n"), *(DWORD*)data);
                                                                                                break;
                                                                                        default:
                                                                                                _tprintf(_T("0x"));
                                                                                                for (i=0; i<dataSize; ++i) {
                                                                                                        _tprintf(_T("%02x"), data[i]);
                                                                                                }
                                                                                                _tprintf(_T("\n"));
                                                                                                break;
                                                                                }
                                                                        } else {
                                                                                _tprintf(_T("Can't get value: Err=%lu\n"), err);
                                                                                return (int)err;
                                                                        }
                                                                        free (data);
                                                                } else {
                                                                        _tprintf(_T("Can't get value size: Err=%lu\n"), err);
                                                                        return (int)err;
                                                                }

                                                                RegCloseKey (zKey);
                                                                return 0;
                                                        }



                                                        Vous trouverez l'exe là: http://fichiers.xgarreau.org/zazoureadregvalue/Release/ZazouReadRegValue.exe

                                                        Les fichiers sources et le projet VC++ sont ici: http://fichiers.xgarreau.org/zazoureadregvalue/

                                                        a+
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          20 avril 2006 à 14:49:15

                                                          C'est encore plus monstrueux que mon code à moi :
                                                          _tprintf(_T("USAGE: %s Clé_Racine Clé_Chemin Nom\n"), argv[0]);

                                                          o_Oo_Oo_Oo_Oo_Oo_Oo_O Et ce n'est pas le plus dur...
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            20 avril 2006 à 14:50:45

                                                            Je pense que ça ne serve pas à grand chose d'apprendre le Win32 API maintenant car dans quelques mois, avec la sortie de Windows Vista, cette API sera remplacée par WinFX...
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            API windows

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                            • Editeur
                                                            • Markdown