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 函式建立唯一命名的 mutex。 即使 mutex 已經存在,CreateMutex 仍會成功,但函式會傳回ERROR_ALREADY_EXISTS。 這表示應用程式的另一個實例存在,因為它會先建立 mutex。 不過,惡意使用者可以先建立此 Mutex,再執行並防止應用程式啟動。 若要避免這種情況,請建立隨機命名的 mutex 並儲存名稱,使其只能由授權使用者取得。 或者,您也可以針對此目的使用檔案。 若要將您的應用程式限制為每個使用者一個實例,請在使用者的配置檔目錄中建立鎖定的檔案。
[in] lpCmdLine
類型: LPSTR
應用程式的命令行,不包括程序名稱。 若要擷取整個命令行,請使用 GetCommandLine 函式。
[in] nShowCmd
類型: int
控制窗口的顯示方式。 此參數可以是可在 ShowWindow 函式的 nCmdShow 參數中指定的任何值。
傳回值
類型: int
如果函式成功,在收到 WM_QUIT 訊息時終止,它應該會傳回該訊息 的 wParam 參數中包含的結束值。 如果函式在輸入訊息迴圈之前終止,它應該會傳回零。
備註
許多程式設計架構都會使用 WinMain 名稱。 視程式設計架構而定, WinMain 函式的呼叫可以在前面,後面接著該架構特定的其他活動。
您的 WinMain 應該初始化應用程式、顯示其主視窗,然後輸入訊息擷取和分派迴圈,這是應用程式執行其餘部分的最上層控制結構。 在收到 WM_QUIT 訊息時終止訊息迴圈。 此時, 您的 WinMain 應該結束應用程式,並傳回傳入 WM_QUIT 訊息 wParam 參數中的值。 如果因為呼叫 PostQuitMessage 而收到WM_QUIT,wParam 的值就是 PostQuitMessage 函式的 nExitCode 參數的值。 如需詳細資訊,請參閱 建立訊息迴圈。
ANSI 應用程式可以使用 WinMain 函式的 lpCmdLine 參數來存取命令行字串,不包括程式名稱。 請注意, lpCmdLine 會使用 LPSTR 數據類型,而不是 LPTSTR 數據類型。 這表示 Unicode 程式無法使用 WinMain 。 GetCommandLineW 函式可用來取得命令行做為 Unicode 字串。 某些程式設計架構可能會提供提供 Unicode 命令行的替代進入點。 例如,Microsoft Visual Studio C++ 編譯程式會針對 Unicode 進入點使用 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 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | winbase.h (包含 Windows.h) |
另請參閱
概念
其他資源
參考
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應