Функция 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) |
См. также раздел
Основные понятия
Другие ресурсы
Справочные материалы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по