📄 zmsg.c
字号:
{
// 中止发送线程
TerminateThread(g_hSend, 0);
CloseHandle(g_hSend);
g_hSend = NULL;
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 0, (LPARAM) "短信发送被取消。");
SendDlgItemMessage(g_hWnd, IDC_STATUS,
SB_SETTEXT, 1, (LPARAM) ((g_szSession[0] == '\0') ? "未登录" : "已登录"));
SendDlgItemMessage(g_hWnd, IDC_BUTTON_SEND, WM_SETTEXT, 0, (LPARAM) "发送(&S)");
}
break;
// 设置
case IDC_BUTTON_SETTING:
if (DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_SETTING), g_hWnd, (DLGPROC) SettingDlgProc) == IDCANCEL)
break;
case IDC_BUTTON_LOGIN:
// 停止发送
if (g_hSend)
{
// 如果正在登录,先结束登录线程
TerminateThread(g_hSend, 0);
CloseHandle(g_hSend);
g_hSend = NULL;
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 0, (LPARAM) "短信发送被取消。");
SendDlgItemMessage(g_hWnd, IDC_STATUS,
SB_SETTEXT, 1, (LPARAM) ((g_szSession[0] == '\0') ? "未登录" : "已登录"));
SendDlgItemMessage(g_hWnd, IDC_BUTTON_SEND, WM_SETTEXT, 0, (LPARAM) "发送(&S)");
}
// 设置更改,重新登录
if (g_hLogin)
{
// 如果正在登录,先结束登录线程
TerminateThread(g_hLogin, 0);
CloseHandle(g_hLogin);
}
// 创建登录线程
g_hLogin = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) ZmccLogin, NULL, 0, &i);
break;
//case IDC_BUTTON_GETRANDOM:
// DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_GETRANDOM), g_hWnd, GetRandomDlgProc);
// break;
// 关于
case IDC_BUTTON_ABOUT:
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUT), g_hWnd, (DLGPROC) AboutDlgProc);
break;
// 退出
case IDC_BUTTON_EXIT:
OnSaveSetting();
// 关闭线程
if (g_hLogin)
{
TerminateThread(g_hLogin, 0);
CloseHandle(g_hLogin);
}
if (g_hSend)
{
TerminateThread(g_hSend, 0);
CloseHandle(g_hSend);
}
EndDialog(g_hWnd, 0);
break;
default:
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 命令消息处理
void WINAPI OnZmsgUpdate(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
PBYTE p;
HANDLE hFile;
DWORD dwOutSize;
BYTE szTemp[1024];
char szBatName[MAX_PATH];
char szExeName[MAX_PATH];
char szExePath[MAX_PATH];
char szExeFullPath[MAX_PATH];
wsprintf(szTemp,
"你正在使用的 %s 版本是 %d.%d.%d%s,现在已经检测到更高的版本:\n\n"
" 版本信息: %d.%d.%d%s\n\n"
" 文件大小: %d 字节\n\n"
"要关闭程序并进行升级更新吗?",
STR_APPNAME,
ZMSG_VERSION / 100,
(ZMSG_VERSION % 100) / 10,
ZMSG_VERSION % 10,
(ZMSG_VERSION % 2) ? " (测试版)" : NULL,
(DWORD) wParam / 100,
((DWORD) wParam % 100) / 10,
(DWORD) wParam % 10,
((DWORD) wParam % 2) ? " (测试版)" : NULL,
(DWORD)lParam);
if (MessageBox(hWnd, szTemp, STR_APPNAME, MB_ICONQUESTION | MB_YESNO) == IDYES)
{
lstrcpy(szBatName, g_szIniFileName);
p = StrRChr(szBatName, NULL, '.');
if (p == NULL)
p = szBatName + lstrlen(szBatName);
lstrcpy(p, ".bat");
hFile = CreateFile(szBatName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
MessageBox(hWnd, "程序更新失败,可能是目标路径不可写。", STR_APPNAME, MB_ICONSTOP);
}
else
{
lstrcpy(szExeFullPath, g_szIniFileName);
p = StrRChr(szExeFullPath, NULL, '.');
if (p)
{
*p = 0;
}
lstrcpy(szExePath, szExeFullPath);
p = StrRChr(szExePath, NULL, '\\');
if (p)
{
*(p++) = 0;
}
wsprintf(szExeName, "%s.exe", p ? p : STR_APPNAME);
wsprintf(szTemp,
":REPEAT\r\n"
"DEL \"%s.exe\"\r\n"
"IF EXIST \"%s.exe\" GOTO REPEAT\r\n"
"MOVE \"%s.new\" \"%s.exe\"\r\n"
"START /D \"%s\" %s\r\n"
"DEL %%0\r\n",
szExeFullPath, szExeFullPath, szExeFullPath, szExeFullPath, szExePath, szExeName);
WriteFile(hFile, szTemp, lstrlen(szTemp), &dwOutSize, 0);
CloseHandle(hFile);
szBatName[lstrlen(szBatName) - 1] = 't';
ShellExecute(NULL, NULL, szBatName, NULL, NULL, SW_HIDE);
SendMessage(g_hWnd, WM_ZMSGNOTIFY, 0, WM_LBUTTONUP);
SendMessage(hWnd, WM_CLOSE, 0, 0);
SendMessage(g_hWnd, WM_CLOSE, 0, 0);
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 登录函数
int WINAPI ZmccLogin()
{
char * p;
char * pEnd;
int iResult;
UINT uReceive;
char szTemp[25100];
// 如果没有用户名或者没有密码
if ((g_szUserName[0] == '\0') || (g_szPassword[0] == '\0'))
{
SendMessage(g_hWnd, WM_COMMAND, MAKEWPARAM(IDC_BUTTON_SETTING, 0), 0);
iResult = ZERROR_NOACCOUNT;
}
else
{
g_szSession[0] = 0;
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 0, (LPARAM) "正在登录......");
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 1, (LPARAM) "正在登录");
// 构造 HTTP 请求
if (g_uGateWay == GW_ZMSHOP)
{
wsprintf(szTemp,
"action1=&chk_basketdetail_id=&traceshopcode=&tracegdsid=&shopcode=&cctshopcode=&cctgdsid=&ccttype=&cctodrid=&"
"uid=%s&pwd=%s&Submit2=%%B5%%C7%%C2%%BC", g_szUserName, g_szPassword);
}
else
{
wsprintf(szTemp,
(g_uGateWay == GW_NBUC) ? "ID=%s&Password=%s&BrowerVer=IE&B1=%%BD%%F8%%C8%%EB%%CF%%B5%%CD%%B3" :
"userName=%s&userPass=%s&refer=%%2FMsgSendChoose.jsp%%3FzmccCatalog%%3D0801",
g_szUserName, g_szPassword);
}
if (g_uGateWay == GW_ZMSHOP)
{
uReceive = 640;
iResult = HttpRequest(
"www.zmshop.com",
80,
"/order/mbrloginseek.asp",
"www.zmshop.com",
"http://www.zmshop.com/order/mbrlogin.asp",
NULL,
szTemp,
lstrlen(szTemp),
szTemp,
&uReceive,
g_szProxyAddress,
g_wProxyPort,
FALSE,
g_hWnd);
}
else if (g_uGateWay == GW_NBUC)
{
uReceive = 399;
iResult = HttpRequest(
"211.91.2.221",
80,
"/sms165/pass.asp",
"211.91.2.221",
NULL,
NULL,
szTemp,
lstrlen(szTemp),
szTemp,
&uReceive,
g_szProxyAddress,
g_wProxyPort,
FALSE,
g_hWnd);
}
else
{
uReceive = 25000;
iResult = HttpRequest(
g_szZmccHost,
80,
"/loginAction.do",
"www.zmcc.com.cn",
"http://www.zmcc.com.cn/MsgSendChoose.jsp?zmccCatalog=0801",
NULL,
szTemp,
lstrlen(szTemp),
szTemp,
&uReceive,
g_szProxyAddress,
g_wProxyPort,
TRUE,
g_hWnd);
}
if (iResult == ZERROR_SUCCESS)
{
szTemp[uReceive] = 0;
_StrToDebug(szTemp);
// 分析结果
if (((g_uGateWay == GW_ZMSHOP) && (strstr(szTemp, "/index.asp") == NULL)) ||
((g_uGateWay == GW_NBUC) && (strstr(szTemp, "main.asp") == NULL)) ||
((g_uGateWay == GW_ZMCC) && (strstr(szTemp, "JSESSIONID") == NULL)) ||
((g_uGateWay == GW_ZMCC) && (strstr(szTemp, "密码不正确") || strstr(szTemp, "用户名不存在"))))
{
iResult = ZERROR_LOGIN;
}
else
{
// 获取 Cookie
for (p = strstr(szTemp, "Set-Cookie: "); p; p = strstr(pEnd + 1, "Set-Cookie: "))
{
pEnd = strchr(p, ';');
if (pEnd == NULL) pEnd = strrchr(p, '\r');
if (pEnd == NULL) pEnd = strrchr(p, '\n');
if (pEnd)
{
*pEnd = 0;
lstrcat(g_szSession, p + 12);
lstrcat(g_szSession, "; ");
*pEnd = ';';
}
else
{
break;
}
}
if (g_szSession[0])
{
g_szSession[lstrlen(g_szSession) - 2] = 0;
}
if (g_uGateWay == GW_ZMCC)
{
// 获取 User ID
p = strstr(pEnd + 1, "LOGINCOOKIE=");
if (p == NULL)
{
p = strstr(szTemp, "LOGINCOOKIE=");
}
if (p)
{
for (pEnd = p; pEnd < szTemp + sizeof(szTemp) - 1; pEnd++)
{
if ((*pEnd == ';') || (*pEnd == '\r') || (*pEnd == '\n'))
break;
}
*pEnd = '\0';
lstrcpyn(g_szUserID, p + 12, sizeof(g_szUserID));
}
// 获取 User Mobile
p = strstr(pEnd + 1, "mobileNo");
if (p)
{
p = strstr(p, "value=");
if (p)
{
p += 6;
lstrcpyn(g_szUserMobile, p, 12);
}
}
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 1, (LPARAM) "正在校验");
iResult = ZmccGetRandom();
}
}
}
}
// 显示信息
if (iResult == ZERROR_SUCCESS)
{
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 1, (LPARAM) "已登录");
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 0, (LPARAM) "登录成功,等待发送短信。");
}
else
{
g_szSession[0] = '\0';
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 0, (LPARAM) c_szErrorMsg[iResult]);
SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 1, (LPARAM) "未登录");
}
// 关闭线程句柄
if (g_hLogin)
{
CloseHandle(g_hLogin);
g_hLogin = NULL;
}
return iResult;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int WINAPI ZmccGetRandom()
{
PBYTE p;
PBYTE pEnd;
int iResult;
UINT uReceive;
char szUri[32];
char szTemp[25100];
uReceive = 25000;
iResult = HttpRequest(
g_szZmccHost,
80,
"/MsgSendChoose.jsp?zmccCatalog=080101",
"www.zmcc.com.cn",
"http://www.zmcc.com.cn/MsgSendChooseAction.do",
g_szSession,
NULL,
0,
szTemp,
&uReceive,
g_szProxyAddress,
g_wProxyPort,
TRUE,
g_hWnd);
if (iResult == ZERROR_SUCCESS)
{
wsprintf(szUri, "/image.jsp");
uReceive = 2000;
iResult = HttpRequest(
g_szZmccHost,
80,
szUri,
"www.zmcc.com.cn",
"http://www.zmcc.com.cn/MsgSendChoose.jsp?zmccCatalog=0801",
g_szSession,
NULL,
0,
szTemp,
&uReceive,
g_szProxyAddress,
g_wProxyPort,
TRUE,
g_hWnd);
if (iResult == ZERROR_SUCCESS)
{
szTemp[uReceive] = 0;
p = strstr(szTemp, "\r\n\r\n");
if (p == NULL)
{
return ZERROR_CHECKRANDOM;
}
p += 4;
p = strstr(p, "\xff\xd8");
pEnd = szTemp + uReceive;
//g_szRandom = GetRandom(p, pEnd);
{
DWORD dwSize;
HANDLE hFile;
char szTempPath[MAX_PATH];
char szFileName[MAX_PATH];
GetTempPath(MAX_PATH, szTempPath);
wsprintf(szFileName, "%sZMSGRandom.jpg", szTempPath);
hFile = CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
return ZERROR_CHECKRANDOM;
}
dwSize = uReceive - (p - szTemp);
WriteFile(hFile, p, dwSize, &dwSize, NULL);
CloseHandle(hFile);
}
}
}
if (iResult == ZERROR_SUCCESS)
{
SendMessage(g_hWnd, WM_COMMAND, IDC_BUTTON_GETRANDOM, 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -