📄 main.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 + -