WinMain是一个函数,该函数的功能是被系统调用,作为一个Win32程序的入口点。WinMain函数应初始化程用程序,显示主窗体,进入一个消息接受发送循环,这个循环是应用程序执行的其余部分的顶层控制结构。
int WINAPI WinMain (
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nShowCmd
);
hInstance:应用程序当前实例的句柄
hPrevInstance:应用程序先前实例的句柄。对于同一个程序打开两次,出现两个窗口第一次打开的窗口就是先前实例的窗口。对于一个Win32程序而言,该参数总是为null。因而在Win32下不能通过判断hPrevInstance是否为空来判断一个程序的另一个实例是否存在,要用其他方法。
如果需要检测另外一个实例是否已经存在,则使用CreateMutex函数创建一个独一无二的名字。即使互斥名已经存在,CreateMutex函数也是成功的,但是GetLastError函数将返回ERROR_ALREADY_EXISTS,这就表明应用程序有另外一个实例存在,因此它首先创建了互斥名。
lpCmdLine:指向应用程序命令行的字符串指针,不包括执行文件名。获得整个命令行,参见GetCommandLine。
nShowCmd:指明窗口如何显示。exe快捷方式有个选项指定窗口运行方式,或者在CreateProcess中都可以设置。