
| | 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.
 
|
|