#!/usr/bin/perl

use Win32;
use Cwd;
use Win32::NetResource;
use Win32::TieRegistry ( Delimiter=>"/", ArrayValues=>1 );
# use File::PathConvert qw(realpath);
use File::Spec;

BanniereFranck("sys_LancementUneFois : programmation du lancement d'un batch", 
               "Novembre 2002",
               "MAIRIE DE LA CHAPELLE SUR ERDRE");

$param = shift @ARGV;
$param = uc($param);


if ( $param eq '' ) {
   print "\n Un parametre est obligatoire :\n";
   print " le nom du programme a lancer sans chemin absolu\n\n";
   
   print " <<< APPUYER SUR LA TOUCHE ENTREE >>>";
   
   $wait = <STDIN>;
   exit 1;	
}	

# IMPOSSIBILITE (1) : La machine n'est pas sous Windows NT/2000/XP
if ( Win32::IsWin95() ) {
    print "est une station sous Win9x :\n";
    exit 1; 
}

# IMPOSSIBILITE (2) : le programme est lance depuis un chemin non mappe
$unite = $0;
$unite = substr($unite, 0, 1);

if ( $unite eq '\\' ) {
   print "\n Ce programme ne peut pas se lancer a partir d'un chemin UNC\n";
   print " Lier au prealable une unite reseau\n\n";
   
   print " <<< APPUYER SUR LA TOUCHE ENTREE >>>";   
   
   $wait = <STDIN>;
   exit 1;	
}

# IMPOSSIBILITE (3) : si l'unite est une unite reseau
#                     alors verifions si l'unite mappee a bien ete configuree avec "reconnexion automatique au demarrage"
#                     pour cela il faut controler HKCU\Network\x avec x=lettre de l'unite 
my $UNCName;
Win32::NetResource::GetUNCName( $UNCName, "$unite:" );
if ($UNCName eq '') { 
   print "Le lancement apres redemarrage se fera sur l'unite locale $unite:\n"; 
} else {
   $valeur = $Registry->{"CUser/Network/". $unite . "//RemotePath"};
   if ( $valeur eq '' ) {
      print "\n Ce programme ne peut pas se lancer a partir d'une unite reseau $unite:\n";
      print " dont la reconnexion au demarrage n'a pas ete programmee.\n\n";
      print " Deconnecter et reconnecter ce volume, puis relancer le batch.\n\n";   
      print " <<< APPUYER SUR LA TOUCHE ENTREE >>>";
      $wait = <STDIN>;
      exit 1;	
   }
   print "Le lancement apres redemarrage se fera sur l'unite reseau $unite: \nqui mappe le volume $UNCName\n"; 
 
   if ( $unite eq '\\' ) {
      print "\n Ce programme ne peut pas se lancer a partir d'un chemin UNC\n";
      print " Lier au prealable une unite reseau\n\n";   
      print " <<< APPUYER SUR LA TOUCHE ENTREE >>>";   
      $wait = <STDIN>;
      exit 1;	
   }
}
print "\n";



$unitelancement = $unite . ":";
$repertoirelancement = cwd();
$repertoirelancement =~ s/\//\\/g;


$batchlancement = $param;

$nomfichieraecrire = "$ENV{'TEMP'}\\sys_estlanceunefois.bat";
print "1) Generation du fichier local de lancement :\n";
print "\t" . uc($nomfichieraecrire) . "\n";
print "\tCe batch lance a son tour le programme ou batch :";
print "\n\t\t" . uc($batchlancement) . "\n";
print "\tApres s'etre place dans l'unite $unitelancement et le repertoire :";
print "\n\t\t" . uc($repertoirelancement) . "\n";

open(BATCH, ">$nomfichieraecrire");
    
print BATCH "\@ECHO OFF\n";
print BATCH "ECHO *****************************************************************\n";
print BATCH "ECHO * sys_EstLanceUneFois.bat                                       *\n";
print BATCH "ECHO * Ce fichier a ete genere par le script Sys_LanceUneFois.pl/exe *\n";
print BATCH "ECHO *****************************************************************\n";
print BATCH "ECHO * Ce batch enchaine la commande suivante :\n";
print BATCH "ECHO * $batchlancement\n";
print BATCH "ECHO *********************Fin de sys_EstLanceUneFois.bat**************\n";
print BATCH "\n";
print BATCH "ECHO                      Debut de $batchlancement\n";


print BATCH "$unitelancement\n";
print BATCH "CD $repertoirelancement\n";
print BATCH "$batchlancement\n";
close BATCH;

EcrireRegistreRunOnce();
exit;

sub EcrireRegistreRunOnce 
{
	$Registry->Delimiter("/");              
	my $registre;

	$registre = $Registry->{"CUser/Software/Microsoft/Windows/CurrentVersion/"};
	$registre->CreateKey("RunOnce");
	$valeurclef = $ENV{'COMSPEC'} . " /K " . $nomfichieraecrire;
	$registre->{"RunOnce/"}->SetValue("sys_LancementUnFois", $valeurclef , REG_SZ);
	
	
	print "2) affectation de la clef :\n\t" . uc("CUser/Software/Microsoft/Windows/CurrentVersion/RunOnce") . "\n\tpour son lancement au prochain demarrage\n";
	print "\tpar la valeur : \"$valeurclef\"\n";

	sleep 2;
}



##########################################################################

sub BanniereFranck
    {
  	my($titre, $date, $organisme) = @_;

        print "\n   ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ\n";
        printf(" Û %-72sÛ\n", $titre);
        print "ÚÄÄÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ\n";
        print "³                                                                            ³\n";
        print "³ Auteur : franck.oberlechner\@lachapellesurerdre.fr                          ³\n";
        $chaine = $organisme . " ¸ " . $date;
       printf("³          %-66s³\n", $chaine);
        print "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\n";
       printf("³          %-66s³\n", "D‚veloppement en ActiveState Perl v5.6");
        print "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\n";
    	print "\n";
    }  
  
