📄 zmsg.c
字号:
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_GETRANDOM), g_hWnd, GetRandomDlgProc);
}
if (g_szRandom[0] == 0)
{
iResult = ZERROR_CHECKRANDOM;
}
return iResult;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 发送线程
void WINAPI SendThread()
{
int i;
int iMsg;
int iLen;
int iSignLen;
int iResult;
int iLineCount;
BYTE szMsg[1024];
BYTE szTemp[256];
WCHAR wszMsg[512];
SendDlgItemMessage(g_hWnd, IDC_BUTTON_SEND, WM_SETTEXT, 0, (LPARAM) "取消(&C)");
// 如果尚未登录
if (g_szSession[0] == '\0')
{
if (g_hLogin)
{
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 0, (LPARAM) "等待登录完成......");
while (g_hLogin)
Sleep(100);
}
else
ZmccLogin();
}
// 登录成功
if (g_szSession[0] != '\0')
{
// 开始逐行发送短信
iLineCount = (int) SendDlgItemMessage(g_hWnd, IDC_EDIT_MESSAGE, EM_GETLINECOUNT, 0, 0);
for (i = 0, iMsg = 0; i < iLineCount; i++)
{
// 获取当前行的文字
*((WORD *) szTemp) = 150;
iLen = (int) SendDlgItemMessage(g_hWnd, IDC_EDIT_MESSAGE, EM_GETLINE, i, (LPARAM) szTemp);
if (iLen == 0)
continue;
szTemp[min(iLen, 150)] = '\0';
iMsg++;
iLen = MultiByteToWideChar(CP_ACP, 0, szTemp, -1, wszMsg, sizeof(wszMsg)) - 1;
if (iLen > 70)
{
wszMsg[70] = L'\0';
iLen = 70;
}
else
{
// 根据字数决定是否要添加签名
if (g_bSign/* && (g_uGateWay != GW_NBUC)*/)
{
iSignLen = lstrlenW(g_wszSign);
if (iLen + iSignLen <= 70)
{
lstrcpyW(&wszMsg[iLen], g_wszSign);
iLen += iSignLen;
}
}
// 填充字符,使短信内容达到 70 字
if (g_bFillChar && g_wszFillChar[0] && (g_uGateWay != GW_ZMSHOP) && (g_uGateWay != GW_NBUC))
{
for (; iLen < 70; iLen++)
wszMsg[iLen] = g_wszFillChar[0];
wszMsg[70] = L'\0';
}
}
WideCharToMultiByte(CP_ACP, 0, wszMsg, -1, szTemp, sizeof(szTemp), NULL, NULL);
// 对数据进行 URL 编码
URLEncode(szTemp, szMsg);
//if (g_uGateWay == GW_NBUC)
//{
//szMsg[64 * 3] = 0;
//}
// 显示信息
wsprintf(szTemp, "正在发送第 %d 条短信......", iMsg);
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 0, (LPARAM) szTemp);
// 获取 Random 值
if ((g_uGateWay != GW_ZMSHOP) && (g_uGateWay != GW_NBUC) && (g_szRandom[0] == 0))
{
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 1, (LPARAM) "正在校验");
iResult = ZmccGetRandom();
if (iResult != ZERROR_SUCCESS)
break;
}
// 发送
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 1, (LPARAM) "正在发送");
iResult = ZmccSendMessage(szMsg, iLen);
if (iResult != ZERROR_SUCCESS)
break;
}
if (iMsg == 0)
iResult = ZERROR_NOCONTENT;
else
wsprintf(szTemp, "成功发送 %d 条短信。", iMsg);
// 显示结果信息
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 0,
(LPARAM) ((iResult == ZERROR_SUCCESS) ? szTemp : c_szErrorMsg[iResult]));
// 显示当前状态
if ((iResult >= ZERROR_SOCKET) && (iResult <= ZERROR_SESSION))
{
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 1, (LPARAM) "未登录");
g_szSession[0] = '\0';
SendThread();
}
else
{
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 1, (LPARAM) "已登录");
SendDlgItemMessage(g_hWnd, IDC_EDIT_MESSAGE, EM_SETSEL, 0, -1);
}
}
SendDlgItemMessage(g_hWnd, IDC_BUTTON_SEND, WM_SETTEXT, 0, (LPARAM) "发送(&S)");
CloseHandle(g_hSend);
g_hSend = NULL;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 短信发送
int WINAPI ZmccSendMessage(LPCSTR pszMessage, int iLen)
{
int iResult;
UINT uReceive;
//char szSign[128];
char szTemp[18100];
if (g_uGateWay == GW_NBUC)
{
uReceive = 3150;
// 构造 HTTP 请求
//WideCharToMultiByte(CP_ACP, 0, g_wszSign, -1, szSign, sizeof(szSign), NULL, NULL);
wsprintf(szTemp,
"DestMPNumber=%s&MPType1=on&Name=&ShenFen=99&Content=%s&B1=%%B7%%A2%%CB%%CD%%B6%%CC%%D1%%B6&MPType=0",
g_szMobile, pszMessage);
_StrToDebug(szTemp);
// 发送 HTTP 请求并获取结果
iResult = HttpRequest(
"211.91.2.221",
80,
"/sms165/sm/SendSM_Send.asp",
"211.91.2.221",
"http://211.91.2.221/sms165/sm/SendSM_Input.asp",
g_szSession,
szTemp,
lstrlen(szTemp),
szTemp,
&uReceive,
g_szProxyAddress,
g_wProxyPort,
TRUE,
g_hWnd);
if (iResult == ZERROR_SUCCESS)
{
szTemp[uReceive] = 0;
_StrToDebug(szTemp);
if (strstr(szTemp, "短讯发送失败"))
iResult = ZERROR_SENDMESSAGE;
else if (strstr(szTemp, "HTTP/1.1 100") || strstr(szTemp, "短讯已成功"))
iResult = ZERROR_SUCCESS;
else
iResult = ZERROR_SENDMESSAGE;
}
}
else if (g_uGateWay == GW_ZMSHOP)
{
// 发送 HTTP 请求并获取结果
uReceive = 256;
wsprintf(szTemp, "sendto=%s&smschar=%s&Submit=%%B7%%A2%%CB%%CD%%B6%%CC%%D0%%C5",
g_szMobile, pszMessage);
iResult = HttpRequest(
"www.zmshop.com",
80,
"/sms/sms_up.asp",
"www.zmshop.com",
"http://www.zmshop.com/sms/sms_user.asp",
g_szSession,
szTemp,
lstrlen(szTemp),
szTemp,
&uReceive,
g_szProxyAddress,
g_wProxyPort,
FALSE,
g_hWnd);
if (iResult == ZERROR_SUCCESS)
{
_StrToDebug(szTemp);
szTemp[uReceive] = 0;
if (strstr(szTemp, "sms_ok.asp"))
iResult = ZERROR_SUCCESS;
else
iResult = ZERROR_SENDMESSAGE;
}
}
else
{
SYSTEMTIME stTime;
GetLocalTime(&stTime);
uReceive = 16700;
// 构造 HTTP 请求
wsprintf(szTemp,
"userID=%s&mobileNo=%s&radiobutton=radiobutton&dx2=%%C7%%EB%%D1%%A1%%D4%%F1%%B3%%A3%%D3%%C3%%B6%%CC%%D0%%C5&body=%s&len=%d&destAddr2=%s&checkRndBox=%s&mode=0&year=2004&month=5&day=%d&hour=%d&minute=%d&Submit=%%B7%%A2%%CB%%CD",
//"userID=%s&mobileNo=%s&body=%s&len=%d&destAddr2=%s&checkRndBox=%s&mode=0",
g_szUserID, g_szUserMobile, pszMessage, iLen, g_szMobile, g_szRandom, stTime.wDay, stTime.wHour, stTime.wMinute);
_StrToDebug(szTemp);
// 发送 HTTP 请求并获取结果
iResult = HttpRequest(
g_szZmccHost,
80,
"/MsgSendChooseAction.do",
"www.zmcc.com.cn",
"http://www.zmcc.com.cn/loginAction.do",
g_szSession,
szTemp,
lstrlen(szTemp),
szTemp,
&uReceive,
g_szProxyAddress,
g_wProxyPort,
TRUE,
g_hWnd);
#ifdef _DEBUG
{
HANDLE hFile = CreateFile("F:\\x.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
WriteFile(hFile, szTemp, uReceive, &uReceive, NULL);
CloseHandle(hFile);
}
#endif
if (iResult == ZERROR_SUCCESS)
{
szTemp[uReceive] = 0;
_StrToDebug(szTemp);
if (strstr(szTemp, "手机号码必须为浙江移动号码") || strstr(szTemp, "不是浙江移动的手机号码"))
iResult = ZERROR_MOBILEPHONE;
else if (strstr(szTemp, "短信发送成功"))
iResult = ZERROR_SUCCESS;
else
iResult = ZERROR_SENDMESSAGE;
}
}
return iResult;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// URL 数据编码
int WINAPI URLEncode(LPCSTR pszSrc, LPSTR pszDest)
{
char * pSrc;
char * pDest;
for (pSrc = (char *) pszSrc, pDest = pszDest; *pSrc; pSrc++)
{
if (IsCharAlphaNumeric(*pSrc))
{
*pDest = *pSrc;
pDest++;
}
else
{
wsprintf(pDest, "%%%02X", ((BYTE) *pSrc));
pDest += 3;
}
}
*pDest = '\0';
return (int) (pDest - pszDest);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 检查更新
void WINAPI CheckUpdate(HWND hWnd)
{
PCHAR p;
PBYTE pFile;
int iResult;
HANDLE hFile;
DWORD dwOutSize;
DWORD dwVersion;
DWORD dwFileSize;
char szTemp[512];
pFile = NULL;
hFile = NULL;
iResult = ZERROR_SUCCESS;
__try
{
// 发送 HTTP 请求并获取结果
dwOutSize = sizeof(szTemp) - 1;
iResult = HttpRequest(
"Yonsm.8800.org",
80,
"/ZMSG/ZMSG.asp",
"Yonsm.8800.org",
NULL,
NULL,
NULL,
0,
szTemp,
&dwOutSize,
g_szProxyAddress,
g_wProxyPort,
FALSE,
hWnd);
if (iResult != ZERROR_SUCCESS)
__leave;
szTemp[dwOutSize] = 0;
_StrToDebug(szTemp);
p = strstr(szTemp, "FileSize=");
if (p == NULL)
{
SetDlgItemText(hWnd, IDC_STATIC_STATUS, "无法获取文件大小。");
__leave;
}
dwFileSize = atoi(p + 9);
if (dwFileSize < 64 * 1024)
{
SetDlgItemText(hWnd, IDC_STATIC_STATUS, "文件大小错误。");
__leave;
}
p = strstr(szTemp, "Version=");
if (p == NULL)
{
SetDlgItemText(hWnd, IDC_STATIC_STATUS, "无法获取版本号。");
__leave;
}
dwVersion = atoi(p + 8);
if (dwVersion <= ZMSG_VERSION)
{
SetDlgItemText(hWnd, IDC_STATIC_STATUS, "没有发现新的版本。");
__leave;
}
wsprintf(szTemp, "发现新的版本: %d.%d.%d。",
(DWORD) dwVersion / 100,
((DWORD) dwVersion % 100) / 10,
(DWORD) dwVersion % 10);
SetDlgItemText(hWnd, IDC_STATIC_STATUS, szTemp);
pFile = (PBYTE) HeapAlloc(GetProcessHeap(), 0, dwFileSize + 512);
if (pFile == NULL)
{
SetDlgItemText(hWnd, IDC_STATIC_STATUS, "无法分配内存。");
__leave;
}
// 发送 HTTP 请求并获取结果
dwOutSize = -1;
iResult = HttpRequest(
"Yonsm.8800.org",
80,
"/ZMSG/ZMSG.exe",
"Yonsm.8800.org",
NULL,
NULL,
NULL,
0,
pFile,
&dwOutSize,
g_szProxyAddress,
g_wProxyPort,
FALSE,
hWnd);
if (iResult != ZERROR_SUCCESS)
__leave;
p = strstr(pFile, "\r\n\r\n");
if (p == NULL)
{
SetDlgItemText(hWnd, IDC_STATIC_STATUS, "无法获取文件内容。");
__leave;
}
if ( dwFileSize != (dwOutSize - (p - pFile) - 4))
{
SetDlgItemText(hWnd, IDC_STATIC_STATUS, "文件大小不正确。");
__leave;
}
lstrcpy(szTemp, g_szIniFileName);
p = StrRChr(szTemp, NULL, '.');
if (p == NULL)
p = szTemp + lstrlen(szTemp);
lstrcpy(p, ".new");
hFile = CreateFile(szTemp, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
SetDlgItemText(hWnd, IDC_STATIC_STATUS, "无法创建文件。");
__leave;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -