Comment afficher les propriétés Internet en une seule ligne de commande ! Et plus encore à propos de l'utilisation de Rundll32.
Rundll32

Author: Abdel YEZZA
Level: Begginer/Intermediate

Avertissement : Si vous modifiez des paramètres dans les différentes boîtes de dialogue résultantes des commandes ci-dessous, vous risquez peut-être des impacts négatifs, notamment par rapport à la sécurité d'Internet Explorer. Notez aussi que les confirmations ci-dessous s'appliquent uniquement si vous disposez de la version 7 d'Internet Explorer.
  1. Lancez une console (cmd.exe)
  2. Exécutez la commande : rundll32 inetcpl.cpl,LaunchInternetControlPanel
  3. Qu'obtient-on ?
  4. Lancez encore les commandes suivantes et remarquez à chaque fois la boîte de dialogue obtenue :
  • rundll32 inetcpl.cpl,OpenLanguageDialog
  • rundll32 inetcpl.cpl,OpenFontsDialog
  • rundll32 inetcpl.cpl,OpenFontsDialogEx
  • rundll32 inetcpl.cpl,ShowDeleteBrowsingHistoryDialog
  • rundll32 inetcpl.cpl,ShowFeedOptionsDialog
  • rundll32 inetcpl.cpl,DisplayPopupWindowManagementDialog
  • rundll32 inetcpl.cpl,LaunchAddSitesDialog
  • rundll32 inetcpl.cpl,LaunchConnectionDialog
  • rundll32 inetcpl.cpl,LaunchPrivacyDialog
  • rundll32 inetcpl.cpl,LaunchSecurityDialog
  • rundll32 inetcpl.cpl,LaunchSecurityDialogEx
  • rundll32 inetcpl.cpl,LaunchSiteCertDialog
  • rundll32 inetcpl.cpl,ResetIEtoDefaults
Je ne vous révèle pas pour le moment comment obtenir la liste de ces fonctions intermédiaires pour ouvrir les différentes boîtes de dialogues relatives à Internet Explorer ! On peut même aller plus loin, comme modifier le contenu des boîtes de dialogue par programmation en injectant des données et en validant les boutons.

Pour lancer l'applet (.cpl) Internet Explorer en affichant un onglet particulier par le biais de son index n en commençant par 0, il suffit de lancer la commande :
rundll32 shell32.dll,Control_RunDLL inetcpl.cpl,,n
Comme par exemple, pour afficher l'onglet Avancés, il suffit d'exécuter :
rundll32 shell32.dll,Control_RunDLL inetcpl.cpl,,6
Cette syntaxe fonctionne de la même façon pour toutes les applets. La formule la plus générale prend la forme :
rundll32 shell32.dll,Control_RunDLL <Nom de l'applet>,<Index>,<Arguments à passer>
La figure ci-dessous schématise le fonctionnement de Rundll32 :
shell32
Afin d'illustrer par un exemple concret du schéma ci-dessous, voici un extrait de code en C++ (version AINSI) permettant de lancer les propriétés d'un ordinateur Windows (l'applet sysdm.cpl):
typedef void (_stdcall *PFUNCTION_ENTRYPOINT)(
   HWND hwndStub,
   HINSTANCE hAppInstance,
   LPSTR lpCmdLine,
   int    nCmdShow
   );

PFUNCTION_ENTRYPOINT pEntryPoint=NULL;
HMODULE  hLib = LoadLibrary(_T("Shell32.dll"));		
if (hLib) pEntryPoint = (PFUNCTION_ENTRYPOINT) GetProcAddress(hLib, _T("Control_RunDLLA"));
if (pEntryPoint) pEntryPoint(NULL, ::GetModuleHandle(), _T("sysdm.cpl,,3"), SW_SHOW);

FreeLibrary(hLib);
Pour simplifier ces appels, un outil est disponible sous Windows, Control qui joue le rôle de la première partie, à savoir : rundll32 shell32.dll, Control_RunDLL. Voici un exemple pour afficher l'onglet Avancés des options Internet (voir ci-dessus):
control inetcpl.cpl,0,6
Notez que lancer cet outil sans paramètres ouvre tout simplement le panneau de configuration.

Voici un exemple pour installer un fichier MyInfFile.inf qui redémarre la machine si nécessaire sans demander à l'utilisateur:
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 131 C:\WINDOWS\INF\MyInfFile.inf
Dans cet exemple, shell32 charge la dll SETUPAPI.DLL, récupère l'adresse de la fonction InstallHinfSection puis l'exécute en lui passant les arguments :
DefaultInstall Section à installer (elle se trouve dans le fichier inf ci-dessous)
131 Constante indiquant le redémarrage (si nécessaire) sans le demander à l'utilisateur
C:\WINDOWS\INF\MyInfFile.inf le fichier inf
Consultez le site de Microsoft ou la documentation SDK pour plus d'information.

Voici une liste des commandes que l'on peut effectuer sur Windows Vista (certaines pouvant fonctionner également sur Windows XP, mais pas nécessairement de la même façon) :
Pour Lancer la commande
Gérer les éléments du menu Démarrer rundll32 appwiz.cpl,ConfigStartMenu
Aller sur le site de Microsoft Windows Market Place rundll32 appwiz.cpl,GetProgramsOnline
Gérer l'activation des fonctionnalités de Windows (services et composants) rundll32 appwiz.cpl,RunOCMW
Définir les paramètres par défaut de l'accès aux programmes (Navigateur par défaut, Client messagerie par défaut etc.) rundll32 appwiz.cpl,RunSPADW
Lancer le centre de sécurité Windows rundll32 shell32.dll,Control_RunDLL wscui.cpl
afficher les paramètre du pare-feu Windows rundll32 firewall.cpl,ShowControlPanel
Gérer le maintient du blocage ou débloquer des programmes rundll32 firewall.cpl,ShowNotificationDialogW
Lancer l'applet des options régionales et linguistiques rundll32 shell32.dll,Control_RunDLL intl.cpl,,n
n=0 pour éditer les différents formats
n=1 pour éditer l'emplacement géographique
n=2 pour éditer les options du clavier et des langue (services du texte et de langue)
n=3 pour la configuration des programmes non-Unicode et la configuration des profils standards (Default, LocalSystem, etc.)
Lancer les propriétés système de l'ordinateur local rundll32 sysdm.cpl,DisplaySYSDMCPL
Editer les variables d'environnement (utilisateur et système) rundll32 sysdm.cpl,EditEnvironmentVariables
Editer les profils locaux rundll32 sysdm.cpl,EditUserProfiles
Installer un nouveau matériel rundll32 hdwwiz.cpl,InstallNewDevice
Voici un site regroupant un bon nombre d'utilisation de Rundll32, mais pas celles propres à Vista : vbfrance. Un autre site regroupant un certain nombre d'utilisation de RunDll32 se trouve ici : http://www.ericphelps.com/batch/rundll/