Функция WinMain (winbase.h)

Предоставленная пользователем точка входа для графического приложения Windows.

WinMain — это обычное имя, используемое для точки входа приложения. Дополнительные сведения см. в подразделе "Примечания".

Синтаксис

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

Параметры

[in] hInstance

Тип: HINSTANCE

Дескриптор для текущего экземпляра приложения.

[in, optional] hPrevInstance

Тип: HINSTANCE

Дескриптор предыдущего экземпляра приложения. Этот параметр всегда имеет значение NULL. Если необходимо определить, существует ли уже другой экземпляр, создайте мьютекс с уникальным именем с помощью функции CreateMutex . CreateMutex завершится успешно, даже если мьютекс уже существует, но функция вернет ERROR_ALREADY_EXISTS. Это означает, что существует другой экземпляр приложения, так как сначала он создал мьютекс. Однако злоумышленник может создать этот мьютекс, прежде чем это сделать, и предотвратить запуск приложения. Чтобы избежать этой ситуации, создайте мьютекс со случайным именем и сохраните имя, чтобы его можно было получить только авторизованным пользователем. Кроме того, для этой цели можно использовать файл. Чтобы ограничить приложение одним экземпляром на пользователя, создайте заблокированный файл в каталоге профиля пользователя.

[in] lpCmdLine

Тип: LPSTR

Командная строка приложения, за исключением имени программы. Чтобы получить всю командную строку, используйте функцию GetCommandLine .

[in] nShowCmd

Тип: int

Управляет тем, как должно отображаться окно. Этот параметр может быть любым из значений, которые можно указать в параметре nCmdShow для функции ShowWindow .

Возвращаемое значение

Тип: int

Если функция завершается успешно при получении сообщения WM_QUIT , она должна вернуть значение выхода, содержащееся в параметре wParam этого сообщения. Если функция завершается перед вводом цикла сообщений, она должна вернуть ноль.

Комментарии

Имя WinMain используется по соглашению многими платформами программирования. В зависимости от платформы программирования вызов функции WinMain может предшествовать и следовать дополнительным действиям, характерным для этой платформы.

WinMain должен инициализировать приложение, отобразить его окно main и ввести цикл получения и отправки сообщения, который является структурой управления верхнего уровня для оставшейся части выполнения приложения. Завершать цикл сообщений при получении сообщения WM_QUIT . На этом этапе WinMain должен выйти из приложения, возвращая значение, переданное в параметре wParam сообщения WM_QUIT. Если WM_QUIT получен в результате вызова PostQuitMessage, значение wParam является значением параметра nExitCode функции PostQuitMessage. Дополнительные сведения см. в разделе Создание цикла сообщений.

Приложения ANSI могут использовать параметр lpCmdLine функции WinMain для доступа к строке командной строки, за исключением имени программы. Обратите внимание, что lpCmdLine использует тип данных LPSTR вместо типа данных LPTSTR . Это означает, что winMain не может использоваться программами Юникода. Функцию GetCommandLineW можно использовать для получения командной строки в виде строки Юникода. Некоторые платформы программирования могут предоставлять альтернативную точку входа, которая предоставляет командную строку Юникода. Например, в соответствии с Microsoft Visual Studio C++ для точки входа в Юникоде используется имя wWinMain .

Пример

В следующем примере кода демонстрируется использование WinMain

#include <windows.h>

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

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header winbase.h (включая Windows.h)

См. также раздел

Основные понятия

CreateMutex

DispatchMessage

GetCommandLine

GetMessage

Другие ресурсы

PostQuitMessage

Справочные материалы

TranslateMessage

Windows