cs_neil
Messages postés67Date d'inscriptionlundi 12 mai 2003StatutMembreDernière intervention19 janvier 2009
-
4 avril 2007 à 09:54
cs_neil
Messages postés67Date d'inscriptionlundi 12 mai 2003StatutMembreDernière intervention19 janvier 2009
-
5 avril 2007 à 22:39
Bonjour, je voudrais savoir s'il existe un message envoyé par windows lorsqu'on insert un cd dans un lecteur de cd rom?
Autrement comment faire pour savoir si l'utilisateur a inséré un cd
dans le lecteur sans faire utiliser un timer (avec la commande
findfirst )?
L'inconvénient à mon avis, c'est que :
- il faut que ton appli ait le focus au moment de l'insertion du CD,
- il me semble que ça ne fonctionne qu'avec les CD démarrant avec un autorun...
procedure TForm1.WndProc(var M: TMessage);
begin
if M.Msg = WM_DEVICECHANGE then
begin
Memo.Lines.Add(DateTimeToStr(Now) + 'M.Msg = WM_DEVICECHANGE');
case M.WParam of
$8000:
begin
Application.BringToFront;
Memo.Lines.Add('Fermeture du tiroir');
end;
$8004: Memo.Lines.Add('Ouverture du tiroir');
end;
Memo.Lines.Add(Format('M.WParam = %d', [M.WParam]));
end else
{ si l'appli n'a pas le focus, on ne recevra pas le message suivant }
if M.Msg = wm_QueryCancelAutoPlay then
begin
Memo.Lines.Add(DateTimeToStr(Now) + 'M.Msg = wm_QueryCancelAutoPlay');
M.Result := 1; // <- stop AutoPlay
end
else
inherited WndProc(M);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
wm_QueryCancelAutoPlay := RegisterWindowMessage('QueryCancelAutoPlay');
end;
Comme tu peux le constater, j'ai réussi à intercepter les messages d'ouverture et de fermeture du tiroir. Reste à gérer tout ça. Si ça peut t'ouvrir une piste...
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 5 avril 2007 à 20:41
Information complémentaire :
En modifiant une valeur DWORD de la base de registre, tu peux inactiver
les fonctions d'autorun et d'exécution automatique au moment de
l'introduction d'un CD ou d'une clé USB.
cs_neil
Messages postés67Date d'inscriptionlundi 12 mai 2003StatutMembreDernière intervention19 janvier 2009 5 avril 2007 à 11:45
Bonjour, desolé de ne repondre que maintenant mais je n'avais plus de connexion internet lol
J'ai oublié de préciser que le code servait à faire une copie
automatique d'un cd lors de son insertion, donc en fait j'ai un
timer qui regarde si un fichier (ici seulement un fichier vidéo) est
prèsent dans le lecteur cd, si oui il le copie.
Donc mon problème c'est que je dois utiliser un timer en tout temps, méthode que je ne trouve pas trop élégante.
D'où ma question de savoir s'il existe un message envoyé par windows lors de l'insertion d'un cd
Japee> pour ce qui est de ton idée je vais voir si j'arrive à
utiliser ta méthode mais si comme tu le dis cela ne fonctionne qu'avec
un autorun, cela ne convient pas à mon programme.
Jelume> j'ai deja tester disksize mais là aussi il faut un timer donc cela en revient au meme que findfirst;
cs_neil
Messages postés67Date d'inscriptionlundi 12 mai 2003StatutMembreDernière intervention19 janvier 2009 5 avril 2007 à 16:10
Lapee> Ola j'en attendais pas autant merci, je vais etudier tout ca merci beaucoup
Jelume> je suis allez sur le site et effectivement les
composants présent ont l'air intéressent mais le probleme est que 1 je
possède delphi 7 personnel (or les composant s'arret a delphi 5)et que
malheureusement je n'ai pas le temps de les adapter à D7 et 2 je
cherche pour le moment une méthode sans composants suplémentaires mais
merci d'avoir chercher
cs_neil
Messages postés67Date d'inscriptionlundi 12 mai 2003StatutMembreDernière intervention19 janvier 2009 5 avril 2007 à 16:58
Japee (desolé pour la faute de frappe)> merci c'est apparament ce que je cherchais , je n'ai plus qu'à adapter mon code, encore merci.
Par contre, je ne comprend pas l'utilité de cette ligne de code, peux tu m'aider ?
application.bringtofront : d'après l'aide en ligne, cela permet de faire de la dernière fenetre active la fenetre au premier plan, mais je ne vois pas pourquoi tu l'utilises à ce niveau du code (d'ailleurs si je supprime cette ligne, je ne vois pas de diffèrence).
Merci
cs_neil
Messages postés67Date d'inscriptionlundi 12 mai 2003StatutMembreDernière intervention19 janvier 2009 5 avril 2007 à 17:30
Japee, apparament ton code fonctionne (trop) bien , en effet, si j'insère un peripherique, comme une clès USB, l'evenement 'fermeture du tiroir' se déclenche. Y a t'il un moyen de ne gèrer l'evenement pour un leteur donné ? Merci
cs_neil
Messages postés67Date d'inscriptionlundi 12 mai 2003StatutMembreDernière intervention19 janvier 2009 5 avril 2007 à 22:39
Merci pour cette info, mais je ne cherche pas à utiliser l'autorun mais une 'plus belle' manière de surveiller le lecteur de cd sans utiliser un timer (j'ai d'ailleur poster une version non terminé du dit programme sur delphifr : 'Raccourci rapide') .
Mais je dois dire qu'en réflèchissant un peu plus j'aurais pu trouver la solution tout seul car je n'ai pas pensé à utiliser le message DRIVECHANGE alors que je l'ai déjà vu dans un programme de dongle usb (sur ce site) mais je ne pensais pas qu'il fonctionnait avec un simple lecteur de cd.