⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zmsg.c

📁 利用免费网关发送短信
💻 C
📖 第 1 页 / 共 5 页
字号:
		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 + -