WinMain-Funktion (winbase.h)

Der vom Benutzer bereitgestellte Einstiegspunkt für eine grafische Windows-basierte Anwendung.

WinMain ist der herkömmliche Name, der für den Anwendungseinstiegspunkt verwendet wird. Weitere Informationen finden Sie in den Hinweisen.

Syntax

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

Parameter

[in] hInstance

Typ: HINSTANCE

Ein Handle für die aktuelle instance der Anwendung.

[in, optional] hPrevInstance

Typ: HINSTANCE

Ein Handle zum vorherigen instance der Anwendung. Dieser Parameter ist immer NULL. Wenn Sie erkennen müssen, ob bereits eine andere instance vorhanden ist, erstellen Sie mithilfe der CreateMutex-Funktion einen eindeutig benannten Mutex. CreateMutex ist auch dann erfolgreich, wenn der Mutex bereits vorhanden ist, aber die Funktion gibt ERROR_ALREADY_EXISTS zurück. Dies gibt an, dass eine weitere instance Ihrer Anwendung vorhanden ist, da zuerst der Mutex erstellt wurde. Ein böswilliger Benutzer kann diesen Mutex jedoch erstellen, bevor Sie dies tun, und verhindern, dass Ihre Anwendung gestartet wird. Um dies zu verhindern, erstellen Sie einen zufällig benannten Mutex, und speichern Sie den Namen, sodass er nur von einem autorisierten Benutzer abgerufen werden kann. Alternativ können Sie zu diesem Zweck eine Datei verwenden. Um Ihre Anwendung auf eine instance pro Benutzer zu beschränken, erstellen Sie eine gesperrte Datei im Profilverzeichnis des Benutzers.

[in] lpCmdLine

Typ: LPSTR

Die Befehlszeile für die Anwendung, mit Ausnahme des Programmnamens. Verwenden Sie die GetCommandLine-Funktion , um die gesamte Befehlszeile abzurufen.

[in] nShowCmd

Typ: int

Steuert, wie das Fenster angezeigt werden soll. Dieser Parameter kann jeder der Werte sein, die im nCmdShow-Parameter für die ShowWindow-Funktion angegeben werden können.

Rückgabewert

Typ: int

Wenn die Funktion erfolgreich ist und beendet wird, wenn sie eine WM_QUIT Nachricht empfängt, sollte sie den Exitwert zurückgeben, der im wParam-Parameter dieser Nachricht enthalten ist. Wenn die Funktion vor dem Eingeben der Nachrichtenschleife beendet wird, sollte sie null zurückgeben.

Hinweise

Der Name WinMain wird von vielen Programmierframeworks konventional verwendet. Abhängig vom Programmierframework kann dem Aufruf der WinMain-Funktion vorangestellt werden, gefolgt von zusätzlichen Aktivitäten, die für dieses Framework spezifisch sind.

Ihr WinMain sollte die Anwendung initialisieren, das fenster Standard anzeigen und eine Nachrichtenabruf- und -dispatchschleife eingeben, die die Steuerungsstruktur der obersten Ebene für den Rest der Ausführung der Anwendung darstellt. Beenden Sie die Nachrichtenschleife, wenn sie eine WM_QUIT Nachricht empfängt. An diesem Punkt sollte Ihr WinMain die Anwendung beenden und den Wert zurückgeben, der im wParam-Parameter der WM_QUIT Nachricht übergeben wurde. Wenn WM_QUIT als Ergebnis des Aufrufs von PostQuitMessage empfangen wurde, ist der Wert von wParam der Wert des nExitCode-Parameters der PostQuitMessage-Funktion. Weitere Informationen finden Sie unter Erstellen einer Nachrichtenschleife.

ANSI-Anwendungen können den lpCmdLine-Parameter der WinMain-Funktion verwenden, um auf die Befehlszeilenzeichenfolge zuzugreifen, mit Ausnahme des Programmnamens. Beachten Sie, dass lpCmdLine den LPSTR-Datentyp anstelle des LPTSTR-Datentyps verwendet. Dies bedeutet, dass WinMain nicht von Unicode-Programmen verwendet werden kann. Die GetCommandLineW-Funktion kann verwendet werden, um die Befehlszeile als Unicode-Zeichenfolge abzurufen. Einige Programmierframeworks bieten möglicherweise einen alternativen Einstiegspunkt, der eine Unicode-Befehlszeile bereitstellt. Der C++-Konformer von Microsoft Visual Studio verwendet beispielsweise den Namen wWinMain für den Unicode-Einstiegspunkt.

Beispiel

Im folgenden Codebeispiel wird die Verwendung von WinMain veranschaulicht.

#include <windows.h>

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winbase.h (Windows.h einschließen)

Siehe auch

Konzept

CreateMutex

DispatchMessage

GetCommandLine

GetMessage

Andere Ressourcen

PostQuitMessage

Referenz

TranslateMessage

Windows