일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
[GGG] 오래전 메일함을 뒤적이다가 누군가한테 보낸 메일 중에 재미난 내용이 있어서 소개해 봅니다. 저도 다른 분께 메일로 받은 내용 중 일부를 발췌해서 보낸 건데, 제목은 제가 임의로 붙인 겁니다. 그때도 덧으로 많은 생각이 들게 하는 글이라고 적었는데 지금 봐도 많은 생각을 하게 하는 글이네요. 제자들이 아인슈타인에게 선생님은 어떻게 학문에 성공하셨는지 그 비결을 물었답니다.세 가지 항목을 따로 때놓고 보면 성공이랑 그닥 관련 없는 팩터들 같아 보이지 않습니까? 그런데 또 붙여놓고 생각해보면 성공의 요소인 것도 같아보이네요. 오묘합니다. ㅎㅎ 성공 방정식의 세 가지 항목 중에서 한 가지도 못지키는 요즘인 것 같습니다. 좀 여유를 가지도록 노력해야 겠습니다. 그나저나 메일함을 보니 참 유치한 메일들이 많네요. 철없던 시절 철없이 휘갈겨 쓴 말도 안되는 메일들. 보면서 웃기도 하고, 그때가 그립기도 하고 그렇네요. 언젠가 먼 훗날엔 지금 쓴 글들을 보면서 그런 생각을 하고 있겠죠? ㅋㅋ 그때의 순수를 잃은 것 같아 조금은 아쉽습니다. 나이가 든다는 건 점점 순수를 잃어가는거라고 말했던 어느 작가분이 생각납니다. 진짜 가을이 오려나???? ㅋㅋㅋ |
[GGG] 정확한 OS 종류를 판단하는 것은 무척 중요한 일 입니다. 이 문서에 포함된 함수들은 VerifyVersion과 GetVersionEx함수를 사용하여 정확한 OS 종류를 판단합니다. 제공되는 함수는 아래와 같습니다. 각각의 함수가 판별하는 OS는 주석을 참고 하십시요. [CPP]BOOL WINAPI IsWin95() // 윈도우 95[CPP]#ifndef GETPROC #define GETPROC(dll, type, name) (type)GetProcAddress(dll, name) #endif typedef BOOL (WINAPI *fnVerifyVersionInfo)(LPOSVERSIONINFOEX, DWORD, DWORDLONG); typedef ULONGLONG (WINAPI *fnVerSetConditionMask)(ULONGLONG, DWORD, BYTE); BOOL _VerifyVersionInfo(LPOSVERSIONINFOEX lpVersionInfo , DWORD dwTypeMask , DWORDLONG dwConditionMask , BOOL *bVerified) { BOOL bRet = FALSE; HINSTANCE hDll = NULL; fnVerifyVersionInfo FVerifyVersionInfo; fnVerSetConditionMask FVerSetConditionMask; hDll = LoadLibrary("kernel32.dll"); if(hDll != NULL) { FVerifyVersionInfo = GETPROC(hDll , fnVerifyVersionInfo , "VerifyVersionInfoA"); FVerSetConditionMask = GETPROC(hDll , fnVerSetConditionMask , "VerSetConditionMask"); if(FVerifyVersionInfo != NULL && FVerSetConditionMask != NULL) { dwConditionMask = 0; if(dwTypeMask & VER_MAJORVERSION) dwConditionMask = FVerSetConditionMask(dwConditionMask , VER_MAJORVERSION , VER_EQUAL); if(dwTypeMask & VER_MINORVERSION) dwConditionMask = FVerSetConditionMask(dwConditionMask , VER_MINORVERSION , VER_EQUAL); if(dwTypeMask & VER_PLATFORMID) dwConditionMask = FVerSetConditionMask(dwConditionMask , VER_PLATFORMID , VER_EQUAL); if(dwTypeMask & VER_PRODUCT_TYPE) dwConditionMask = FVerSetConditionMask(dwConditionMask , VER_PRODUCT_TYPE , VER_EQUAL); *bVerified = FVerifyVersionInfo(lpVersionInfo , dwTypeMask , dwConditionMask); bRet = TRUE; } FreeLibrary(hDll); } return bRet; } BOOL WINAPI IsWin95() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 4; osi.dwMinorVersion = 0; osi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 4) && (osi.dwMinorVersion == 0) && (osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (osi.szCSDVersion[1] != 'C'); } BOOL WINAPI IsWin95OSR2() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 4; osi.dwMinorVersion = 0; osi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 4) && (osi.dwMinorVersion == 0) && (osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (osi.szCSDVersion[1] == 'C'); } BOOL WINAPI IsWin98() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 4; osi.dwMinorVersion = 10; osi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 4) && (osi.dwMinorVersion == 10) && (osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (osi.szCSDVersion[1] != 'A'); } BOOL WINAPI IsWin98SE() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 4; osi.dwMinorVersion = 10; osi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 4) && (osi.dwMinorVersion == 10) && (osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (osi.szCSDVersion[1] == 'A'); } BOOL WINAPI IsWinME() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 4; osi.dwMinorVersion = 90; osi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 4) && (osi.dwMinorVersion == 90) && (osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS); } BOOL WINAPI IsWin9X() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; bRet = _VerifyVersionInfo(&osi, VER_PLATFORMID, dwlConditionMask, &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS; } BOOL WINAPI IsWinNT4() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 4; osi.dwMinorVersion = 0; osi.dwPlatformId = VER_PLATFORM_WIN32_NT; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 4) && (osi.dwMinorVersion == 0) && (osi.dwPlatformId == VER_PLATFORM_WIN32_NT); } BOOL WINAPI IsWin2K() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 5; osi.dwMinorVersion = 0; osi.dwPlatformId = VER_PLATFORM_WIN32_NT; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 5) && (osi.dwMinorVersion == 0) && (osi.dwPlatformId == VER_PLATFORM_WIN32_NT); } BOOL WINAPI IsWinXP() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 5; osi.dwMinorVersion = 1; osi.dwPlatformId = VER_PLATFORM_WIN32_NT; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 5) && (osi.dwMinorVersion == 1) && (osi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (osi.wProductType == VER_NT_WORKSTATION); } BOOL WINAPI IsWinNET() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 5; osi.dwMinorVersion = 1; osi.wProductType = VER_NT_WORKSTATION; osi.dwPlatformId = VER_PLATFORM_WIN32_NT; DWORD type = VER_MAJORVERSION | VER_MINORVERSION | VER_PRODUCT_TYPE | VER_PLATFORMID; bRet = _VerifyVersionInfo(&osi, type, dwlConditionMask, &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 5) && (osi.dwMinorVersion == 1) && (osi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (osi.wProductType != VER_NT_WORKSTATION); } BOOL WINAPI IsWinNT() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwPlatformId = VER_PLATFORM_WIN32_NT; bRet = _VerifyVersionInfo(&osi , VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return osi.dwPlatformId == VER_PLATFORM_WIN32_NT; }[/CPP] |