Поделиться через


Функция 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 GetCommandLine.

[in] nShowCmd

Тип: int

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

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

Тип: int

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

Замечания

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

WinMain должен инициализировать приложение, отобразить его главное окно и ввести цикл извлечения и отправки сообщений, который является структурой управления верхнего уровня для остальной части выполнения приложения. Завершите цикл сообщения при получении сообщения WM_QUIT. На этом этапе WinMain должен выйти WM_QUIT из приложения, возвращая значение, переданное в параметре сообщения wParam. Если WM_QUIT получено в результате вызова PostQuitMessage, значение wParam является значением параметра nExit Code функции 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 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка winbase.h (включая Windows.h)

См. также

концептуальные

CreateMutex

DispatchMessage

GetCommandLine

GetMessage

другие ресурсы

PostQuitMessage

Справочник

TranslateMessage

Windows