📄 winmain.cpp
字号:
StartupInfo.cb = sizeof(STARTUPINFO) ;
GetStartupInfo ( & StartupInfo ) ;
if ( StartupInfo.dwFlags & STARTF_USESHOWWINDOW ) return 0 ;
else return 1 ;
}
#endif // defined _CONSOLE && ! defined NOCRT
////////////////////////////////////////////
// GETARGUMENT //
////////////////////////////////////////////
#if ! defined NOARG && ( defined _CONSOLE || defined _WINDOWS && ! defined _USRDLL ) && ! defined NOCRT
#ifndef _MSC_VER
static wchar_t **wargv_dummy_ ;
#endif
// 堷悢傪庢摼偡傞乮ANSI斉乯
char *GetArgumentA ( int nCount ) {
return __argv [ nCount ] ;
}
// 堷悢傪庢摼偡傞乮UNICODE斉乯
wchar_t *GetArgumentW ( int nCount ) {
return __wargv [ nCount ] ;
}
#ifdef _UNICODE
// 堷悢傪弶婜壔偡傞乮ANSI斉乯
// 惉岟偡傟偽 0 傪丄幐攕偡傟偽 0 埲奜傪曉偡
static int SetArgumentA ( void ) {
if ( ! ( __argv = (char**) malloc ( ( __argc + 1 ) * sizeof(char*) ) ) ) return 1 ;
for ( int nCount = 0 ; nCount <= __argc ; nCount ++ ) {
if ( ! __wargv [ nCount ] ) __argv [ nCount ] = NULL ;
else {
char *string = w2adup ( __wargv [ nCount ] ) ;
if ( ! string ) return 1 ;
__argv [ nCount ] = string ;
}
}
return 0 ;
}
#else
// 堷悢傪弶婜壔偡傞乮UNICODE斉乯
// 惉岟偡傟偽 0 傪丄幐攕偡傟偽 0 埲奜傪曉偡
static int SetArgumentW ( void ) {
if ( ! ( __wargv = (wchar_t**) malloc ( ( __argc + 1 ) * sizeof(wchar_t*) ) ) ) return 1 ;
for ( int nCount = 0 ; nCount <= __argc ; nCount ++ ) {
if ( ! __argv [ nCount ] ) __wargv [ nCount ] = NULL ;
else {
wchar_t *string = a2wdup ( __argv [ nCount ] ) ;
if ( ! string ) return 1 ;
__wargv [ nCount ] = string ;
}
}
return 0 ;
}
#endif
#endif // ! defined NOARG && ( defined _CONSOLE || defined _WINDOWS && ! defined _USRDLL ) && ! defined NOCRT
////////////////////////////////////////////
// GETWINMAINCMDLINE //
////////////////////////////////////////////
#if defined NOARG && ! defined _USRDLL
#ifdef NOCRT
#undef ismbblead
#define ismbblead IsDBCSLeadByte
#endif
// WinMain 宍幃偺堷悢傪庢摼偡傞乮ANSI斉乯
char *GetWinMainCmdLineA ( void ) {
char *szCommandLine ;
static char szDummy [] = "" ;
int IsInQuote = 0 ;
szCommandLine = GetCommandLineA () ;
if ( ! szCommandLine ) szCommandLine = szDummy ;
while ( *szCommandLine > 0x20 || *szCommandLine && IsInQuote ) {
if ( *szCommandLine == '\"' ) IsInQuote = ! IsInQuote ;
if ( ismbblead ( (unsigned char) *szCommandLine ) && *( szCommandLine + 1 ) ) szCommandLine ++ ;
szCommandLine ++ ;
}
while ( *szCommandLine && *szCommandLine <= 0x20 ) szCommandLine ++ ;
return szCommandLine ;
}
// WinMain 宍幃偺堷悢傪庢摼偡傞乮UNICODE斉乯
wchar_t *GetWinMainCmdLineW ( void ) {
wchar_t *szCommandLine ;
static wchar_t szDummy [] = L"" ;
int IsInQuote = 0 ;
szCommandLine = GetCommandLineW () ;
if ( ! szCommandLine ) szCommandLine = szDummy ;
while ( *szCommandLine > 0x20 || *szCommandLine && IsInQuote ) {
if ( *szCommandLine == '\"' ) IsInQuote = ! IsInQuote ;
szCommandLine ++ ;
}
while ( *szCommandLine && *szCommandLine <= 0x20 ) szCommandLine ++ ;
return szCommandLine ;
}
#endif // defined NOARG && ! defined _USRDLL
////////////////////////////////////////////
// a/wdup () //
////////////////////////////////////////////
#if ! defined NOCRT
// ANSI暥帤楍傪儚僀僪暥帤偵曄姺偟偰暋惢偡傞
// free() 傪巊偭偰夝曻偡傞偙偲
// 幐攕偟偨傜 NULL 傪曉偡
wchar_t *a2wdup ( const char *string ) {
return a2wduplen ( string, -1, NULL ) ;
}
// ANSI暥帤楍傪儚僀僪暥帤偵曄姺偟偰暋惢偡傞乮挿偝傪庢摼乯
// 挿偝偑 -1 側傜僰儖廔抂暥帤楍偲尒側偡
// 弌椡偝傟偨挿偝傪 p_dstlen 偵奿擺乮昁梫偱側偗傟偽 NULL 偱傕壜乯
// free() 傪巊偭偰夝曻偡傞偙偲
// 幐攕偟偨傜 NULL 傪曉偡
wchar_t *a2wduplen ( const char *string, int srclen, int *p_dstlen ) {
int length ;
wchar_t *buffer ;
if ( ! ( length = MultiByteToWideChar ( CP_ACP, 0, string, srclen, NULL, 0 ) ) ) return NULL ;
if ( ! ( buffer = (wchar_t*) malloc ( length * sizeof(wchar_t) ) ) ) return NULL ;
if ( ! ( length = MultiByteToWideChar ( CP_ACP, 0, string, srclen, buffer, length ) ) ) { free ( buffer ) ; return NULL ; }
if ( p_dstlen ) *p_dstlen = length ;
return buffer ;
}
// 儚僀僪暥帤楍傪ANSI暥帤楍偵曄姺偟偰暋惢偡傞
// 曄姺偱偒側偄暥帤偑偁傟偽 errno 偵 EILSEQ 傪僙僢僩偡傞
// free() 傪巊偭偰夝曻偡傞偙偲
// 幐攕偟偨傜 NULL 傪曉偡
char *w2adup ( const wchar_t *string ) {
return w2aduplen ( string, -1, NULL ) ;
}
// 儚僀僪暥帤楍傪ANSI暥帤楍偵曄姺偟偰暋惢偡傞乮挿偝傪庢摼乯
// 挿偝偑 -1 側傜僰儖廔抂暥帤楍偲尒側偡
// 弌椡偝傟偨挿偝傪 p_dstlen 偵奿擺乮昁梫偱側偗傟偽 NULL 偱傕壜乯
// 曄姺偱偒側偄暥帤偑偁傟偽 errno 偵 EILSEQ 傪僙僢僩偡傞
// free() 傪巊偭偰夝曻偡傞偙偲
// 幐攕偟偨傜 NULL 傪曉偡
char *w2aduplen ( const wchar_t *string, int srclen, int *p_dstlen ) {
int IsUsedDefaultChar = 0 ;
int length ;
char *buffer ;
if ( ! ( length = WideCharToMultiByte ( CP_ACP, 0, string, srclen, NULL, 0, NULL, NULL ) ) ) return NULL ;
if ( ! ( buffer = (char*) malloc ( length * sizeof(char) ) ) ) return NULL ;
if ( ! ( length = WideCharToMultiByte ( CP_ACP, 0, string, srclen, buffer, length, NULL, & IsUsedDefaultChar ) ) ) { free ( buffer ) ; return NULL ; }
if ( p_dstlen ) *p_dstlen = length ;
if ( IsUsedDefaultChar ) errno = EILSEQ ;
return buffer ;
}
#endif // ! defined NOCRT
////////////////////////////////////////////
// strdup_expand () //
////////////////////////////////////////////
#if ! defined NOCRT
// 嵟戝挿傪巜掕偟偰暥帤傪暋惢偡傞乮ANSI斉乯
// string 偺挿偝偑 maxlen 埲忋側傜 NULL 傪曉偡
// 巜掕偝傟偨挿偝傪梋暘偵妋曐偡傞
char *strdup_expand ( const char *string, size_t maxlen, size_t addlen ) {
size_t len = strlen ( string ) ;
if ( len >= maxlen ) return NULL ;
char *buffer = (char*) malloc ( ( len + addlen + 1 ) * sizeof(char) ) ;
if ( buffer ) strcpy ( buffer, string ) ;
return buffer ;
}
// 嵟戝挿傪巜掕偟偰暥帤傪暋惢偡傞乮UNICODE斉乯
// string 偺挿偝偑 maxlen 埲忋側傜 NULL 傪曉偡
// 巜掕偝傟偨挿偝傪梋暘偵妋曐偡傞
wchar_t *wcsdup_expand ( const wchar_t *string, size_t maxlen, size_t addlen ) {
size_t len = wcslen ( string ) ;
if ( len >= maxlen ) return NULL ;
wchar_t *buffer = (wchar_t*) malloc ( ( len + addlen + 1 ) * sizeof(wchar_t) ) ;
if ( buffer ) wcscpy ( buffer, string ) ;
return buffer ;
}
#endif // ! defined NOCRT
////////////////////////////////////////////
// osver / winver //
////////////////////////////////////////////
#if ! defined _MSC_VER || _MSC_VER >= 1500 || defined NOCRT || defined OSVER_WINVER_TEST
unsigned int get_osver_winver_ ( int is_get_winver ) {
static unsigned int osver ;
static unsigned int winver ;
if ( ! winver ) {
#if defined NOCRT
HANDLE hProcessHeap = GetProcessHeap () ;
OSVERSIONINFOA *pOsVersionInfo = (OSVERSIONINFOA*) HeapAlloc ( hProcessHeap, HEAP_ZERO_MEMORY, sizeof(OSVERSIONINFOA) ) ;
#else
OSVERSIONINFOA OsVersionInfo = { 0 } ;
OSVERSIONINFOA *pOsVersionInfo = & OsVersionInfo ;
#endif
if ( pOsVersionInfo ) {
pOsVersionInfo->dwOSVersionInfoSize = sizeof(OSVERSIONINFOA) ;
GetVersionExA ( pOsVersionInfo ) ;
if ( pOsVersionInfo->dwPlatformId != VER_PLATFORM_WIN32_NT ) osver = ( pOsVersionInfo->dwBuildNumber & 0x7FFF ) | 0x8000 ;
else osver = ( pOsVersionInfo->dwBuildNumber & 0x7FFF ) ;
winver = ( pOsVersionInfo->dwMajorVersion << 8 ) + pOsVersionInfo->dwMinorVersion ;
#if defined NOCRT
HeapFree ( hProcessHeap, 0, pOsVersionInfo ) ;
#endif
}
}
if ( is_get_winver ) return winver ;
else return osver ;
}
#endif // ! defined _MSC_VER || _MSC_VER >= 1500 || defined NOCRT || defined OSVER_WINVER_TEST
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -