| auteur : Farscape | Avec la fonction ShellExecute :
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:
ShellExecute (handle, NULL , path_to_folder, NULL , NULL , SW_SHOWNORMAL);
ShellExecute (handle, " open " , path_to_folder, NULL , NULL , SW_SHOWNORMAL);
ShellExecute (handle, " explore " , path_to_folder, NULL , NULL , SW_SHOWNORMAL);
ShellExecute (handle, " find " , path_to_folder, NULL , NULL , 0 );
|
Exemple ouverture d'un fichier « .doc »
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);
}
|
|
| auteur : Farscape | Le code qui suit est différent car il attend que le processus d'impression soit terminé.
On utilisera cette fois ShellExecuteEx:
BOOL ShellExecuteEx (
LPSHELLEXECUTEINFO lpExecInfo
);
Voir documentation MSDN pour le détail de la structure SHELLEXECUTEINFO.
|
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);
}
|
|
| auteur : Farscape |
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);
}
|
|
| auteur : Farscape | En inscrivant directement la valeur dans la base de registre
bool SetRunAppWithExtension (const char * szAppName,
const char * szLibApp,
const char * szCommandLine,
const char * szExtName)
{
HKEY hKey= NULL ;
long ret;
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);
if ((ret= RegCreateKey (HKEY_CLASSES_ROOT, szExtName,& hKey))= = ERROR_SUCCESS)
ret= RegSetValue (hKey, " " , REG_SZ, szAppName,NULL );
else
{
RegCloseKey (hKey);
return false ;
}
RegCloseKey (hKey);
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 :
SetRunAppWithExtension (" MyDump " , " Dump Fichiers Perso " ," C:\\Projects\\MyDump.exe %1 " ," .prs " );
|
Association pour le programme MyDump.exe à l'extension de fichier « .prs ».
|
| auteur : Farscape |
bool SetIconApp (const char * szAppName,const char * szPathIcon)
{
HKEY hKey= NULL ;
long ret;
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 :
SetIconApp (" MyDump " ," C:\\Projects\\MyDump.ico " );
|
|
| auteur : Farscape | la fonction ci dessous renvoie les codes suivants:
- -1 : erreur
- 01:WIN95
- 02:WIN98
- 03:WINNT
- 04:WINXP
int GetOSystem ()
{
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
ZeroMemory (& osvi, sizeof (OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
if ( ! (bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO * ) & osvi)) )
{
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 ;
}
|
|
| auteur : Farscape | Plusieurs techniques possibles :
- la base de registre ;
- la fonction WNetGetUser ;
- la fonction GetUserName.
# 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;
}
char user[100 ];
DWORD size = 100 ;
GetUserName (user,& size);
|
|
Consultez les autres F.A.Q.
|
|