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

📄 zmsg.c

📁 利用免费网关发送短信
💻 C
📖 第 1 页 / 共 5 页
字号:
					char *p = strstr(szTemp, "http=");
					if (p)
					{
						p += 5;
					}
					else
					{
						p = szTemp;
					}

					// 分割地址和端口信息
					for (i = lstrlen(p); i > 0; i--)
					{
						if (p[i] == ':')
						{
							SetDlgItemInt(hDlg, IDC_EDIT_PROXYPORT, atoi(&p[i + 1]), FALSE);
							p[i] = '\0';
							SetDlgItemText(hDlg, IDC_EDIT_PROXYADDRESS, p);							
						}
					}
				}
				RegCloseKey(hKey);
			}
		}

		if (g_bClassXP)
			SendDlgItemMessage(hDlg, IDC_CHECK_CLASSXP, BM_SETCHECK, BST_CHECKED, 0);

		WideCharToMultiByte(CP_ACP, 0, g_wszSign, -1, szTemp, sizeof(szTemp), NULL, NULL);
		SetDlgItemText(hDlg, IDC_EDIT_SIGN, szTemp);
		WideCharToMultiByte(CP_ACP, 0, g_wszFillChar, -1, szTemp, sizeof(szTemp), NULL, NULL);
		SetDlgItemText(hDlg, IDC_EDIT_FILL, szTemp);
		SetDlgItemText(hDlg, IDC_EDIT_USERNAME, g_szUserName);
		SetDlgItemText(hDlg, IDC_EDIT_PASSWORD, g_szPassword);
		SendDlgItemMessage(hDlg, IDC_EDIT_FILL, EM_LIMITTEXT, 1, 0);
		break;

	case WM_LBUTTONUP:
		if (wParam & MK_CONTROL)
		{
			if ((LOWORD(lParam) > 137) && (LOWORD(lParam) <148) && (HIWORD(lParam) > 287) && (HIWORD(lParam) < 304))
			{
				MessageBox(g_hWnd, "好人一生平安!", STR_APPNAME, MB_ICONINFORMATION);
			}
		}
		break;

		// 命令处理
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDC_EHECK_USEPROXY:
			EnableWindow(GetDlgItem(hDlg, IDC_EDIT_PROXYADDRESS),
				(BOOL) SendDlgItemMessage(hDlg, IDC_EHECK_USEPROXY, BM_GETCHECK, 0, 0));
			EnableWindow(GetDlgItem(hDlg, IDC_EDIT_PROXYPORT),
				(BOOL) SendDlgItemMessage(hDlg, IDC_EHECK_USEPROXY, BM_GETCHECK, 0, 0));
			break;

		case IDC_CHECK_SIGN:
			EnableWindow(GetDlgItem(hDlg, IDC_EDIT_SIGN),
				(BOOL) SendDlgItemMessage(hDlg, IDC_CHECK_SIGN, BM_GETCHECK, 0, 0));
			break;

		case IDC_CHECK_FILL:
			EnableWindow(GetDlgItem(hDlg, IDC_EDIT_FILL),
				(BOOL) SendDlgItemMessage(hDlg, IDC_CHECK_FILL, BM_GETCHECK, 0, 0));
			break;

		case IDC_CHECK_CLASSXP:
			g_bClassXP = (BOOL) SendDlgItemMessage(hDlg, IDC_CHECK_CLASSXP, BM_GETCHECK, 0, 0);
			ClassXP(NULL, g_bClassXP);
			ShowScrollBar(GetDlgItem(g_hWnd, IDC_EDIT_MESSAGE), SB_BOTH, !g_bClassXP);
			break;

		case IDC_BUTTON_REGISTER:
			ShellExecute(NULL, NULL, 
				(g_uGateWay == GW_NBUC) ? "http://211.91.2.221/sms165/password/NewUser.asp" : 
					((g_uGateWay == GW_ZMSHOP) ? "http://www.zmshop.com/user/reg.asp" :
						"http://www.zj.chinamobile.com/register.jsp?zmccCatalog=0805"), 
				NULL, NULL, SW_SHOW);
			break;

		case IDOK:
			g_bRemindPassword = (BOOL) SendDlgItemMessage(hDlg, IDC_EHECK_REMINDPASSWORD, BM_GETCHECK, 0, 0);
			GetDlgItemText(hDlg, IDC_EDIT_USERNAME, g_szUserName, sizeof(g_szUserName));
			GetDlgItemText(hDlg, IDC_EDIT_PASSWORD, g_szPassword, sizeof(g_szPassword));
			g_wProxyPort = GetDlgItemInt(hDlg, IDC_EDIT_PROXYPORT, NULL, FALSE);
			if (SendDlgItemMessage(hDlg, IDC_EHECK_USEPROXY, BM_GETCHECK, 0, 0))
				GetDlgItemText(hDlg, IDC_EDIT_PROXYADDRESS, g_szProxyAddress, sizeof(g_szProxyAddress));
			else
				g_szProxyAddress[0] = 0;

			if (g_uGateWay == GW_ZMSHOP)
			{
				
			}
			else if (g_uGateWay != GW_NBUC)
			{
				g_bFillChar = (BOOL) SendDlgItemMessage(hDlg, IDC_CHECK_FILL, BM_GETCHECK, 0, 0);
				GetDlgItemText(hDlg, IDC_EDIT_FILL, szTemp, sizeof(szTemp));
				MultiByteToWideChar(CP_ACP, 0, szTemp, -1, g_wszFillChar, sizeof(g_wszFillChar));
			}

			g_bSign = (BOOL) SendDlgItemMessage(hDlg, IDC_CHECK_SIGN, BM_GETCHECK, 0, 0);
			GetDlgItemText(hDlg, IDC_EDIT_SIGN, szTemp, sizeof(szTemp));
			MultiByteToWideChar(CP_ACP, 0, szTemp, -1, g_wszSign, sizeof(g_wszSign));

			SetAccount();

			EndDialog(hDlg, IDOK);
			break;

		case IDCANCEL:
			EndDialog(hDlg, IDCANCEL);
		}
		break;

		// 关闭
	case WM_CLOSE:
		EndDialog(hDlg, 0);
	}
	return FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 设置窗口回调函数
INT_PTR CALLBACK GetRandomDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	HBITMAP hBitmap;
	char szTempPath[MAX_PATH];
	char szFileName[MAX_PATH];
	WCHAR wszFileName[MAX_PATH];
	static IPicture *s_pPicture = NULL;

	switch (uMsg)
	{
	// 初始化
	case WM_INITDIALOG:
		SendDlgItemMessage(hDlg, IDC_EDIT_RANDOM, EM_LIMITTEXT, 4, 0);
		GetTempPath(MAX_PATH, szTempPath);
		wsprintf(szFileName, "%sZMSGRandom.jpg", szTempPath);
		MultiByteToWideChar(CP_ACP, 0, szFileName, -1, wszFileName, MAX_PATH);

		OleLoadPicturePath(wszFileName, NULL, 0, 0, &IID_IPicture, (PVOID *) &s_pPicture);
		if (s_pPicture)
		{
			s_pPicture->lpVtbl->get_Handle(s_pPicture, (OLE_HANDLE *) &hBitmap);
			SendDlgItemMessage(hDlg, IDC_STATIC_RANDOM, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hBitmap);
		}
	
		break;

	// 命令处理
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDC_EDIT_RANDOM:
			if (HIWORD(wParam) == EN_CHANGE)
			{
				EnableWindow(GetDlgItem(hDlg, IDOK),
					SendDlgItemMessage(hDlg, IDC_EDIT_RANDOM, WM_GETTEXTLENGTH, 0, 0) == 4);
			}
			break;

		case IDOK:
			GetDlgItemText(hDlg, IDC_EDIT_RANDOM, g_szRandom, sizeof(g_szRandom));
			if (s_pPicture)
			{
				s_pPicture->lpVtbl->Release(s_pPicture);
			}
			EndDialog(hDlg, IDOK);
			break;

		case IDCANCEL:
			if (s_pPicture)
			{
				s_pPicture->lpVtbl->Release(s_pPicture);
			}
			EndDialog(hDlg, IDCANCEL);
			break;
		}
		break;

		// 关闭
	case WM_CLOSE:
		SendMessage(hDlg, WM_COMMAND, (SendDlgItemMessage(hDlg, IDC_EDIT_RANDOM, WM_GETTEXTLENGTH, 0, 0) == 4) ? IDOK : IDCANCEL, 0);
	}
	return FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 短信编辑窗口子类化回调函数
LRESULT CALLBACK MessageEditProc(HWND hEdit, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	int i;
	BYTE szTemp[256];
	LRESULT lResult;

	// 调用原来的窗口函数
	lResult = CallWindowProc(
		(WNDPROC) GetWindowLong(hEdit, GWL_USERDATA), hEdit, uMsg, wParam, lParam);

	switch (uMsg)
	{
	case WM_KEYDOWN:
		// 判断是否是 Ctrl + Enter
		if ((wParam == VK_RETURN) && (GetKeyState(VK_CONTROL) & 0x8000))
		{
			SendMessage(g_hWnd, WM_COMMAND, IDC_BUTTON_SEND, 0);
			break;
		}
	case WM_LBUTTONDOWN:
	case WM_KEYUP:
	case WM_CUT:
	case WM_PASTE:
		// 显示当前行字数信息
		i = (int) SendDlgItemMessage(g_hWnd, IDC_EDIT_MESSAGE, EM_LINEFROMCHAR, -1, 0);
		wsprintf(szTemp, "第 %d 条",i + 1);
		SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 2, (LPARAM) szTemp);

		*((WORD *) szTemp) = 255;
		i = (int) SendDlgItemMessage(g_hWnd, IDC_EDIT_MESSAGE, EM_GETLINE, i, (LPARAM) szTemp);
		szTemp[min(i, 255)] = '\0';

		i = MultiByteToWideChar(CP_ACP, 0, szTemp, -1, NULL, 0) - 1;
		wsprintf(szTemp, "%d 字%c", i, (i > 70) ? '!' : ' ');
		SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 3, (LPARAM) szTemp);
	}
	return lResult;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 关于对话框回调函数
INT_PTR CALLBACK AboutDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	int i;
	HDC hDC;
	HPEN hPen;
	HPEN hpenOld;
	HBRUSH hBrush;
	HFONT hfontOld;
	HICON hIcon;
	RECT rtRect;
	LOGFONT lfFont;
	char *p;
	char szTemp[1024];
	PAINTSTRUCT psPaint;
	static DWORD s_dwVersion;

	// 静态局部变量,记录上一次鼠标所在的区域类型
	// 0 表示在非 URL 区域
	// 1 表示在 Email 文字区域
	// 2 表示在 HomePage 区域
	// 3 表示在 ViewHelp 区域
	// 4 表示在 CheckUpdate 区域
	static int s_iURLType = 0;

	static BOOL s_bNeedLogIn = FALSE;

	switch (uMsg)
	{
	case WM_INITDIALOG:
		// 判断是否是 Windows 98 及其以上版本系统
		s_dwVersion = GetVersion();
		s_bNeedLogIn = FALSE;
		if (((BYTE) s_dwVersion > 4) || (((BYTE) s_dwVersion == 4) && (HIBYTE(LOWORD(s_dwVersion)) > 0)))
			s_dwVersion = TRUE;
		else
			s_dwVersion = FALSE;

		SetClassLong(hWnd, GCL_HCURSOR, 0);
		SetCursor(LoadCursor(NULL, IDC_ARROW));
		break;

	case WM_CTLCOLORDLG:
	case WM_CTLCOLORSTATIC:
		return (int) GetStockObject(WHITE_BRUSH);

	case WM_COMMAND:
		if(LOWORD(wParam) != IDCANCEL && LOWORD(wParam) != IDOK)
			break;
	case WM_RBUTTONUP:
		SendMessage(hWnd, WM_CLOSE, 0, 0);
		break;

	case WM_LBUTTONUP:
		// 左键弹起,判断是否执行 URL 点击处理
		if( LOWORD(lParam) >= 60 && LOWORD(lParam) < 180 && HIWORD(lParam) >= 184 && HIWORD(lParam) < 198)
		{
			ShellExecute(NULL, NULL, STR_EMAIL, NULL, NULL, SW_SHOW);
		}
		else if ( LOWORD(lParam) >= 60 && LOWORD(lParam) < 185 && HIWORD(lParam) > 199 && HIWORD(lParam) < 213)
		{
			ShellExecute(NULL, NULL, STR_HOMEPAGE, NULL, NULL, SW_SHOW);
		}
		else if( LOWORD(lParam) >= 340 && LOWORD(lParam) < 388 && HIWORD(lParam) > 235 && HIWORD(lParam) < 249)
		{
			wsprintf(szTemp,
				"ZMSG  版本 %d.%d.%d%s\n\n"
				"  浙江移动短信发送工具。CopyLeft(L) 2003-2004 Yonsm,不保留版权。\n\n"
				"  如果是浙江移动通信有限责任公司的手机用户,并且在浙江移动网站 "
				"(http://www.zmcc.com.cn) 上注册账号后,就可以使用 ZMSG "
				"发送短信。目前发送短信是完全是免费的,按照浙江移动的说明,暂时只"
				"能给浙江省内的移动用户发送短信。\n\n"
				"  ZMSG 使用非常简单,先设置好账号和密码,输入接收方的"
				"手机号码和短信内容,点击“发送”按钮即可。短信编辑框内除空行外的"
				"每行文字都将作为一条短信发送,每行不能超过 70 字,超过部分将自动"
				"丢弃。在短信编辑框内按 Ctrl+Enter 可以发送或取消发送短信;使用热"
				"键 Win+Z 可以显示或隐藏 ZMSG。\n\n"
				"  手机号码的格式可以是单独的手机号码,也可以是“姓名(手机号码)”"
				"的格式 (如“Yonsm(1395716****)”)。如果要删除已记录的手机号码,可"
				"用鼠标中键点击手机号码下拉框。",
				ZMSG_VERSION / 100,
				(ZMSG_VERSION % 100) / 10,
				ZMSG_VERSION % 10,
				(ZMSG_VERSION % 2) ? " (测试版)" : NULL,
				g_szIniFileName);
			MessageBox(hWnd, szTemp, STR_APPNAME, MB_ICONINFORMATION);
		}
		else if( LOWORD(lParam) >= 340 && LOWORD(lParam) < 388 && HIWORD(lParam) > 250 && HIWORD(lParam) < 264)
		{
			if (g_hCheckUpdate == NULL)
			{
				g_hCheckUpdate = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) CheckUpdate, (LPVOID) hWnd, 0, &i);
			}
		}
		else
		{
			if(LOWORD(lParam) >= 60 && LOWORD(lParam) < 116 && HIWORD(lParam) > 43 && HIWORD(lParam) < 99 && (wParam & MK_CONTROL))
			{
				if (g_uGateWay == GW_NBUC)
				{
					g_uGateWay = GW_ZMSHOP;
				}
				else if (g_uGateWay == GW_ZMSHOP)
				{
					g_uGateWay = GW_ZMCC;
				}
				else
				{
					g_uGateWay = GW_NBUC;
				}

				rtRect.left = 223;
				rtRect.top = 58;
				rtRect.right = 300;
				rtRect.bottom = 78;
				InvalidateRect(hWnd, &rtRect, TRUE);
				s_bNeedLogIn = TRUE;
			}
			else
			{
				SendMessage(hWnd, WM_CLOSE, 0, 0);
			}
		}
		break;

	case UM_HRNOTIFY:
		switch (wParam)
		{
		case HRNOTIFY_RESOLVEDNS:
			wsprintf(szTemp, "正在解析域名 %s...", lParam);
			break;

		case HRNOTIFY_CONNECT:
			wsprintf(szTemp, "正在连接到 %s...", lParam);
			break;

		case HRNOTIFY_SEND:
			wsprintf(szTemp, "正在发送 %u 字节数据...", lParam);
			break;

		case HRNOTIFY_DISCONNECT:
			wsprintf(szTemp, c_szErrorMsg[lParam]);
			break;

		default:
			wsprintf(szTemp, "已接收 %u 字节 (共 %u 字节),完成 %u%%...", lParam, wParam, MulDiv((int)lParam, 100, (int)wParam));
		}
		SetDlgItemText(hWnd, IDC_STATIC_STATUS, szTemp);
		break;

	case WM_ZMSGUPDATE:
		OnZmsgUpdate(hWnd, wParam, lParam);
		break;

	case WM_MOUSEMOVE:
		// 鼠标移动,判断是否改变 URL 文字的颜色
		if( LOWORD(lParam) >= 60 && LOWORD(lParam) < 180 && HIWORD(lParam) >= 184 && HIWORD(lParam) < 198)
			i = 1;
		else if( LOWORD(lParam) >= 60 && LOWORD(lParam) < 185 && HIWORD(lParam) > 199 && HIWORD(lParam) < 213)
			i = 2;
		else if( LOWORD(lParam) >= 340 && LOWORD(lParam) < 388 && HIWORD(lParam) > 235 && HIWORD(lParam) < 249)
			i = 3;
		else if( LOWORD(lParam) >= 340 && LOWORD(lParam) < 388 && HIWORD(lParam) > 250 && HIWORD(lParam) < 264)
			i = 4;
		else
			i = 0;

		// 如果当前鼠标与上一次鼠标所在区域类型改变
		if (i != s_iURLType)
		{
			// 改变 URL 文字的颜色
			s_iURLType = i;

			SetCursor(LoadCursor(NULL, (i && s_dwVersion) ? IDC_HAND : IDC_ARROW));
			hDC = GetDC(hWnd);
			SetTextColor(hDC, i == 1 ? 0x000000FF : 0x00FF0000);
			hfontOld = (HFONT) SendMessage(hWnd, WM_GETFONT, 0, 0);
			GetObject(hfontOld, sizeof(LOGFONT), &lfFont);
			lfFont.lfUnderline = (i == 1);
			hfontOld = (HFONT) SelectObject(hDC, CreateFontIndirect(&lfFont));
			TextOut(hDC, 60, 185, STR_EMAIL, sizeof(STR_EMAIL) - 1);
			DeleteObject(SelectObject(hDC, hfontOld));

			lfFont.lfUnderline = (i == 2);
			hfontOld = (HFONT) SelectObject(hDC, CreateFontIndirect(&lfFont));
			SetTextColor(hDC, i == 2 ? 0x000000FF : 0x00FF0000);
			TextOut(hDC, 60, 200, STR_HOMEPAGE, sizeof(STR_HOMEPAGE) - 1);
			DeleteObject(SelectObject(hDC, hfontOld));

			lfFont.lfUnderline = (i == 3);
			hfontOld = (HFONT) SelectObject(hDC, CreateFontIndirect(&lfFont));
			SetTextColor(hDC, i == 3 ? 0x000000FF : 0x00FF0000);
			TextOut(hDC, 340, 235, STR_VIEWHELP, sizeof(STR_VIEWHELP) - 1);
			DeleteObject(SelectObject(hDC, hfontOld));

			lfFont.lfUnderline = (i == 4);
			hfontOld = (HFONT) SelectObject(hDC, CreateFontIndirect(&lfFont));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -