发信人: u_rover(柠檬水) 
整理人: wenbobo(2003-08-23 10:59:18), 站内信件
 | 
 
 
ImageList_Destroy(SendMessage(ghTabWin, 0x1302, 0, 0));  
         ClearClipViewer(hWnd);  
         UninitDDE();  
         SaveJobs();  
         CleanLogWinAndStatusbar();  
         BackupJobHistory();  
         KillTimer(hWnd, 2);  
         KillTimer(hWnd, 3);  
         KillTimer(hWnd, 4);  
         KillTimer(hWnd, 8);  
         KillTimer(hWnd, 9);  
         if (gbBasketTimer)  
             KillTimer(hWnd, 13);  
         PostQuitMessage(0);  
         break;  
 
     case WM_QUERYENDSESSION:  
         break;  
 
     case WM_COMMAND:  
         break;  
     }  
 
     return DefWindowProc(hWnd, uMsg, wParam, lParam);  
 }  
 
 // sizeof(LanguageData) == 0x13c  
 typedef struct tagLanguageData {  
     char LanguageName[50];  
     char LanguagePath[MAX_PATH + 2];  
     LanguageData* next;  
 } LanguageData, *PLanguageData;  
 
 // Search a specific language from a linked list  
 LanguageData* SearchLanguageDataList(const char* LanguageName)  
 {  
     for (LanguageData* ld = gLanguageDataPtr; ld; ld = ld->next)  
         if (!lstrcmp(ld->LanguageName, LanguageName))  
             return ld;  
     return NULL;  
 }  
 
 // Add a language to the linked list  
 LanguageData* AddLanguageData(const char* LanguageName, const char* LanguagePath)  
 {  
     if (SearchLanguageDataList(LanguageName))  
         return NULL;  
 
     LanguageData* NewLd = (LanguageData*)malloc(sizeof(LanguageData));  
     if (NewLd == NULL) {  
         ShowErrMsg("Malloc");  
         return NULL;  
     }  
 
     strcpy(NewLd->LanguageName, LanguageName);  
     if (LanguagePath)  
         lstrcpy(NewLd->LanguagePath, LanguagePath);  
     else  
         NewLd->LanguagePath[0] = 0;  
 
     LanguageData* InsertAfter = NULL;  
     for (LanguageData* ld = gLageuageDataPtr; ld; ld = ld->next) {  
         if (lstrcmp(ld->LanguageName, LanguageName) >= 0) break;  
         InsertAfter = ld;  
     }  
 
     if (InsertAfter == NULL) {  
         NewLd->next = gLanguageDataPtr;  
         gLanguageDataPtr = NewLd;  
     }  
     else {  
         NewLd->next = InsertAfter->next;  
         InsertAfter->next = NewLd;  
     }  
     gLanguageDataCount++;  
 
     return NewLd;  
 }  
 
 // Wrap of _vsnprintf, initialize the buf with 0 before call _vsnprintf  
 int ZeroVsnprintf(char* buf, int sz, const char* form, va_list argptr)  
 {  
     //////////////////////////////////////////////////////////////////////////  
     // From the disassembly code, the author seemed to use folling statement:  
     // memset(buf, sz, 0);  
     // I think it's wrong  
     //////////////////////////////////////////////////////////////////////////  
     memset(buf, 0, sz);  
     _vsnprintf(buf, sz, form, argptr);  
 }  
 
 int SetLanguage(const char* LanguageName)  
 {  
     LanguageData* ld;  
     if ((ld = SearchLanguageDataList(LanguageName)) == NULL)  
         return -1;  
 
     gpCurrentLanguage = ld;  
 
     SendMessage(ghWndMain, 0x810, 0, 0);  
     SendMessage(ghFolderWin, 0x810, 0, 0);  
     SendMessage(ghJobList, 0x810, 0, 0);  
     SendMessage(ghTabWin, 0x810, 0, 0);  
     SendMessage(ghStatusbar, 0x810, 0, 0);  
     SendMessage(ghLogWin, 0x810, 0, 0);  
     SendMessage(ghInfoListWin, 0x810, 0, 0);  
     SendMessage(ghLinkListWin, 0x810, 0, 0);  
 
     return 1;  
 }  
 
 void InitLanguage()  
 {  
     char FileName[MAX_PATH], LanguagePath[MAX_PATH];  
     WIN32_FIND_DATA fd;  
     HANDLE hFind;  
     char LanguageName[52];  
     HKEY hKey;  
     DWORD cbData;  
 
     memset(LanguageName, 0, 50);  
     AddLanguageData(English, NULL);  
       
     // Get all language data  
     ZeroVsnprintf(FileName, MAX_PATH, "%s\\%s\\*.ini", ModuleDir, language);  
     if ((hFind = FindFirstFile(FileName, &fd) != INVALID_HANDLE_VALUE)  
         do {  
             ZeroVsnprintf(LanguagePath, MAX_PATH, "%s\\%s\\%s", ModuleDir, language, fd.cFileName);  
             GetPrivateProfileString("Info", Language, &NullChar, LanguageName, 50, buf);  
             if (lstrlen(LanguageName) && lstrcmp(LanguageName, English))  
                 AddLanguageData(LanguageName, LanguagePath);  
         } while (FindNextFile(hFind, &fd));  
     FindClose(hFind);  
       
     // Set current language to the one specified in Registry  
     RegOpenKeyEx(HKEY_CURRENT_USER, "Software\NetAnts\Localization", 0, KEY_ALL_ACCESS, &hKey);  
     cbData = 50;  
     if (RegQueryValueEx(hKey, Language, NULL, NULL, NULL, &cbData) != ERROR_SUCCESS ||  
         !lstrlen(LanguageName) || !SearchLanguageDataList(LanguageName))  
     {  
         lstrcpy(LanguageName, English);  
     }  
     SetLanguage(LanguageName);  
     RegCloseKey(hKey);  
       
     return TRUE;  
 }  
 
 char gsOemTitle[100];  
 char gsOemWebsite[100];  
 char gsOemSplash[MAX_PATH];  
 int GetOemData(void)  
 {  
     HKEY hKey;  
     int cbData;  
 
     RegOpenKeyEx(HKEY_CURRENT_USER, "Software\NetAnts\OEM", NULL, KEY_ALL_ACCESS, &hKey);  
     cbData = 100;  
     if (RegQueryValueEx(hKey, "Title", NULL, NULL, &gsOemTitle, &cbData))  
         gsOemTitle[0] = 0;  
 
     cbData = 100;  
     if (RegQueryValueEx(hKey, "Website", NULL, NULL, &gsOemWebsite, &cbData))  
         gsOemWebsite[0] = 0;  
 
     cbData = MAX_PATH;  
     if (RegQueryValueEx(hKey, "Splash", NULL, NULL, &gsOemSplash, &cbData))  
         gsOemSplash[0] = 0;  
 
     RegCloseKey(hKey);  
     return TRUE;  
 }  
 
 HANDLE ghSubagentTrapEvent;  
 AsnObjectIdentifier gFirstSupportedRegion;  
 
 BOOL (*pfnSnmpExtensionInit)(  
   DWORD dwUptimeReference,                    // see NOTE below  
   HANDLE *phSubagentTrapEvent,                // trap event handle  
   AsnObjectIdentifier *pFirstSupportedRegion  // first MIB subtree  
 );  
 BOOL (*pfnSnmpExtensionQuery)(  
   BYTE bPduType,                  // SNMPv1 PDU request type  
   SnmpVarBindList *pVarBindList,  // pointer to variable bindings  
   AsnInteger32 *pErrorStatus,    // pointer to SNMPv1 error status  
   AsnInteger32 *pErrorIndex      // pointer to the error index  
 );  
 
 #include "snmp.h"  
 
 // load inetmib1.dll (Small Netword Management Protocol) and get the address of  
 //    SnmpExtensionInit  
 //    SnmpExtensionQuery  
 int InitSNMP(void)  
 {  
     HMODULE hModule;  
 
     gbSnmpInitialized = FALSE;  
 
     if ((hModule = LoadLibrary("inetmib1.dll")) == NULL)  
         return -1;  
 
     pfnSnmpExtensionInit = GetProcAddress(hModule, "SnmpExtensionInit");  
     pfnSnmpExtensionQuery = GetProcAddress(hModule, "SnmpExtensionQuery");  
     if (pfnSnmpExtensionInit == NULL || pfnSnmpExtensionQuery == NULL) {  
         FreeLibrary(hModule);  
         return -1;  
     }  
       
     if (!(*pfnSnmpExtensionInit)(GetTickCount(),  
         &ghSubagentTrapEvent, &gFirstSupportedRegion))  
     {  
         ShowErrMsg("SnmpExtensionInit");  
         return -1;  
     }  
     gbSnmpInitialized = TRUE;  
     return 1;  
 }  
 
 DWORD (*pfnRasDial) (  
   LPRASDIALEXTENSIONS lpRasDialExtensions,  
 DWORD (*pfnRasDial) (  
   LPRASDIALEXTENSIONS lpRasDialExtensions,  
                           // pointer to function extensions data  
   LPCTSTR lpszPhonebook,  // pointer to full path and file  
                           //  name of phone-book file  
   LPRASDIALPARAMS lpRasDialParams,  
                           // pointer to calling parameters data  
   DWORD dwNotifierType,  // specifies type of RasDial event handler  
   LPVOID lpvNotifier,    // specifies a handler for RasDial events  
   LPHRASCONN lphRasConn  // pointer to variable to receive  
                           //  connection handle  
 );  
 
 DWORD (*pfnRasHangUp) (  
   HRASCONN hrasconn  // handle to the RAS connection to hang up  
 );  
 
 DWORD (*pfnRasEnumEntries*) (  
   LPCTSTR reserved,              // reserved, must be NULL  
   LPTCSTR lpszPhonebook,        // pointer to full path and  
                                 //  file name of phone-book file  
   LPRASENTRYNAME lprasentryname, // buffer to receive  
                                 //  phone-book entries  
   LPDWORD lpcb,                  // size in bytes of buffer  
   LPDWORD lpcEntries            // number of entries written  
                                 //  to buffer  
 );  
 
 DWORD (*pfnRasEnumConnections)(  
   LPRASCONN lprasconn,  // buffer to receive connections data  
   LPDWORD lpcb,          // size in bytes of buffer  
   LPDWORD lpcConnections // number of connections written to buffer  
 );  
 
 DWORD (*pfnRasGetConnectStatus) (  
   HRASCONN hrasconn,  // handle to RAS connection of interest  
   LPRASCONNSTATUS lprasconnstatus  
                       // buffer to receive status data  
 );  
 
 DWORD (*pfnRasGetErrorString)(  
   UINT uErrorValue,        // error to get string for  
   LPTSTR lpszErrorString,  // buffer to hold error string  
   DWORD cBufSize          // size, in characters, of buffer  
 );  
 
 DWORD (*pfnRasGetEntryDialParams)(  
   LPCTSTR lpszPhonebook,  // pointer to the full path and  
                           //  file name of the phone-book file  
   LPRASDIALPARAMS lprasdialparams,  
                           // pointer to a structure that  
                           //  receives the connection parameters  
   LPBOOL lpfPassword      // indicates whether the user's  
                           //  password was retrieved  
 );  
 
 
 
 
  ----  我曾经不只一次的在网络上寻找MM, 
 可是,网络一次一次的让我失望, 
 因为,那些MM不是一个比一个丑, 
 就是一个比一个恐怖, 
 直到我遇见她, 
 一个比我小很多的小MM, 
 我对她几乎是一见钟情, 
 可是,她没有发觉我 
 发觉我已经喜欢上了她, 
 她仍然每次上网 
 都是那么的可爱, 
 可是,却不知道 
 我因她而日子过得了无生趣 
 我对她表白,得到的只是 
 年龄是个问题,空间是个距离  | 
 
 
 |