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

FAQ VC++ et MFCConsultez toutes les FAQ

Nombre d'auteurs : 20, nombre de questions : 545, dernière mise à jour : 5 avril 2013  Ajouter une question

 

Cette faq a été réalisée pour répondre aux questions les plus fréquement posées sur le forum Développement Visual C++

Je tiens à souligner que cette faq ne garantit en aucun cas que les informations qu'elle contient sont correctes ; Les auteurs font le maximum, mais l'erreur est humaine. Si vous trouvez une erreur, ou si vous souhaitez devenir redacteur, lisez ceci.

Sur ce, je vous souhaite une bonne lecture. Farscape

SommaireBase de Registre (7)
précédent sommaire suivant
 

Avec la fonction ShellExecute :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
  
HINSTANCE ShellExecute( 
    HWND hwnd,  
    LPCTSTR lpOperation, 
    LPCTSTR lpFile,  
    LPCTSTR lpParameters,  
    LPCTSTR lpDirectory, 
    INT nShowCmd 
);
Voici les commandes possibles pour lporeration :

  • " edit " : Lance l'éditeur et ouvre le document pour modification ,si lpFile n'est pas un document valide la fonction échoue.
  • "explore": Lance l'exploration du dossier spécifié par lpFile.
  • "find": Lance une recherche qui démarre à partir du répertoire spécifié.
  • "open": Ouvre le fichier spécifié par le paramètre lpFile ,le fichier peut être un fichier exécutable, un document ou un répertoire.
  • "print": Imprime le document spécifié par lpFile, si lpFile n'est pas un document valide le traitement échoue.

Lpfile :
Une chaîne de caractères terminée par un ‘\0' correspondant au paramètre s'appliquant au mode spécifié par lpOperation.
lpParameters :
Si le paramètre lpFile est un fichier exécutable lpParameters devra contenir sous forme d'une chaîne de caractères le paramètre passé à l'application.
Si lpFile correspond à un document lpParameters doit être NULL.

lpDirectory:
Un pointeur sur une chaîne de caractères se terminant par un ‘\0' pour spécifier le répertoire par défaut.

nShowCmd :
Correspond au mode d'affichage de l'application lancée.

  • SW_HIDE : Rend la fenêtre invisible
  • SW_MINIMIZE : Minimise la fenêtre et active la première fenêtre de la liste système
  • SW_RESTORE : Active et affiche la fenêtre si celle-ci est maximisée ou minimisée elle est restaurée à sa taille et position d'origine
  • SW_SHOW : Active et affiche la fenêtre à sa taille et position courante
  • SW_SHOWMAXIMIZED : Active la fenêtre et l'affiche à sa taille maximale
  • SW_SHOWMINIMIZED : Active la fenêtre et l'affiche sous forme d'icône
  • SW_SHOWNORMAL : Est synonyme de SW_RESTORE


La fonction retourne un «Handle» supérieur à 32 si la commande a réussi sinon inférieur à 32 signifie une erreur.

Voir Documentation MSDN pour les codes d'erreurs.

Formats d'utilisations:

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
  
//Ouvrir un répertoire: 
ShellExecute(handle, NULL, path_to_folder, NULL, NULL, SW_SHOWNORMAL); 
//ou  
ShellExecute(handle, "open", path_to_folder, NULL, NULL, SW_SHOWNORMAL); 
  
//Explorer un répertoire  
ShellExecute(handle, "explore", path_to_folder, NULL, NULL, SW_SHOWNORMAL); 
  
//Lancer une recherche: 
ShellExecute(handle, "find", path_to_folder, NULL, NULL, 0);
Exemple ouverture d'un fichier « .doc »

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  
HINSTANCE nerror; 
    CString strOutputName= "mondocument.doc"; 
    if((nerror=ShellExecute(AfxGetMainWnd()->m_hWnd,  
        "open",  
        strOutputName,  
        NULL,  
        NULL,  
        SW_SHOWNORMAL))<=(HINSTANCE)32) 
    { 
        CString mess; 
        mess.Format("Impossible de Modifier ou d'Ouvrir le Document:\n%s Erreur n°:%d", 
            strOutputName,nerror); 
        AfxMessageBox(mess,MB_ICONEXCLAMATION); 
    }

Mis à jour le 20 mai 2006 farscape

Le code qui suit est différent car il attend que le processus d'impression soit terminé.
On utilisera cette fois ShellExecuteEx:

Code c++ : Sélectionner tout
1
2
3
4
5
6
  
BOOL ShellExecuteEx( 
    LPSHELLEXECUTEINFO lpExecInfo 
); 
  
Voir documentation MSDN pour le détail de la structure SHELLEXECUTEINFO.
Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
  
SHELLEXECUTEINFO sei; 
ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO)); 
sei.cbSize = sizeof(SHELLEXECUTEINFO ); 
  
sei.lpFile = “mondocument.doc; 
sei.fMask = SEE_MASK_NOCLOSEPROCESS; 
sei.lpVerb = TEXT("print"); 
sei.nShow = SW_SHOWNORMAL; 
if(ShellExecuteEx(&sei)) 
{ 
    WaitForSingleObject(sei.hProcess, INFINITE); 
}

Mis à jour le 5 avril 2013 farscape

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
  
HINSTANCE nerror; 
CString strApp="WINWORD"; 
nerror=ShellExecute(AfxGetMainWnd()->m_hWnd, NULL, strApp, NULL, NULL, SW_SHOWNORMAL); 
if(reinterpret_cast<int>(nerror) <= 32) 
{ 
    CString mess; 
    mess.Format("Erreur de lancement de l'application:\n%s Erreur n°:%d", 
                          (const char *)strApp,nerror); 
    AfxMessageBox(mess,MB_ICONEXCLAMATION); 
}

Mis à jour le 5 avril 2013 farscape

En inscrivant directement la valeur dans la base de registre

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  
bool SetRunAppWithExtension(const char *szAppName, 
                            const char *szLibApp, 
                            const char *szCommandLine, 
                            const char *szExtName) 
{ 
    HKEY hKey=NULL; 
    long ret; 
    // Creation de la racine szAppName 
  
    if(RegCreateKey(HKEY_CLASSES_ROOT, szAppName, &hKey)!=ERROR_SUCCESS) return false;  
    if(RegSetValue(hKey, "", REG_SZ,szLibApp, NULL)!=ERROR_SUCCESS) 
    { 
        RegCloseKey(hKey); 
        return false; 
    } 
    RegCloseKey(hKey); 
    // création de l'entrée pour l'extension szExtname associée à szAppName  
    if((ret=RegCreateKey(HKEY_CLASSES_ROOT, szExtName,&hKey))==ERROR_SUCCESS) 
        ret=RegSetValue(hKey, "", REG_SZ, szAppName,NULL); 
    else 
    { 
        RegCloseKey(hKey); 
        return false; 
    } 
    RegCloseKey(hKey); 
    // fixe la ligne de commande pour szAppName   
    if((ret = RegCreateKey(HKEY_CLASSES_ROOT, szAppName,&hKey))==ERROR_SUCCESS)  
        ret = RegSetValue(hKey, "shell\\open\\command", REG_SZ, szCommandLine, 
                            MAX_PATH); 
    if(ret==ERROR_SUCCESS) RegCloseKey(hKey); 
  
    return (ret==ERROR_SUCCESS); 
}
exemple d'utilisation :

Code c++ : Sélectionner tout
1
2
  
SetRunAppWithExtension ("MyDump", "Dump Fichiers Perso","C:\\Projects\\MyDump.exe %1",".prs");
Association pour le programme MyDump.exe à l'extension de fichier « .prs ».

Mis à jour le 5 avril 2013 farscape

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
  
bool SetIconApp(const char *szAppName,const char *szPathIcon) 
{ 
    HKEY hKey=NULL; 
    long ret; 
   // Création de la racine szAppName 
     if(RegCreateKey(HKEY_CLASSES_ROOT, szAppName, &hKey)!=ERROR_SUCCESS) return false; 
            ret = RegSetValue(hKey, "DefaultIcon", REG_SZ,szPathIcon,MAX_PATH); 
  
     if(ret==ERROR_SUCCESS) RegCloseKey(hKey); 
     return (ret==ERROR_SUCCESS); 
}
exemple d'utilisation :

Code c++ : Sélectionner tout
1
2
  
SetIconApp ("MyDump","C:\\Projects\\MyDump.ico");

Mis à jour le 5 avril 2013 farscape

la fonction ci dessous renvoie les codes suivants:

  • -1 : erreur
  • 01:WIN95
  • 02:WIN98
  • 03:WINNT
  • 04:WINXP

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  
int GetOSystem()  
{  
    OSVERSIONINFOEX osvi;  
    BOOL bOsVersionInfoEx;  
  
   // Try calling GetVersionEx using the OSVERSIONINFOEX structure.  
   //  
   // If that fails, try using the OSVERSIONINFO structure.  
   ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));  
   osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);  
  
   if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )  
   {  
      // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.  
      osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);  
      if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )  
         return  -1;  
   }  
   if(osvi.dwPlatformId==VER_PLATFORM_WIN32_NT)  
   {       
         if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )  
            return 4;  
      return   3;  
   }             
  if(osvi.dwPlatformId==VER_PLATFORM_WIN32s) return 0;  
  if(osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)  
  {  
    if(osvi.dwMinorVersion==0) return 1;  
    else if(osvi.dwMinorVersion>0) return 2;  
  }  
   return  -1;  
}

Mis à jour le 5 avril 2013 farscape

Plusieurs techniques possibles :

  • la base de registre ;
  • la fonction WNetGetUser ;
  • la fonction GetUserName.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  
//------------------------------------------------------------------------ 
#define MAXESC 255 
int GetRegistryLocalMachine( const char* szkey, const char* szname, void* pval ) 
{ 
    int nError; 
    unsigned long sz = MAXESC; 
    DWORD tp; 
    HKEY k; 
    char *szVal=(char *)pval; 
  
    if (nError = RegOpenKeyEx( HKEY_LOCAL_MACHINE, szkey, 0, KEY_ALL_ACCESS, &k ) ) return nError; 
    if (nError = RegQueryValueEx( k, szname, 0, &tp, (LPBYTE)pval, &sz ) ) 
        return nError; 
    if (szVal [sz-1] != 0 ) szVal [sz] = 0; 
    if (nError = RegCloseKey( k ) ) return nError; 
    return 0; 
} 
CString GetCurrentUser() 
{ 
    DWORD nlen=20; 
    char szUser[20]; 
    if(GetRegistryLocalMachine( "System\\CurrentControlSet\\Control", 
                                "Current User",szUser)) 
    { 
        WNetGetUser(NULL,szUser,&nlen); 
    } 
    return szUser; 
} 
 // dernière méthode 
char user[100]; 
DWORD size = 100; 
  
GetUserName(user,&size);

Mis à jour le 5 avril 2013 farscape

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2022 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.