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

📄 zmsg.c

📁 利用免费网关发送短信
💻 C
📖 第 1 页 / 共 5 页
字号:
			SetTextColor(hDC, i == 4 ? 0x000000FF : 0x00FF0000);
			TextOut(hDC, 340, 250, STR_CHECKUPDATE, sizeof(STR_CHECKUPDATE) - 1);
			DeleteObject(SelectObject(hDC, hfontOld));

			DeleteDC(hDC);
		}
		break;

		// 处理窗口重画消息,画出关于对话框
	case WM_PAINT:
		hDC = BeginPaint(hWnd, &psPaint);

		// 画黑色的横线
		MoveToEx(hDC, 60, 175, NULL);
		LineTo(hDC, 399, 175);

		// 画横线
		//hPen = CreatePen(PS_SOLID, 1, 0x00000000);
		//hpenOld = (HPEN) SelectObject(hDC, hPen);
		//MoveToEx(hDC, 130, 44, NULL);
		//LineTo(hDC, 215, 44);
		//SelectObject(hDC, hpenOld);
		//DeleteObject(hPen);

		// 画两组蓝线
		hPen = CreatePen(PS_SOLID, 0, 0x00FF9966);
		hpenOld = (HPEN) SelectObject(hDC, hPen);
		for(i = 1; i< 74; i += 2)
		{
			MoveToEx(hDC, 0, i, NULL);
			LineTo(hDC, 88, i);
		}
		for(i= 116; i < 132; i += 2)
		{
			MoveToEx(hDC, 61, i, NULL);
			LineTo(hDC, 399, i);
		}
		SelectObject(hDC, hpenOld);
		DeleteObject(hPen);

		// 画多出蓝色区域
		hBrush = CreateSolidBrush(0x00FF9966);
		rtRect.left = 0;
		rtRect.top = 75;
		rtRect.right = 399;
		rtRect.bottom = 111;
		FillRect(hDC, &rtRect, hBrush);
		DeleteObject(hBrush);

		hBrush = CreateSolidBrush(0x00CC3333);
		rtRect.top = 111;
		rtRect.bottom = 115;
		FillRect(hDC, &rtRect, hBrush);
		rtRect.left = 60;
		rtRect.top = 43;
		rtRect.right = 116;
		rtRect.bottom = 99;
		FillRect(hDC, &rtRect, hBrush);
		DeleteObject(hBrush);

		rtRect.left = 64;
		rtRect.top = 47;
		rtRect.right = 112;
		rtRect.bottom = 95;
		FillRect(hDC, &rtRect, (HBRUSH) GetStockObject(WHITE_BRUSH));

		// 画图标
		hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ZMSG));
		DrawIcon(hDC, 72, 55, hIcon);
		DeleteObject(hIcon);

		// 画文字信息
		SetBkMode(hDC, TRANSPARENT);

		hfontOld = (HFONT) SendMessage(hWnd, WM_GETFONT, 0, 0);
		GetObject(hfontOld, sizeof(LOGFONT), &lfFont);
		hfontOld = (HFONT) SelectObject(hDC, CreateFontIndirect(&lfFont));
		TextOut(hDC, 60, 235, STR_APPINFO, sizeof(STR_APPINFO) - 1);
		TextOut(hDC, 60, 250, STR_COPYRIGHT, sizeof(STR_COPYRIGHT) - 1);
		SetTextColor(hDC, 0x00FF0000);
		TextOut(hDC, 60, 185, STR_EMAIL, sizeof(STR_EMAIL) - 1);
		TextOut(hDC, 60, 200, STR_HOMEPAGE, sizeof(STR_HOMEPAGE) - 1);
		TextOut(hDC, 340, 235, STR_VIEWHELP, sizeof(STR_VIEWHELP) - 1);
		TextOut(hDC, 340, 250, STR_CHECKUPDATE, sizeof(STR_CHECKUPDATE) - 1);
		SetTextColor(hDC, 0x00BBBBBB);
		TextOut(hDC, 60, 140, STR_VERINFO, sizeof(STR_VERINFO) - 1);
		TextOut(hDC, 220, 140, STR_BUILDINFO, sizeof(STR_BUILDINFO) - 1);

		SetTextColor(hDC, 0x00888888);
		if (g_uGateWay == GW_NBUC)
		{
			p = "宁波联通版";
		}
		else if (g_uGateWay == GW_ZMSHOP)
		{
			p = "移动商城版";
		}
		else
		{
			p = "浙江移动版";
		}
		TextOut(hDC, 223, 58, p, lstrlen(p));
		DeleteObject(SelectObject(hDC, hfontOld));

		SetTextColor(hDC, 0x00000000);
		lfFont.lfHeight = 36;
		lfFont.lfQuality = ANTIALIASED_QUALITY;
		lfFont.lfCharSet = ANSI_CHARSET;
		lfFont.lfWeight = 800;
		lfFont.lfItalic = TRUE;
		lstrcpy(lfFont.lfFaceName, "Arial");
		hfontOld = (HFONT) SelectObject(hDC, CreateFontIndirect(&lfFont));
		TextOut(hDC, 125, 40, STR_APPNAME, sizeof(STR_APPNAME) - 1);
		DeleteObject(SelectObject(hDC, hfontOld));

		EndPaint(hWnd, &psPaint);
		break;

	case WM_CLOSE:
		if (g_hCheckUpdate)
		{
			TerminateThread(g_hCheckUpdate, 0);
			CloseHandle(g_hCheckUpdate);
			g_hCheckUpdate = NULL;
		}
		SetClassLong(hWnd, GCL_HCURSOR, (LONG) LoadCursor(NULL, IDC_ARROW));
		EndDialog(hWnd, 0);
		if (s_bNeedLogIn)
		{
			GetAccount();
			OnCommand(IDC_BUTTON_LOGIN, 0);
		}
		break;

	default:
		return FALSE;
	}
	return TRUE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 初始化
void WINAPI OnInitDialog()
{
	int i;
	RECT rtRect;
	HICON hIcon;
	char szTemp[256];

	// 获取 INI 文件的完整路径
	GetModuleFileName(NULL, g_szIniFileName, MAX_PATH);
	lstrcpy(&g_szIniFileName[lstrlen(g_szIniFileName) - 4], ".ini");

	// 改变窗口位置
	rtRect.left = GetPrivateProfileInt(STR_APPNAME, "WindowLeft", 0, g_szIniFileName);
	rtRect.right = GetPrivateProfileInt(STR_APPNAME, "WindowRight", 0, g_szIniFileName);
	rtRect.top = GetPrivateProfileInt(STR_APPNAME, "WindowTop", 0, g_szIniFileName);
	rtRect.bottom = GetPrivateProfileInt(STR_APPNAME, "WindowBottom", 0, g_szIniFileName);
	if ((rtRect.right - rtRect.left >= WINDOW_WIDTH) &&
		(rtRect.bottom - rtRect.top >= WINDOW_HEIGHT))
		MoveWindow(g_hWnd, rtRect.left, rtRect.top, rtRect.right - rtRect.left, rtRect.bottom - rtRect.top, FALSE);
	i = GetPrivateProfileInt(STR_APPNAME, "WindowState", SW_SHOWNORMAL, g_szIniFileName);
	if ((i > SW_SHOWNORMAL) && (i < SW_MAX))
		ShowWindow(g_hWnd, i);

	// 设置 ClassXP 风格并显示对话框,这是个隐藏参数
	g_bClassXP = GetPrivateProfileInt(STR_APPNAME, "ClassXP", TRUE, g_szIniFileName);
	if (g_bClassXP)
	{
		ShowScrollBar(GetDlgItem(g_hWnd, IDC_EDIT_MESSAGE), SB_BOTH, FALSE);
		ClassXP(NULL, TRUE);
	}

	// 注册热键
	RegisterHotKey(g_hWnd, ZMSG_ATOM, MOD_WIN, 'Z');

	// 创建状态栏
	CreateStatusWindow(WS_CHILD | WS_VISIBLE, "就绪", g_hWnd, IDC_STATUS);
	GetClientRect(g_hWnd, &rtRect);
	OnSize(SIZE_RESTORED, MAKELONG(rtRect.right, rtRect.bottom));
	SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 1, (LPARAM) "未登陆");
	SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 2, (LPARAM) "第 1 条");
	SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 3, (LPARAM) "0 字");

	SetWindowLong(GetDlgItem(g_hWnd, IDC_EDIT_MESSAGE), GWL_USERDATA,
		SetWindowLong(GetDlgItem(g_hWnd, IDC_EDIT_MESSAGE), GWL_WNDPROC, (LONG) MessageEditProc));

	// 设置图标
	hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ZMSG));
	SetClassLong(g_hWnd, GCL_HICON, (LONG) hIcon);
	DeleteObject(hIcon);

	// 获取手机号码列表
	for (i = 1; ; i++)
	{
		wsprintf(szTemp, "Mobile%d", i);
		if (GetPrivateProfileString(STR_APPNAME, szTemp, NULL, szTemp, 50, g_szIniFileName) == 0)
			break;
		SendDlgItemMessage(g_hWnd, IDC_COMBO_MOBILEPHONE, CB_ADDSTRING, 0, (LPARAM) szTemp);
	}
	SendDlgItemMessage(g_hWnd, IDC_COMBO_MOBILEPHONE, CB_SETCURSEL, 0, 0);

	// 获取签名,如果签名和短信内容加起来不超过 70 个字,则添加签名
	GetPrivateProfileString(STR_APPNAME, "Sign", "[Powered by ZMSG]", szTemp, sizeof(szTemp), g_szIniFileName);
	MultiByteToWideChar(CP_ACP, 0, szTemp, -1, g_wszSign, sizeof(g_wszSign));
	g_bSign = GetPrivateProfileInt(STR_APPNAME, "UseSign", TRUE, g_szIniFileName);

	// 获取填充字符
	GetPrivateProfileString(STR_APPNAME, "FillChar", ".", szTemp, 2, g_szIniFileName);
	MultiByteToWideChar(CP_ACP, 0, szTemp, 1, g_wszFillChar, sizeof(g_wszFillChar));
	g_bFillChar = GetPrivateProfileInt(STR_APPNAME, "UseFillChar", TRUE, g_szIniFileName);

	// 获取代理设置信息
	g_wProxyPort = GetPrivateProfileInt(STR_APPNAME, "ProxyPort", 8080, g_szIniFileName);
	GetPrivateProfileString(STR_APPNAME, "ProxyAddress", NULL,
		g_szProxyAddress, sizeof(g_szProxyAddress), g_szIniFileName);

	// 获取账号设置信息
	g_uGateWay = GetPrivateProfileInt(STR_APPNAME, "GateWay",0, g_szIniFileName);

	// 创建后台登录线程
	GetAccount();
	OnCommand(IDC_BUTTON_LOGIN, 0);

	g_hCheckUpdate = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) CheckUpdate, (LPVOID) g_hWnd, 0, &i);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 程序退出之前保存设置
void WINAPI OnSaveSetting()
{
	int i;
	int iCount;
	char szKey[20];
	char szTemp[256];
	WINDOWPLACEMENT wpMain;

	// 保存是否使用 ClassXP 风格参数
	wsprintf(szTemp, "%d", g_bClassXP);
	WritePrivateProfileString(STR_APPNAME, "ClassXP", szTemp, g_szIniFileName);

	wsprintf(szTemp, "%d", g_uGateWay);
	WritePrivateProfileString(STR_APPNAME, "GateWay", szTemp, g_szIniFileName);

	// 保存签名
	WideCharToMultiByte(CP_ACP, 0, g_wszSign, -1, szTemp, sizeof(szTemp), NULL, NULL);
	WritePrivateProfileString(STR_APPNAME, "Sign", szTemp, g_szIniFileName);
	wsprintf(szTemp, "%d", g_bSign);
	WritePrivateProfileString(STR_APPNAME, "UseSign", szTemp, g_szIniFileName);
	WideCharToMultiByte(CP_ACP, 0, g_wszFillChar, -1, szTemp, sizeof(szTemp), NULL, NULL);
	WritePrivateProfileString(STR_APPNAME, "FillChar", szTemp, g_szIniFileName);
	wsprintf(szTemp, "%d", g_bFillChar);
	WritePrivateProfileString(STR_APPNAME, "UseFillChar", szTemp, g_szIniFileName);	
	
	// 保存代理设置信息
	WritePrivateProfileString(STR_APPNAME, "ProxyAddress", g_szProxyAddress, g_szIniFileName);
	wsprintf(szTemp, "%d", g_wProxyPort);
	WritePrivateProfileString(STR_APPNAME, "ProxyPort", szTemp, g_szIniFileName);
	
	// 保存窗口位置信息
	wpMain.length = sizeof(WINDOWPLACEMENT);
	GetWindowPlacement(g_hWnd, &wpMain);
	wsprintf(szTemp, "%d", wpMain.rcNormalPosition.left);
	WritePrivateProfileString(STR_APPNAME, "WindowLeft", szTemp, g_szIniFileName);
	wsprintf(szTemp, "%d", wpMain.rcNormalPosition.right);
	WritePrivateProfileString(STR_APPNAME, "WindowRight", szTemp, g_szIniFileName);
	wsprintf(szTemp, "%d", wpMain.rcNormalPosition.top);
	WritePrivateProfileString(STR_APPNAME, "WindowTop", szTemp, g_szIniFileName);
	wsprintf(szTemp, "%d", wpMain.rcNormalPosition.bottom);
	WritePrivateProfileString(STR_APPNAME, "WindowBottom", szTemp, g_szIniFileName);
	wsprintf(szTemp, "%d", wpMain.showCmd);
	WritePrivateProfileString(STR_APPNAME, "WindowState", szTemp, g_szIniFileName);
	
	// 保存手机号码列表
	iCount = (int) SendDlgItemMessage(g_hWnd, IDC_COMBO_MOBILEPHONE, CB_GETCOUNT, 0, 0);
	for (i = 0; i < iCount; i++)
	{
		wsprintf(szKey, "Mobile%d", i + 1);
		SendDlgItemMessage(g_hWnd, IDC_COMBO_MOBILEPHONE, CB_GETLBTEXT, i, (LPARAM) szTemp);
		WritePrivateProfileString(STR_APPNAME, szKey, szTemp, g_szIniFileName);
	}
	wsprintf(szKey, "Mobile%d", i + 1);
	WritePrivateProfileString(STR_APPNAME, szKey, NULL, g_szIniFileName);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 调整大小
void WINAPI OnSize(WPARAM wParam, LPARAM lParam)
{
	int i;
	int iWidth;
	NOTIFYICONDATA Nid;	
	int iParts[] = {-1, 55, 55, 55};

	if (wParam == SIZE_MINIMIZED)
	{
		// 添加系统托盘图标,隐藏主窗口
		ZeroMemory(&Nid, sizeof(NOTIFYICONDATA));
		Nid.cbSize = sizeof(NOTIFYICONDATA);
		Nid.hWnd = g_hWnd;
		Nid.uID = IDC_NOTIFYICON;
		Nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
		Nid.uCallbackMessage = WM_ZMSGNOTIFY;
		Nid.hIcon = (HICON) GetClassLong(g_hWnd, GCL_HICON);
		lstrcpy(Nid.szTip, STR_APPNAME);
		Shell_NotifyIcon(NIM_ADD, &Nid);
		ShowWindow(g_hWnd, SW_HIDE);
	}
	else
	{
		// 调整命令按钮大小及位置
		iWidth = (LOWORD(lParam) - 2 * BUTTON_PREFIX - 3 * BUTTON_INTERVAL) / 4;
		for (i = 0; i < 4; i++)
		{			
			SetWindowPos(GetDlgItem(g_hWnd, IDC_BUTTON_SEND + i), NULL,
				BUTTON_PREFIX + i * (BUTTON_INTERVAL + iWidth), BUTTON_TOP,
				iWidth, BUTTON_HEIGHT,
				SWP_NOZORDER);
		}

		// 下面是另外的两种调整命令按钮大小及位置的方法
		//for (i = 0; i < 4; i++)
		//{
		//	GetWindowRect(GetDlgItem(g_hWnd, IDC_BUTTON_SEND + i), &rtRect);
		//	MapWindowPoints(NULL, g_hWnd, (LPPOINT) &rtRect, 2);
		//	SetWindowPos(GetDlgItem(g_hWnd, IDC_BUTTON_SEND + i), NULL,
		//		(LOWORD(lParam) - 4 * 75 - 3 * 10) / 2 + i * 75 + i * 10, rtRect.top, 0, 0,
		//		SWP_NOSIZE | SWP_NOZORDER);
		//}

		//GetWindowRect(GetDlgItem(g_hWnd, IDC_BUTTON_SEND), &rtRect);
		//MapWindowPoints(NULL, g_hWnd, (LPPOINT) &rtRect, 2);		
		//for (i = 1; i < 4; i++)
		//{
		//	SetWindowPos(GetDlgItem(g_hWnd, IDC_BUTTON_SEND + i), NULL,
		//		18 + i * ((LOWORD(lParam) - 2 * 18 - 4 * 75) / 3) + i * 75, rtRect.top, 0, 0,
		//		SWP_NOSIZE | SWP_NOZORDER);			
		//}


		// 调整命令按围框大小
		SetWindowPos(GetDlgItem(g_hWnd, IDC_STATIC_COMMAND), NULL,
			0, 0, LOWORD(lParam) - FRAME_XPREFIX, FRAME_HEIGHT,
			SWP_NOMOVE | SWP_NOZORDER | SWP_NOREPOSITION);

		// 调整内容围框大小
		SetWindowPos(GetDlgItem(g_hWnd, IDC_STATIC_CONTENT), NULL,
			0, 0, LOWORD(lParam) - FRAME_XPREFIX, HIWORD(lParam) - FRAME_YPREFIX,
			SWP_NOMOVE | SWP_NOZORDER | SWP_NOREPOSITION);

		// 调整消息编辑框大小
		SetWindowPos(GetDlgItem(g_hWnd, IDC_EDIT_MESSAGE), NULL,
			0, 0, LOWORD(lParam) - EDIT_XPREFIX, HIWORD(lParam) - EDIT_YPREFIX,
			SWP_NOMOVE | SWP_NOZORDER | SWP_NOREPOSITION);

		// 调整电话本组合框大小
		SetWindowPos(GetDlgItem(g_hWnd, IDC_COMBO_MOBILEPHONE), NULL,
			0, 0, LOWORD(lParam) - 115, COMBO_HEIGHT,
			SWP_NOMOVE | SWP_NOZORDER | SWP_NOREPOSITION);

		// 调整状态兰大小
		iParts[0] = LOWORD(lParam) - iParts[1] - iParts[2] - iParts[3];
		iParts[1] = LOWORD(lParam) - iParts[2] - iParts[3];
		iParts[2] = LOWORD(lParam) - iParts[3];
		iParts[3] = -1;
		SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETPARTS, sizeof(iParts) / sizeof(int), (LPARAM) iParts);
		SendDlgItemMessage(g_hWnd, IDC_STATUS, WM_SIZE, wParam, lParam);
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 命令消息处理
void WINAPI OnCommand(WPARAM wParam, LPARAM lParam)
{
	int i;
	int j;
	char szTemp[512];

	switch (LOWORD(wParam))
	{
		// 发送短信
	case IDC_BUTTON_SEND:
		if (g_hSend == NULL)
		{
			if (SendDlgItemMessage(g_hWnd, IDC_COMBO_MOBILEPHONE, WM_GETTEXT, 50, (LPARAM) szTemp) < 1)
				MessageBox(g_hWnd, "手机号码不能不能为空!", STR_APPNAME, MB_ICONSTOP);
			else
			{
				// 把手机号码添加到组合框
				if (SendDlgItemMessage(g_hWnd, IDC_COMBO_MOBILEPHONE,
					CB_FINDSTRING, -1, (LPARAM) szTemp) == CB_ERR)
					SendDlgItemMessage(g_hWnd, IDC_COMBO_MOBILEPHONE, CB_ADDSTRING, 0, (LPARAM) szTemp);

				// 查找手机号码
				for (i = 0; (i < 50) && (szTemp[i] != '\0'); i++)
				{
					if ((szTemp[i] == '<') || (szTemp[i] == '{') || (szTemp[i] == '(') ||
						(szTemp[i] == '[') || (szTemp[i] == '@') || (szTemp[i] == '-'))
					{
						i++;
						for (j = i; (i + j < 50) && (szTemp[j] != '\0'); j++)
						{
							if ((szTemp[j] == '>') || (szTemp[j] == '}') || (szTemp[j] == ')') ||
								(szTemp[j] == ']') || (szTemp[i] == '@') || (szTemp[i] == '-'))
							{
								szTemp[j] = '\0';
								break;
							}
						}
						break;
					}
				}
				if ((szTemp[i] == '\0') || (i == 50))
					i = 0;
				lstrcpy(g_szMobile, &szTemp[i]);

				// 判断短信内容,创建发送线程
				i = (int) SendDlgItemMessage(g_hWnd, IDC_EDIT_MESSAGE, WM_GETTEXTLENGTH, 0, 0);
				if (i < 1)
					MessageBox(g_hWnd, "没有短信内容!", STR_APPNAME, MB_ICONSTOP);
				else
					g_hSend = CreateThread(NULL, 0,
					(LPTHREAD_START_ROUTINE) SendThread, NULL, 0, &i);
			}
		}
		else

⌨️ 快捷键说明

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