Share via


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 程式無法使用 WinMainGetCommandLineW 函式可用來取得命令行做為 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)

另請參閱

概念

CreateMutex

DispatchMessage

GetCommandLine

GetMessage

其他資源

PostQuitMessage

參考

TranslateMessage

Windows