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

📄 main.cpp

📁 CSP settings tools. 用户创建XML完成手机相关配置。通过这个程序能够测试CSP的功能。
💻 CPP
字号:
// ************************************************************
// main.cpp
//
// ************************************************************

#include <windows.h>
#include <winuser.h>
#include <Commctrl.h>
#include <aygshell.h>
#include <cfgmgrapi.h>  // DMProcessConfigXML
#include "ScreenAdaptive.h"
#include "Util.h"
#include "resource.h"
#define XML_MAX_LEN		1024*10
wchar_t share_buf[XML_MAX_LEN] ={0};
HINSTANCE	g_hInstance;
HWND		g_hWnd;
TCHAR InputFile[MAX_PATH]={0};
TCHAR OutputFile[MAX_PATH]={0};

BOOL WINAPI MainDlgProc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam );
BOOL OnCreateDialog(HWND hwnd);
BOOL CreateSoftKeyBar(HWND hwndParent, UINT nID);
DWORD OnOpenXMLFile(HWND hDlg, wchar_t *buf,int *size);
BOOL OnSaveButton(HWND hDlg,wchar_t *buf,int size);
DWORD OnExecuteXMLCmd(HWND hDlg);
BOOL FormatOutputFilename(TCHAR *in, TCHAR *out);
wchar_t * GetNextLine(wchar_t *ptr, wchar_t **out, int *depth, int *len);
BOOL ReloadXMLFile(wchar_t ** buf,int* len, wchar_t* name);
DWORD OnOpenMSGFile(HWND hDlg, TCHAR * szFile, char *buf,int *size);
// ************************************************************
//
// WinMain
//
// ************************************************************

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPTSTR    lpCmdLine,
                   int       CmdShow)
{
    HWND hwnd;
    if (hwnd = FindWindow(NULL, L"XMLConfig"))
    {
        SetFocus (hwnd);
        return (TRUE);
    }
    
    int retcode;
    
    g_hInstance = hInstance;   //  Save instance handle in global
    InitCommonControls();
    
    retcode = DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, (DLGPROC)MainDlgProc);
    
    return(FALSE);	
}
const DWORD NOTIFICATION_ID          = 4791; 
const GUID guidNotificationSample    = { 0x35466543, 0x77EF, 0x5676, { 0x12, 0x27, 0x33, 0xA5, 0x56, 0x7A, 0xB9, 0x03 } };
static SIPINFO g_si={0};
BOOL WINAPI MainDlgProc(HWND hDlg,UINT msg,WPARAM wp,LPARAM lp )
{    
	switch (msg)
	{
		case WM_INITDIALOG:
			SetWindowText(GetDlgItem(hDlg,IDC_STATUS),L"");
			//AddNotificationIcon(hDlg, guidNotificationSample,NOTIFICATION_ID,g_hInstance,IDI_ICON,L"dfasdasd");
			//SipShowIM(SIPF_ON);
			//////////////////////////////////////////////////////////////////////////////////
			{
				char buffer[1024]= {0};
				TCHAR wbuffer[1024]= {0};
				int buffer_size = 1024;
				if(OnOpenMSGFile(hDlg, L"\\Program files\\mProveDM\\smsnotify.bin",buffer,&buffer_size))
				{
					SetWindowText(GetDlgItem(hDlg,IDC_INPUT),L"load sms error!");
				}
				else
				{
					TCHAR wbuffer[1024]= {0};
					mbstowcs(wbuffer,&buffer[4],*(int*)(&buffer[0]));
					SetWindowText(GetDlgItem(hDlg,IDC_INPUT),wbuffer);
				}
			}
//////////////////////////////////////////////////////////////////////////////////
			g_si.cbSize = sizeof(SIPINFO);
			::SipGetInfo(&g_si);
			return OnCreateDialog(hDlg) ? 0 : 1;
		case WM_SETTINGCHANGE :
			SendMessage(hDlg,WM_SIZE,0,0);
			break;
		case WM_COMMAND:
			{
				switch(LOWORD(wp))
				{
					case IDOK:
					case ID_EXIT:
						{
							//DeleteNotificationIcon(guidNotificationSample,NOTIFICATION_ID);
							EndDialog(hDlg, IDOK);
							::SipSetInfo(&g_si);
							return (INT_PTR)TRUE;
						}
						break;
					case IDC_INPUT:
					case IDC_OUTPUT:
						if(!IsThePlatform(POCKETPC))
							break;
						if(EN_SETFOCUS ==HIWORD(wp))
						{
							//SipShowIM(SIPF_ON);
							ShowSIPAssociatedWithControl(hDlg,LOWORD(wp));
							PostMessage(hDlg,WM_SIZE,0,0);
						}
						if(EN_KILLFOCUS == HIWORD(wp))
						{
							SipShowIM(SIPF_OFF);
							::SipSetInfo(&g_si);
							SendMessage(hDlg,WM_SIZE,0,0);
						}
						
						break;
					case ID_MENU_EXEC:
						{
							OnExecuteXMLCmd(hDlg);
						}
						
						::SipSetInfo(&g_si);
						break;
					case IDC_SAVE:
						{
#if 0
							int size = XML_MAX_LEN;
							int res= 0;
							::SipSetInfo(&g_si);
							memset(share_buf, 0x00, sizeof(share_buf));
							if(res = GetWindowText(GetDlgItem(hDlg,IDC_OUTPUT),share_buf, size)>0)
							{
								//share_buf[res] = 0;
								OnSaveButton(hDlg,share_buf,wcslen(share_buf));
								SetWindowText(GetDlgItem(hDlg,IDC_STATUS),L"Success");
							}
							else
							{
								SetWindowText(GetDlgItem(hDlg,IDC_STATUS),L"error");
							}
#endif
							//Reload formated xml
							TCHAR * out;
							int len = 0;
							if(ReloadXMLFile(&out,&len, OutputFile))
							{
								SetWindowText(GetDlgItem(hDlg,IDC_OUTPUT),out);
								free(out);
							}

						::SipSetInfo(&g_si);	
						}
						break;
					case IDC_OPEN:
						{
							
							int size = XML_MAX_LEN;
							SetWindowText(GetDlgItem(hDlg,IDC_INPUT),L"");
							if(0 == OnOpenXMLFile(hDlg, share_buf, &size))
							{
								share_buf[size] = 0;
								//SetWindowText(GetDlgItem(hDlg,IDC_INPUT),((short)share_buf[0] == 0xfffe || (short)share_buf[0] == 0xfeff)?share_buf+1:share_buf);
								SetWindowText(GetDlgItem(hDlg,IDC_INPUT),L"");
								SetWindowText(GetDlgItem(hDlg,IDC_INPUT),share_buf+1);
								SetWindowText(GetDlgItem(hDlg,IDC_OUTPUT),L"");
								SetWindowText(GetDlgItem(hDlg,IDC_STATUS),L"Success");
							}
							else
							{
								SetWindowText(GetDlgItem(hDlg,IDC_STATUS),L"error");
								SetWindowText(GetDlgItem(hDlg,IDC_OUTPUT),L"");
							}
						}
						break;
				}
			}
			break;
		case WM_SIZE:
			ScreenAdaptor::AdaptControl(hDlg, IDC_INPUT, (ScreenAdaptor::SCREENADAPTOR_TYPE)0xe0);
			ScreenAdaptor::AdaptControl(hDlg, IDC_OUTPUT, (ScreenAdaptor::SCREENADAPTOR_TYPE)0x160);
			ScreenAdaptor::MakeSameSize(hDlg,(ScreenAdaptor::SCREENADAPTOR_SIZE)(2),2,IDC_SAVE,IDC_OPEN,IDC_STATUS);
			ScreenAdaptor::MakeSameSize(hDlg,(ScreenAdaptor::SCREENADAPTOR_SIZE)(3),1,IDC_SAVE,IDC_OPEN);
			//ScreenAdaptor::ArrangeControls(hDlg,(ScreenAdaptor::SCREENADAPTOR_ARRANGE)(3),2,IDC_SAVE,IDC_OPEN,IDC_STATUS);
			ScreenAdaptor::ArrangeControls(hDlg,(ScreenAdaptor::SCREENADAPTOR_ARRANGE)(0x0b),2,IDC_SAVE,IDC_OPEN,IDC_STATUS);
			//ScreenAdaptor::ArrangeControls(hDlg,(ScreenAdaptor::SCREENADAPTOR_ARRANGE)(0x0b),0,IDC_SAVE,);
			break;
		default:
			break;
		
	}
	return DefWindowProc(hDlg, msg, wp, lp);
}

BOOL OnCreateDialog(HWND hwnd)
{
	if (!CreateSoftKeyBar(hwnd, IDR_MENU))
	{
		return FALSE;
	}

	SHINITDLGINFO shidi;

	shidi.dwMask	= SHIDIM_FLAGS;
	shidi.hDlg		= hwnd;

#ifdef WIN32_PLATFORM_WFSP
	shidi.dwFlags	= SHIDIF_SIZEDLGFULLSCREEN;
#else
	shidi.dwFlags	= SHIDIF_SIZEDLGFULLSCREEN|SHIDIF_DONEBUTTON/*|SHIDIF_SIPDOWN*/;
#endif  /* WIN32_PLATFORM_WFSP */

	return SHInitDialog(&shidi);
}

// Given a parent window and resource ID, create a softkey bar
BOOL CreateSoftKeyBar(HWND hwndParent, UINT nID)
{
	SHMENUBARINFO shmbi;

	ZeroMemory(&shmbi, sizeof(shmbi));
	shmbi.cbSize		= sizeof(shmbi);
	shmbi.hwndParent	= hwndParent;
	shmbi.dwFlags		= SHCMBF_HMENU;
	shmbi.nToolBarId	= nID;
	shmbi.hInstRes		= g_hInstance;

	return SHCreateMenuBar(&shmbi);
}

DWORD OnOpenXMLFile(HWND hDlg, wchar_t *buf,int *size)
{
	TCHAR	szFile[MAX_PATH] = TEXT("\0");
	OPENFILENAMEEX		ofnex;
	DWORD ret = 0;

	memset( &(ofnex), 0, sizeof(ofnex));
	ofnex.lStructSize	= sizeof(ofnex);
	ofnex.hwndOwner = hDlg;
	ofnex.lpstrFile = szFile;
	ofnex.nMaxFile = MAX_PATH;
	ofnex.lpstrTitle = TEXT("Select a file");
	ofnex.Flags = OFN_EXPLORER;	
	ofnex.ExFlags = /*OFN_EXFLAG_THUMBNAILVIEW*/OFN_EXFLAG_DETAILSVIEW;	
	ofnex.lpstrInitialDir = TEXT("\\Program Files\\XMLConfig");
	ofnex.lpstrFilter = TEXT("XML (*.xml)\0*.xml\0");	
	//ofnex.nMaxFileTitle = MAX_PATH;	
	memset(buf, 0x00, *size);
	if (GetOpenFileNameEx(&ofnex))	
		//ShowInfo(hDlg,ofn.lpstrFile);
	{
		OutputDebugString(szFile);
		HANDLE file = CreateFile(szFile,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
		DWORD lo=0,hi=0;
		lo = GetFileSize(file,&hi);
		if(lo < *size)
		{
			if(!ReadFile(file, (void*)buf, lo,&lo,NULL))
				ret = 1;
			*size = lo;
			StringCchPrintf(InputFile,MAX_PATH,szFile);
		}
		else
		{
			ret = 1;
			InputFile[0] = 0;
		}
		CloseHandle(file);
	}
	else
	{
		ret = 1;;
		InputFile[0] = 0;
	}
	return ret;
}
DWORD OnOpenMSGFile(HWND hDlg, TCHAR * szFile, char *buf,int *size)
{
		HANDLE file = CreateFile(szFile,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
		DWORD lo=0,hi=0;
		int ret = 0;
		lo = GetFileSize(file,&hi);
		if(lo < *size)
		{
			if(!ReadFile(file, (void*)buf, lo,&lo,NULL))
				ret = 1;
			*size = lo;
			StringCchPrintf(InputFile,MAX_PATH,szFile);
		}
		else
		{
			ret = 1;
			InputFile[0] = 0;
		}
		CloseHandle(file);
		return 0;
}
DWORD OnExecuteXMLCmd(HWND hDlg)
{
	wchar_t buf[XML_MAX_LEN];
	int size = XML_MAX_LEN;
	if(GetWindowText(GetDlgItem(hDlg,IDC_INPUT),buf, size)>0)
	{
		HRESULT hr         = E_FAIL;
		LPWSTR wszOutput   = NULL;

		// Process the XML.
		hr = DMProcessConfigXML(buf, CFGFLAG_PROCESS, &wszOutput);

		// The caller must delete the XML returned from DMProcessConfigXML.
		if(SUCCEEDED(hr))
		{
			SetWindowText(GetDlgItem(hDlg,IDC_OUTPUT),wszOutput);

			SetWindowText(GetDlgItem(hDlg,IDC_STATUS),L"Success");
			OnSaveButton(hDlg,wszOutput,0);
		}
		else
			SetWindowText(GetDlgItem(hDlg,IDC_STATUS),L"Error");
		delete [] wszOutput;
    
    return hr;
	
	}
	return 0;
}

BOOL OnSaveButton(HWND hDlg,wchar_t *buf,int size)
{
	
	TCHAR	szFile[MAX_PATH] = TEXT("\0");
	OPENFILENAME		ofnex;
	DWORD ret = 0;
	size = wcslen(buf)*sizeof(wchar_t);
	memset( &(ofnex), 0, sizeof(ofnex));
	ofnex.lStructSize	= sizeof(ofnex);
	ofnex.hwndOwner = hDlg;
	ofnex.lpstrFile = szFile;
	ofnex.nMaxFile = MAX_PATH;
	ofnex.lpstrTitle = TEXT("Select a file to save");
	ofnex.Flags = OFN_EXPLORER;	
	//ofnex.ExFlags = /*OFN_EXFLAG_THUMBNAILVIEW*/OFN_EXFLAG_DETAILSVIEW;	
	ofnex.lpstrInitialDir = TEXT("\\Program Files\\XMLConfig\\out");
	ofnex.lpstrFilter = TEXT("XML (*.xml)\0*.xml\0");	
	//ofnex.nMaxFileTitle = MAX_PATH;	

	//if (GetSaveFileName(&ofnex))	
	if(FormatOutputFilename(InputFile, OutputFile))
		//ShowInfo(hDlg,ofn.lpstrFile);
	{
		OutputDebugString(szFile);
		HANDLE file = CreateFile(OutputFile,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
		DWORD lo=0,res=0;
		//lo = GetFileSize(file,&hi);
		lo = size;
		char header[2] = {0xff, 0xfe};
		WriteFile(file, (void*)header, 2,&lo,NULL);
		GetNextLine(NULL, 0, 0, 0);
#if 1
		//Formated Writer
		wchar_t *ptr = buf, *out;
		int depth = 0,len = 0;
		static int d = 0;
		{
			do{
				len = 0;
				ptr = GetNextLine(ptr, &out, &depth, &len);
				if(ptr)
				{
					d =depth;
					printf("Depth:%d \n",depth );
					while(d-- > 0)
						WriteFile(file, (void*)L"\t", 2,&lo,NULL);
					lo = 0;
					WriteFile(file, (void*)out, len*sizeof(wchar_t),&lo,NULL);
					WriteFile(file, (void*)L"\r\n", 4,&lo,NULL);
					
				}
			}while(ptr);
		}
#else
		if(!(res =WriteFile(file, (void*)buf, size,&lo,NULL)))
			ret = 0;

		else
		{
			ret = 1;
		}
#endif
		CloseHandle(file);
	}
	else
	{
		ret = 1;;
	}
	return ret;
}

BOOL FormatOutputFilename(TCHAR *in, TCHAR *out)
{
	if(in[0]==0)
		return FALSE;
	StringCchPrintf(out,MAX_PATH,in);
	wchar_t *p = wcschr(out,L'.');
	if(p)
	{
		StringCchPrintf(p,MAX_PATH, L"_out.xml");
		p[wcslen(p)]=0;
		return TRUE;
	}	
	else
	{
		return FALSE;
	}
}

wchar_t * GetNextLine(wchar_t *ptr, wchar_t **out, int *depth, int *len)
{
	int i = 0;
	int start = -1;
	int end = -1;
	static int static_depth = 0;
	static int offset = 0;
	if(ptr==0)
	{
		static_depth = 0;
		offset = 0;
		return NULL;
	}
	static_depth +=offset;
	offset = 0;
	do{
		if(ptr[i] == 0)
			return NULL;
		if(ptr[i] == L'<')
		{
			start = i;
			(offset)+=2;
			if(ptr[i+1] ==L'/')
			{
				(offset)-=1;
				static_depth--;
			}
		}
		if(ptr[i] == L'>')
		{
			end = i;
			(offset)--;
			if(ptr[i-1] == L'/')
				(offset)--;
			*len = (end-start+1);
			*out = &ptr[start];
			*depth = static_depth;
			return &ptr[i+1];
		}
		i++;
	}while(1);
}

BOOL ReloadXMLFile(wchar_t ** buf,int* len, wchar_t* name)
{
	if(name == NULL || name[0]==0 || buf == NULL || len ==0)
		return FALSE;
	BOOL ret = FALSE;
	HANDLE file = CreateFile(name,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
	if(file == (HANDLE)-1)
		return FALSE;
	int len_low=0, len_hi = 0;
	len_low = GetFileSize(file,(LPDWORD)&len_hi);
	if(len_low==0xffffffff)
	{
		CloseHandle(file);
		MessageBox(NULL,L"Input buffer is not enough!",L"Error",MB_OK);
		return FALSE;
	}
	TCHAR *out = (TCHAR *)malloc((len_low+1)* sizeof(wchar_t));
	if(out !=NULL)
	{
		memset(out, 0x00, (len_low+1)* sizeof(wchar_t));
		ReadFile(file,out,len_low,(LPDWORD)&len_low,NULL);
		*len =len_low;
		*buf =out;
		ret = TRUE;
	}
	CloseHandle(file);
	return ret;
}

⌨️ 快捷键说明

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