发信人: 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,
我对她几乎是一见钟情,
可是,她没有发觉我
发觉我已经喜欢上了她,
她仍然每次上网
都是那么的可爱,
可是,却不知道
我因她而日子过得了无生趣
我对她表白,得到的只是
年龄是个问题,空间是个距离 |
|