WinMain, fonction (winbase.h)

Point d’entrée fourni par l’utilisateur pour une application graphique Windows.

WinMain est le nom conventionnel utilisé pour le point d’entrée de l’application. Pour plus d'informations, consultez la section Notes.

Syntaxe

int __clrcall WinMain(
  [in]           HINSTANCE hInstance,
  [in, optional] HINSTANCE hPrevInstance,
  [in]           LPSTR     lpCmdLine,
  [in]           int       nShowCmd
);

Paramètres

[in] hInstance

Type : HINSTANCE

Handle de l’instance actuelle de l’application.

[in, optional] hPrevInstance

Type : HINSTANCE

Handle de l’instance précédente de l’application. Ce paramètre est toujours NULL. Si vous devez détecter si un autre instance existe déjà, créez un mutex de nom unique à l’aide de la fonction CreateMutex. CreateMutex réussit même si le mutex existe déjà, mais la fonction retourne ERROR_ALREADY_EXISTS. Cela indique qu’une autre instance de votre application existe, car elle a d’abord créé le mutex. Toutefois, un utilisateur malveillant peut créer ce mutex avant de le faire et empêcher le démarrage de votre application. Pour éviter cette situation, créez un mutex nommé de façon aléatoire et stockez le nom afin qu’il ne puisse être obtenu que par un utilisateur autorisé. Vous pouvez également utiliser un fichier à cette fin. Pour limiter votre application à un instance par utilisateur, créez un fichier verrouillé dans le répertoire de profil de l’utilisateur.

[in] lpCmdLine

Type : LPSTR

Ligne de commande de l’application, à l’exclusion du nom du programme. Pour récupérer l’intégralité de la ligne de commande, utilisez la fonction GetCommandLine .

[in] nShowCmd

Type : int

Contrôle la façon dont la fenêtre doit être affichée. Ce paramètre peut être l’une des valeurs qui peuvent être spécifiées dans le paramètre nCmdShow pour la fonction ShowWindow .

Valeur retournée

Type : int

Si la fonction réussit, se terminant lorsqu’elle reçoit un message WM_QUIT , elle doit retourner la valeur de sortie contenue dans le paramètre wParam de ce message. Si la fonction s’arrête avant d’entrer la boucle de message, elle doit retourner zéro.

Remarques

Le nom WinMain est utilisé par convention par de nombreux frameworks de programmation. Selon l’infrastructure de programmation, l’appel à la fonction WinMain peut être précédé et suivi d’activités supplémentaires spécifiques à cette infrastructure.

Votre WinMain doit initialiser l’application, afficher sa fenêtre de main et entrer une boucle de récupération et de distribution des messages qui correspond à la structure de contrôle de niveau supérieur pour le reste de l’exécution de l’application. Terminez la boucle de message lorsqu’elle reçoit un message WM_QUIT . À ce stade, votre WinMain doit quitter l’application, en retournant la valeur passée dans le paramètre wParam du message WM_QUIT. Si WM_QUIT a été reçu suite à l’appel de PostQuitMessage, la valeur de wParam est la valeur du paramètre nExitCode de la fonction PostQuitMessage. Pour plus d’informations, consultez Création d’une boucle de message.

Les applications ANSI peuvent utiliser le paramètre lpCmdLine de la fonction WinMain pour accéder à la chaîne de ligne de commande, à l’exclusion du nom du programme. Notez que lpCmdLine utilise le type de données LPSTR au lieu du type de données LPTSTR . Cela signifie que WinMain ne peut pas être utilisé par les programmes Unicode. La fonction GetCommandLineW peut être utilisée pour obtenir la ligne de commande sous forme de chaîne Unicode. Certains frameworks de programmation peuvent fournir un autre point d’entrée qui fournit une ligne de commande Unicode. Par exemple, le conformateur Microsoft Visual Studio C++ utilise le nom wWinMain pour le point d’entrée Unicode.

Exemple

L’exemple de code suivant illustre l’utilisation de WinMain

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
    return MessageBox(NULL, "hello, world", "caption", 0);
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête winbase.h (inclure Windows.h)

Voir aussi

Conceptuel

CreateMutex

DispatchMessage

GetCommandLine

GetMessage

Autres ressources

PostQuitMessage

Référence

TranslateMessage

Windows