Savez-vous transposer un programme en C et Windev ?
1 réponse
GP
Bonjour, tout est dans la question ?
Le but est de transposer un petit programme en C en une procédure
Windev
Le but est de simplifier ce programme pour permettre de commander
l'éjection de la disquette correspondant au support D:\ ou E\: etc..
qui lui sera passé en paramètre
Le programme qui est à adapter récupère la liste des supports
susceptibles d'être ejectés et les éjecte.
Si vous êtes partant je vous envoie le fichier ZIP contenant le code et
l'explication de sa procédure
Ce programme est adapté aux divers Windows : conserver ces possibilités
précieusement
Pour avoir une idée du programme voici le code :
//***************************** Eject **************************
// Programme d'éjection de disque amovible à la sortie de Windows
// Variables globales
char g_szLecteurs[100]; // Liste des lecteurs à éjecter
DWORD g_dwOptions; // Liste des options
WORD g_wWaitTime; // Durée de la pause après éjection
// Examen de la ligne de commande
szBloc = strtok(szChaine, " ");
if(szBloc[0]=='-') // Il y a des options
{
for(int i=1; i<lstrlen(szBloc); i++)
{
switch(szBloc[i])
{
case 'V':
g_dwOptions |= OPTION_VERIFY;
break;
case 'N':
g_dwOptions |= OPTION_NOW;
break;
case 'S':
g_dwOptions |= OPTION_SUSPEND;
break;
case 'E':
g_dwOptions |= OPTION_NOT_ENDSESSION;
break;
case 'A':
g_dwOptions |= OPTION_ALL;
lstrcpy(g_szLecteurs, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
break;
case 'L':
g_dwOptions |= OPTION_LOAD;
break;
case 'W':
{
char szTime[6];
int k=0;
while((i+1)<lstrlen(szBloc) && k<(sizeof(szTime)-1)
&& szBloc[i+1]>='0' && szBloc[i+1]<='9')
szTime[k++]=szBloc[++i];
szTime[k]=0;
g_wWaitTime = atoi(szTime);
}
break;
}
}
szBloc = strtok(NULL, " ");
}
// Si option "Load", il faut forcément un temps d'attente. Si Nul ->
5s par défaut
if((g_dwOptions & OPTION_LOAD) && !g_wWaitTime)
g_wWaitTime = 5;
if(szBloc) // Examens des lecteurs
{
if(g_dwOptions & OPTION_ALL) // On enlève les lecteurs de la liste en
mettant des "_"
{
for(int i=0; i<lstrlen(szBloc); i++)
for(int j=0; j<lstrlen(g_szLecteurs); j++)
if(g_szLecteurs[j]==szBloc[i])
g_szLecteurs[j] = '_';
}
else // La liste des lecteurs est szBloc
lstrcpy(g_szLecteurs, szBloc);
}
// On évite les erreurs d'accès aux lecteurs
SetErrorMode(SEM_FAILCRITICALERRORS);
// Now -> on applique directement
if(g_dwOptions & OPTION_NOW)
{
EjectProcess();
return NULL;
}
// Test Version Windows (procédés différents sou NT et 95/98)
OSVERSIONINFO OSVer;
OSVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&OSVer);
if(OSVer.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
{
// Ejection sous Windows 95/98/Me
HANDLE hDevice;
DIOC_REGISTERS reg;
BOOL fResult;
DWORD cb;
// Procédure pour refermer les disques
void Load(int nDrive)
{
if(nDrive<1 || nDrive>26)
return;
// Test Version Windows (procédés différents sou NT et 95/98)
OSVERSIONINFO OSVer;
OSVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&OSVer);
if(OSVer.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
{
// Fermeture sous Windows 95/98/Me: non supporté
/* HANDLE hDevice;
DIOC_REGISTERS reg;
BOOL fResult;
DWORD cb;