Les fichiers .gid

Ces fichiers sont des fichiers d'index que Windows crée la première fois qu'il ouvre un fichier d'aide (extension .hlp) . Si on le supprime, il sera recréé la prochaine fois que l'on ouvrira le fichier d'aide. On peut "préparer" ce travail (qui peut être long et fasitidieux parfois) en forçant la création de ce fichier gid , à l'aide d'une commande simple :

Dans une fenêtre de commande, taper :

winhelp -g nom_du_fichier.hlp

ou, s'il y a plusieurs fichiers HLP a traiter :
for %1 in (*.hlp) do winhelp -g %1

Création de fichiers CAB (cabinet)

Les fichiers à extension .cab ("cabinet") sont couramment utilisés dans l'installation de logiciel (Microsoft). Ils contiennent, généralement sous forme compressée, un ou plusieurs fichiers. Si la plupart des outils de décompression de fichiers (Winzip p.ex.) savent les ouvrir et extraire leurs composants, ils ne permettent pas d'en créer. Or on peut avoir besoin de le faire (p.ex. pour modifier ponctuellement une distribution de logiciel, en la personnalisant)

Il existe un petit utilitaire pour cela,  fourni avec les kit de développement, mais généralement difficile à trouver. Il s'appelle cabarc.exe. C'est un exécutable 32 bits, d'origine Microsoft, en mode console (à lancer dans une fenêtre de commandes)

Téléchargement :

Cliquer ici pour télécharger cabarc.exe (69 ko)

Un SDK est disponible gratuitement sur le site de Microsoft : cabsdk.exe (463 ko)
Il permet de réaliser des applications créant et ouvrant des fichiers .cab
Il contient également l' outil cabarc.exe

Création de fichiers autorun.inf

Il est possible de lancer automatiquement un traitement quelconque lors de l'ouverture d'un disque logique (partition de disque dur) ou plus généralement lors de l'insertion d'un CDROM.
Pour cela, la racine du disque (ou CD) doit contenir un fichier nommé obligatoirement autorun.inf, fichier texte contenant un certain nombre de commandes.

Sa structure est la suivante :

[autorun]
<commande1>=<........>
<commande2>=<........>
<commande3>=<........>
 ...

Les commandes utilisables sont les suivantes: 

icon

Spécifie une icône représentant le disque concerné dans l'explorateur

Syntaxe
icon=iconfilename[,index]
Paramètres
  • iconfilename 
    Nom d'un fichier .ico, .bmp, .exe, ou .dll contenant l'icône. 
    Si un fichier contient plus d'une icône, il faut alors préciser son index (à partir de zéro)
Exemple
icon=\bin\MonProg.exe,2

3ème icône du fichier monprog.exe du répertoire bin

Remarque Le fichier icône doit être dans le même répertoire que le fichier spécifié dans la commande open (si elle existe)

label
Spécifie une étiquette (texte) représentant le disque concerné dans l'explorateur.
Syntaxe
label=TexteEtiquette
Paramètres
  • TexteEtiquette
    texte contenant l'étiquette.
    Les espaces sont autorisés.
Exemple
label=Disque de boot
Remarque Si une icône est aussi spécifiée, l'étiquette sera affichée en dessous.
(personnellement, je n'ai pas réussi à faire fonctionner cette option!)

open

Spécifie le chemin complet de l'application à lancer quand on ouvre le disque

Syntaxe
open=[exepath\]exefile [param1 [param2] ...]
Paramètres
  • exepath 
    Chemin complet du répertoire contenant le fichier exécutable.
    S'il est omis, ce fichier doit être dans la racine.
  • exefile
    Nom du fichier exécutable.
Exemple
open=\bin\MonProg.exe 
Remarque  

shellexecute Spécifie une application ou un fichier de données lancé par la fonction système ShellExecuteEx.
Syntaxe
shellexecute=[filepath\]filename[param1, [param2]...]
Paramètres
  • filepath 
    Chemin complet du répertoire contenant le fichier de données ou l'exécutable.
    S'il est omis, ce fichier doit être dans la racine.
  • filename 
    Nom du fichier. 
    Si c'est un exécutable, il sera lancé. 
    Si c'est un fichier de données, il doit être d'un type connu, c'est à dire associé à une application. 
    ShellExecuteEx va alors lancer l'application en question, avec le fichier en paramètre. 
  • paramx
    paramètres éventuels devant être passés à ShellExecuteEx.
Exemple
shellexecute=\docs\index.html
Remarque Cette commande est similaire à open, mais elle autorise en plus à lancer un fichier de données associé à une application.

Elle ne fonctionne qu'avec la version 5.00 (et au-delà) de la librairie SHELL32.DLL, fournie avec Windows ME et 2000 (et au delà).

Cela signifie que la commande shellexecute est inopérante sous Windows 95, 98 et NT4.
Dans ce cas, on peut faire appel à l'utilitaire que j'ai développé :
execute.exe (24 ko) (gratuit!)
que l'on placera à la racine du CDROM, et qui lancera le fichier désiré par la commande :
open=execute.exe nom_du_fichier


shell\commande Ajoute une commande personnalisée dans le menu contextuel du disque.
Syntaxe
shell\commande\command=fichier.exe 
shell\commande=item_du_menu
Paramètres
  • commande
    Le nom (arbitraire) de la commande. 
    Il ne doit pas contenir d'espace. par défaut, il sera affiché dans le menu.
  • fichier.exe
    Chemin et nom d'un fichier exécutable. 
  • item_du_menu
    Spécifie le texte affiché dans le menu contextuel. 
    S'il est omis, le nom de la commande sera indiqué. 
    On peut définir un raccourci clavier en insérant le caractère ampersand ("&")
Exemple
shell\commande\command=\bin\MonProg.exe 
shell\commande=Mon super-&programme
Remarque La commande shell\command=item_de_menu est facultative

shell Spécifie la commande par défaut dans le menu contextuel.
Syntaxe
shell=commande
Paramètres
  • commande 
    La commande correspondante. 
    Le libellé et l'action à entreprendre doivent être définis dans une commande shell\commande (voir ci-dessus)
Exemple
shell\alire\command=notepad doc\lisezmoi.txt
shell\alire=&Infos importantes! 
shell=alire

On définit une commande appelée alire, qui va apparaître dans le menu contextuel comme commande par défaut, sous le nom Infos importantes!, et va provoquer le lancement du bloc-notes chargé par le fichier \doc\lisezmoi.txt.
La lettre "I" sera un raccourci.

Remarque Quand un utilisateur effectue un click droit sur l'icône du disque, un menu contextuel apparaît. Si un fichier autorun.inf existe, la commande par défaut est tirée de ce fichier s'il contient la commande shell=xxxx.
Cette commande est alors exécutée par un double-clic sur l'icône.

Exemple récapitulatif

Soit un CDROM contenant :

le fichier autorun.inf sera ainsi constitué :

[autorun]
icon=\dessins\homer.ico
shellexecute=\docs\simpsons.html
shell\alire\command=notepad \docs\lisezmoi.txt 
shell\alire=à propos de ce CD! 
shell=alire

On ne peut pas utiliser la commande open pour ouvrir le fichier HTML, car cette commande ne concerne que les exécutables. Il faudrait alors soit incorporer un navigateur autonome dans le CD, soit connaître exactement le navigateur de l'utilisateur, ce qui est difficilement réalisable.

La commande Shellexecute commence par rechercher dans la BDR l'application associée au document, puis la lance en lui passant le fichier en paramètres (seulement sous Windows ME, 2000 XP, et au delà)

Problème de licence avec Access 97

Il arrive fréquemment, après désinstallation d'Access 97, qu'on ne puisse plus le réinstaller, la procédure d'installation signalant un défaut de licence.

C'est un bug connu, pour lequel Microsoft a fourni des solutions.
Microsoft avait commencé par écrire l'article n° Q141373 :

"There is no license" Error Starting Microsoft Access http://support.microsoft.com/support/kb/articles/q141/3/73.asp

Mais la manipulation décrite y est tellement longue et complexe que Microsoft a du concevoir un outil nommé AcLicn97.exe et destiné à corriger ce bug !

"The AcLicn97.exe file contains a tool that corrects the problem discussed in this article so that you can run Microsoft Access 97 successfully."

Il est décrit dans l'article n° Q191224 :

"AcLicn97.exe Available for Download on MSLhttp://support.microsoft.com/support/kb/articles/q191/2/24.asp

Son téléchargement direct est à l'adresse suivante :

http://download.microsoft.com/download/access97/Update/1.0/W98/EN-US/Aclicn97.exe
ou encore ici

(Ce fichier a une taille de 82 ko)

Utilitaires d'éjection et fermeture de CDROM

Voici 2 utilitaires Windows 32 bits  en mode console (à insérer dans un fichier batch, et/ou pour lesquels on pourra créer des raccourcis sur le bureau) destinés à éjecter et à fermer un CDROM :

Ils font tous les deux appel à la librairie winmm.dll, qui gère l'API MCI (Media Control Interface)

La syntaxe en est très simple :

ejectCD <lettre_de_lecteur>
closeCD <lettre_de_lecteur>
(casse indifférente, présence du ":" final facultative)

Exemples : 
    ejectcd X
    closeCD k:

S'ils sont appliqués à autre chose que des lecteurs de CDROM (disque dur par exemple), un message d'erreur sera affiché (sans conséquence) :

M:\devstudio\myprojects>closeCD c:

erreur MCI_OPEN :
Impossible d'exécuter le fichier spécifié sur le périphérique MCI spécifié. 
Le fichier est peut-être endommagé, de format incorrect ou il n'y a pas de 
gestionnaire disponible pour ce format.

Utilitaires de conversion OEM - ANSI

Quand on veut consulter un fichier texte, on est souvent confronté à des problèmes de police de caractères suivant que l'affichage a lieu sous Windows ou sous DOS (ou dans une fenêtre de commandes sous Windows). Cela concerne essentiellement les caractères diacritiques (lettres accentuées, cédille, caractères DOS semi graphiques, ...)
Cela est du au codage différent des caractères :

Par exemple, si on récupère le résultat d'une commande "ping" dans un fichier texte, et que l'on affiche ce fichier avec le bloc-notes (notepad), on obtient ceci :

C:>ping www.inria.fr > testping.txt

C:>notepad testping.txt

Envoi d'une requˆte 'ping' sur williwaw.inria.fr [138.96.64.15] avec 32 octets de donn‚esÿ:

R‚ponse de 138.96.64.15ÿ: octets=32 temps=62 ms TTL=241
R‚ponse de 138.96.64.15ÿ: octets=32 temps=62 ms TTL=241
R‚ponse de 138.96.64.15ÿ: octets=32 temps=63 ms TTL=241
R‚ponse de 138.96.64.15ÿ: octets=32 temps=63 ms TTL=241

Statistiques Ping pour 138.96.64.15:
Paquetsÿ: envoy‚s = 4, re‡us = 4, perdus = 0 (perte 0%),
Dur‚e approximative des boucles en millisecondesÿ:
minimum = 62ms, maximum = 63ms, moyenne = 62ms

De même, si on imprime dans un fichier texte le contenu d'un écran d'aide de MS DOS (commande "help"), le fichier obtenu est difficilement lisible sous Windows :

Remarques Exemples
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

FIND

Recherche une chaŒne de texte dans un ou plusieurs fichiers.

A la fin de la recherche, FIND affiche les lignes de texte contenant la
chaŒne sp‚cifi‚e.

Syntaxe

FIND [/V] [/C] [/N] [/I] "chaŒne" [[lecteur:][chemin]fichier[...]] 


Certains éditeurs de texte sous Windows (UltraEdit en est un) offrent la possibilité de conversion OEM-ANSI. Mais cela impose d'ouvrir le fichier, de sélectionner le menu de conversion, puis celui d'enregistrement sous un autre nom, ...

C'est pourquoi j'ai conçu deux scripts en VBScript qui effectuent les conversions de fichiers OEM vers ANSI et inversement.
Ils peuvent de plus accepter les flux standards stdin et stout en entrée et sortie, si bien qu'on peut les insérer dans une commande faisant intervenir des redirections (piping)

Fonction Script (source) Téléchargement
Conversion ANSI vers OEM ansi2oem.vbs ansi2oem.vbs
Conversion OEM vers ANSI oem2ansi.vbs oem2ansi.vbs

Utilisation avec nom de fichiers explicites:

La syntaxe est très simple :

ansi2oem <nom-fichier-source> <nom-fichier-destination>
oem2ansi <nom-fichier-source> <nom-fichier-destination>

Exemple

H:\WSH>oem2ansi c:\dos\helpfind.txt c:\dos\helpfindansi.txt
Conversion terminée

H:\WSH>notepad c:\dos\helpfindansi.txt
Remarques Exemples
----------------------------------------------------------------------------

FIND

Recherche une chaîne de texte dans un ou plusieurs fichiers.

A la fin de la recherche, FIND affiche les lignes de texte contenant la
chaîne spécifiée.

Syntaxe

FIND [/V] [/C] [/N] [/I] "chaîne" [[lecteur:][chemin]fichier[...]]

Utilisation avec redirection (piping):

La commande doit obligatoirement et explicitement faire intervenir le moteur de script CSCRIPT.EXE

La syntaxe est donc de la forme (exemples) :

applicationOEM | cscript oem2ansi.vbs > fichieransi.txt
applicationANSI | cscript ansi2oem.vbs | applicationOEM

Exemple :

H:\WSH>ping www.inria.txt | cscript oem2ansi.vbs > testping.txt

H:\WSH>notepad testping.txt

Envoi d'une requête 'ping' sur williwaw.inria.fr [138.96.64.15] avec 32 octets de données :

Réponse de 138.96.64.15 : octets=32 temps=78 ms TTL=241
Réponse de 138.96.64.15 : octets=32 temps=62 ms TTL=241
Réponse de 138.96.64.15 : octets=32 temps=63 ms TTL=241
Réponse de 138.96.64.15 : octets=32 temps=63 ms TTL=241

Statistiques Ping pour 138.96.64.15:
Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
minimum = 62ms, maximum = 78ms, moyenne = 66ms

Si on oublie "cscript" dans la commande, cela va générer une erreur :

H:\WSH>ping www.inria.fr | oem2ansi.vbs > testping.txt
H:\WSH\oem2ansi.vbs(78, 1) (null): Descripteur non valide

Utilitaire de déclenchement de l'économiseur d'écran (avec gestion de mot de passe éventuel)

On peut avoir besoin parfois de lancer immédiatement l'économiseur d'écran, par exemple pour verrouiller l'ordinateur (si le mot de passe a été activé)

Une solution simple serait de créer un raccourci sur le bureau d'un fichier économiseur d'écran (extension .scr).

Le problème est que cette méthode est très imparfaite :

Si on a installé Microsoft Office et sa barre d'outils, on dispose d'un bouton permettant de lancer l'économiseur, avec saisie obligatoire du mot de passe au retour :

Étant donné qu'on ne dispose pas toujours de MS Office, j'ai conçu un utilitaire (exécutable) qui remplit le même rôle. Il a été écrit en Delphi, et son principe est basé sur l'envoi d'un message Windows WM_SYSCOMMAND, avec le paramètre SC_SCREENSAVE .

Il fonctionne sous toute version de Windows (9X/ME, NT/W2K/XP). Il se présente sous la forme d'un exécutable unique (setscr.exe) ne nécessitant aucune installation. Il peut être placé dans n'importe quel dossier.
Son usage est entièrement gratuit.

setscr.zip (198 ko)

Après téléchargement et décompression, il suffit de placer un raccourci de cet exécutable sur le bureau (par exemple) :

 

Utilitaire d'exécution d'application avec définition de priorité

Sous Windows NT/2000/XP/2003, chaque processus possède une priorité d'exécution que l'on peut afficher ou définir dans le gestionnaire de tâches :

La plupart des applications possèdent une priorité Normale

Le Gestionnaire de tâches, par contre, a une priorité Haute

Un économiseur d'écran a une priorité Basse

Il existe une priorité maximale, dite Temps réel, qui est exceptionnelle, et peut entraîner des problèmes au niveau de la souris (bloquée) et du fonctionnement du cache disque.

A partir de Windows 2000, on rencontre 2 niveaux intermédiaires supplémentaires : Supérieure à la normale et Inférieure à la normale.
Ces niveaux n'existent pas sous NT4.

Si on exécute n'importe quelle application (sauf le gestionnaire de tâches ou un économiseur d'écran) depuis l'explorateur, le menu démarrer/exécuter ou une fenêtre de commandes, on ne peut pas définir ce niveau de priorité, qui sera fixé à "Normale".

Or on peut avoir parfois besoin d'exécuter des programmes nécessitant une priorité élevée (scrutation de processus, analyseur de  modifications dans des fichiers, ..), ou au contraire basse (modification automatique et périodique de l'interface, ..)

J'ai conçu un utilitaire (écrit en Delphi), utilisable en ligne de commandes (depuis un script .bat ou .cmd par exemple), qui permet d'exécuter une application quelconque en définissant le niveau de priorité d'exécution de l'application.

Si on le lance sans paramètres, une aide s'affiche :

  • Sous Windows NT4 les niveaux BELOW et ABOVE ne sont pas cités.
  • Le nom du fichier exécutable peut ne pas comporter de chemin complet si son répertoire est défini dans la variable d'environnement PATH, ou encore s'il est le même que celui de l'outil XRUN.
  • Les paramètres (nom d'exécutable et paramètres éventuels à passer à l'application) doivent être encadrés par des guillemets s'ils contiennent des espaces.
  • L'outil vérifie l'existence de l'exécutable, ainsi que la valeur de la priorité :

     
  • Cet utilitaire fonctionne sous Windows 9x/ME, mais il a peu d'intérêt vu la gestion limitée des processus sous ces systèmes d'exploitation.

Il se présente sous la forme d'un exécutable unique (xrun.exe) ne nécessitant aucune installation. Il peut être placé dans n'importe quel dossier, mais il peut s'avérer pratique de le placer dans le dossier %systemroot%  ou %systemroot%\system32.
Son usage est entièrement gratuit.

xrun.zip (209 ko)