Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

trouver la lettre du 'drive' pour cd rom

8 réponses
Avatar
Jean Pierre Daviau
Bonjour à tous,

Est-ce que ce genre de chose peut se faire en C?

--------- // generate name of jnlp file corresponding to CD drive
letter-----------------

/**
* setup.cpp :
* invokes corresponding setup?.jnlp file when invoked from a CD
* setup.exe usually trigged by autorun.inf
* For windows only.
*
* copyright (c) 2003 Roedy Green, Canadian Mind Products
* #327 - 964 Heywood Avenue
* Victoria, BC Canada V8V 2Y5
* tel:(250) 361-9093
* mailto:roedyg@mindprod.com
* http://mindprod.com
*/

#include "stdafx.h" /* standard precompiled header */
#include <direct.h> /* chdir, mkdir */
#include <process.h> /* exec, spawn */
#include <stdio.h> /* fclose, fgetc, printf, remove, rename, setvbuf */
#include <stdlib.h> /* exit, putenv, _splitpath */
#include <string.h> /* strcpy, strcat, strcmp, strupr */

/* Configure root name of all the jnlp files we might invoke */
const char* jnlpBaseName = "replicatorreceivercd";

/**
* Invoke JNLP file corresponding to drive letter
* running from.
*
* @param argc not used
* @param argv not used
*
* @return system error code
*/
int main( int argc, char* argv[] )
{
// get current drive letter.
char curDrive = 'A' + _getdrive() - 1;

// generate name of jnlp file corresponding to CD drive letter
// e.g. replicatorreceiverR.jnlp
int baseLength = strlen( jnlpBaseName );
char* jnlpName = new char[ baseLength + 7];
strcpy( jnlpName, jnlpBaseName );
// tack on drive letter

jnlpName[ baseLength ] = curDrive;
jnlpName[ baseLength + 1 ] = 0;
strcat ( jnlpName, ".jnlp" );

// Java webstart is usually in
// C:\Program Files\Java\j2re1.4.2_01\javaws\javaws.exe
// but we can't count on it.
// Find command processor shell that knows jnlp-to-javaws.exe
association.
// Shell usually c:\winnt\system32\cmd.exe though
// might be 4NT.exe or COMMAND.COM
char* shell = getenv( "ComSpec" );
if ( shell == NULL )
{
shell = "cmd.exe";
}

printf( "Installing %s with Java Web Start via the %s shell.\n",
jnlpName, shell );

// start up Java Web Start with, for example, replicatorreceiverR.jnlp.
if ( _spawnlp( _P_OVERLAY, shell, shell, "/C", jnlpName, NULL ) )
{
// ENOENT = 2 = not found
// EINVAL = 22 = invalid arg
printf ( "Java Web Start, part of the Java JRE, must be installed
first. Error %u\n", errno );
}
delete jnlpName;
return 0;
}
-------------
--
Jean Pierre Daviau
--
http://jeanpierredaviau.com

8 réponses

Avatar
AMcD®
Jean Pierre Daviau wrote:
Bonjour à tous,

Est-ce que ce genre de chose peut se faire en C?



Je ne comprends rien à ta question, mais si tu veux savoir quelle lettre est
assignée à un CD-ROM, tu utilises la fonction suivante : GetDriveType(). Il
suffit de boucler sur le nombre de lettres.

--
AMcD®

http://arnold.mcdonald.free.fr/
Avatar
Vincent Burel
"AMcD®" wrote in message
news:422b44ad$0$27853$
Jean Pierre Daviau wrote:
> Bonjour à tous,
>
> Est-ce que ce genre de chose peut se faire en C?

Je ne comprends rien à ta question, mais si tu veux savoir quelle lettre


est
assignée à un CD-ROM, tu utilises la fonction suivante : GetDriveType().


Il
suffit de boucler sur le nombre de lettres.



ou bien plutot sur les lettres de la chaine renvoyée par
GetLogicalDriveStrings()

VB
Avatar
Jean Pierre Daviau
Bonjour,

Il semble que mon compiateru n'aie pas les headers pour ces fonctions:
Error: Unresolved external '_GetDriveType' referenced from C:DOCUMENTS AND
SETTINGSJEAN PIERREBUREAUTSTDRV.OBJ


--
Jean Pierre Daviau
--
Easyphp1.7
Apache1.3.24
DEVC++, borland 5.5
windows Xp
asus p4 s533/333/133
http://www.jeanpierredaviau.com
Avatar
AMcD®
Jean Pierre Daviau wrote:
Bonjour,

Il semble que mon compiateru n'aie pas les headers pour ces fonctions:
Error: Unresolved external '_GetDriveType' referenced from
C:DOCUMENTS AND SETTINGSJEAN PIERREBUREAUTSTDRV.OBJ



GetDriveType() est dans Kernel32.dll, est Unicode et ANSI et existe depuis
Windows95...

--
AMcD®

http://arnold.mcdonald.free.fr/
Avatar
Jean Pierre Daviau
Merci,

à ce que je vois, je suis dans le vide.
---------------
Je connais un peu de C.
J'ai compilé deux ou trois fenêtre avec l'aide de "Windows Programming
Programmer's notebok.


Jean Pierre

"AMcD®" a écrit dans le message de news:
422c4be6$0$23400$
Jean Pierre Daviau wrote:
Bonjour,

Il semble que mon compiateru n'aie pas les headers pour ces fonctions:
Error: Unresolved external '_GetDriveType' referenced from
C:DOCUMENTS AND SETTINGSJEAN PIERREBUREAUTSTDRV.OBJ



GetDriveType() est dans Kernel32.dll, est Unicode et ANSI et existe depuis
Windows95...

--
AMcD®

http://arnold.mcdonald.free.fr/



Avatar
Arnaud Debaene
Jean Pierre Daviau wrote:
Merci,

à ce que je vois, je suis dans le vide.
---------------
Je connais un peu de C.
J'ai compilé deux ou trois fenêtre avec l'aide de "Windows
Programming Programmer's notebok.



Tu utilises quel compilateur?

Arnaud
MVP - VC
Avatar
Jean Pierre Daviau
--

DEVC++, borland 5.5
windows Xp
asus p4 s533/333/133
http://www.jeanpierredaviau.com



"Arnaud Debaene" a écrit dans le message de
news: 422cb068$0$31687$
Jean Pierre Daviau wrote:
Merci,

à ce que je vois, je suis dans le vide.
---------------
Je connais un peu de C.
J'ai compilé deux ou trois fenêtre avec l'aide de "Windows
Programming Programmer's notebok.



Tu utilises quel compilateur?

Arnaud
MVP - VC




Avatar
Frédéric Lachasse
"Jean Pierre Daviau" wrote in message
news:1NFWd.332$
Bonjour à tous,

Est-ce que ce genre de chose peut se faire en C?

--------- // generate name of jnlp file corresponding to CD drive
letter-----------------

/**
* setup.cpp :
* invokes corresponding setup?.jnlp file when invoked from a CD
* setup.exe usually trigged by autorun.inf
* For windows only.
*
* copyright (c) 2003 Roedy Green, Canadian Mind Products
* #327 - 964 Heywood Avenue
* Victoria, BC Canada V8V 2Y5
* tel:(250) 361-9093
* mailto:
* http://mindprod.com
*/

#include "stdafx.h" /* standard precompiled header */
#include <direct.h> /* chdir, mkdir */
#include <process.h> /* exec, spawn */
#include <stdio.h> /* fclose, fgetc, printf, remove, rename, setvbuf */
#include <stdlib.h> /* exit, putenv, _splitpath */
#include <string.h> /* strcpy, strcat, strcmp, strupr */

/* Configure root name of all the jnlp files we might invoke */
const char* jnlpBaseName = "replicatorreceivercd";

/**
* Invoke JNLP file corresponding to drive letter
* running from.
*
* @param argc not used
* @param argv not used
*
* @return system error code
*/
int main( int argc, char* argv[] )
{
// get current drive letter.
char curDrive = 'A' + _getdrive() - 1;

// generate name of jnlp file corresponding to CD drive letter
// e.g. replicatorreceiverR.jnlp
int baseLength = strlen( jnlpBaseName );
char* jnlpName = new char[ baseLength + 7];
strcpy( jnlpName, jnlpBaseName );
// tack on drive letter

jnlpName[ baseLength ] = curDrive;
jnlpName[ baseLength + 1 ] = 0;
strcat ( jnlpName, ".jnlp" );

// Java webstart is usually in
// C:Program FilesJavaj2re1.4.2_01javawsjavaws.exe
// but we can't count on it.
// Find command processor shell that knows jnlp-to-javaws.exe
association.
// Shell usually c:winntsystem32cmd.exe though
// might be 4NT.exe or COMMAND.COM
char* shell = getenv( "ComSpec" );
if ( shell == NULL )
{
shell = "cmd.exe";
}

printf( "Installing %s with Java Web Start via the %s shell.n",
jnlpName, shell );

// start up Java Web Start with, for example, replicatorreceiverR.jnlp.
if ( _spawnlp( _P_OVERLAY, shell, shell, "/C", jnlpName, NULL ) )
{
// ENOENT = 2 = not found
// EINVAL = 22 = invalid arg
printf ( "Java Web Start, part of the Java JRE, must be installed
first. Error %un", errno );
}
delete jnlpName;
return 0;
}




Il semble plutôt que tu cherches la location de autorun.exe/setup.exe, afin
de rechercher le JNLP relativement à cet exécutable. Ainsi, tu trouveras le
fichier si le setup est lancé depuis le CD-ROM.

Pour cela utilise GetModuleName() avec un HMODULE NULL. Cela retourne le
path complet vers l'exécutable.

Pour lancer le JNLP, utilise plutôt ShellExecute(), qui est la fonction même
utilisé par Windows pour ouvrir les fichiers avec association. Lancer
CMD.EXE va créer une console parasite, ce qui n'est pas très esthétique.

--
Frédéric Lachasse - ECP86