📄 pppserverdlg.cpp
字号:
BOOL WriteDirectory(CString dd)
{
HANDLE fFile;
WIN32_FIND_DATA fileinfo;
CStringArray m_arr;
BOOL tt;
int x1 = 0;
CString tem = _T("");
fFile = FindFirstFile(dd,&fileinfo);
// if(fFile==INVALID_HANDLE_VALUE)
// {
// return FALSE;
// }
// if the file exists and it is a directory
if(fileinfo.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
// Directory Exists close file and return
FindClose(fFile);
return TRUE;
}
m_arr.RemoveAll();
for(x1 = 0; x1 < dd.GetLength(); x1++ )
{
if(dd.GetAt(x1) != _T('\\'))
tem += dd.GetAt(x1);
else
{
m_arr.Add(tem);
tem += _T("\\");
}
if(x1 == dd.GetLength()-1)
m_arr.Add(tem);
}
// Close the file
FindClose(fFile);
// Now lets cycle through the String Array and create each directory in turn
for(x1 = 1; x1 < m_arr.GetSize(); x1++)
{
tem = m_arr.GetAt(x1);
tt = CreateDirectory(tem,NULL);
// If the Directory exists it will return a false
if(tt)
SetFileAttributes(tem,FILE_ATTRIBUTE_NORMAL);
// If we were successful we set the attributes to normal
}
// Now lets see if the directory was successfully created
fFile = FindFirstFile(dd,&fileinfo);
m_arr.RemoveAll();
if(fileinfo.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
// Directory Exists close file and return
FindClose(fFile);
return TRUE;
}
else
{
// For Some reason the Function Failed Return FALSE
FindClose(fFile);
return FALSE;
}
}
/////////////////////////////////////////////////////////////////////////////
// CPPPServerDlg dialog
CPPPServerDlg::CPPPServerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPPPServerDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPPPServerDlg)
m_delaytime = 0;
m_cur_filename = _T("");
m_sharefile_flag = FALSE;
m_speed = 0;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CPPPServerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPPPServerDlg)
DDX_Control(pDX, IDC_TYPE_COMBO, m_type_combobox);
DDX_Control(pDX, IDC_POSITION_COMBO, m_position_combobox);
DDX_Control(pDX, IDC_PLAYTABLE_LIST, m_list);
DDX_Control(pDX, IDC_MESS_LIST, m_mess_list);
DDX_Control(pDX, IDC_ACTIONOUT_COMBO, m_actionout_combobox);
DDX_Control(pDX, IDC_ACTIONIN_COMBO, m_actionin_combobox);
DDX_Text(pDX, IDC_DELAYTIME_EDIT, m_delaytime);
DDV_MinMaxLong(pDX, m_delaytime, 0, 60000);
DDX_Text(pDX, IDC_FILENAME_EDIT, m_cur_filename);
DDX_Check(pDX, IDC_SHAREFILE_CHECK, m_sharefile_flag);
DDX_Text(pDX, IDC_SPEED_EDIT, m_speed);
DDV_MinMaxLong(pDX, m_speed, 0, 10000);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPPPServerDlg, CDialog)
//{{AFX_MSG_MAP(CPPPServerDlg)
ON_COMMAND(ID_ABOUT_HELP, OnAboutHelp)
ON_WM_DESTROY()
ON_WM_TIMER()
ON_COMMAND(ID_STOPALL_CONTROL, OnStopallControl)
ON_COMMAND(ID_AUTORUN_REG_OPTION, OnAutorunRegOption)
ON_COMMAND(ID_EXIT_FILE, OnExitFile)
ON_COMMAND(ID_SHOWHIDE_DEMODLG_CONTROL, OnShowhideDemodlgControl)
ON_COMMAND(ID_SHOWHIDE_MAINDLG_CONTROL, OnShowhideMaindlgControl)
ON_MESSAGE(WM_HOTKEY,OnHotKey)
ON_MESSAGE(WM_SHOW_MAINWND_MESSAGE,OnShowMainWnd)
ON_COMMAND(ID_SETPOS_OPTION, OnSetposOption)
ON_COMMAND(ID_SETSIZE_OPTION, OnSetsizeOption)
ON_COMMAND(ID_NEW_FILE, OnNewFile)
ON_COMMAND(ID_OPEN_FILE, OnOpenFile)
ON_COMMAND(ID_SAVE_FILE, OnSaveFile)
ON_COMMAND(ID_SAVEAS_FILE, OnSaveasFile)
ON_COMMAND(ID_COPY_EDIT, OnCopyEdit)
ON_COMMAND(ID_CUT_EDIT, OnCutEdit)
ON_COMMAND(ID_PASTE_EDIT, OnPasteEdit)
ON_BN_CLICKED(IDC_ADD_BUTTON, OnAddButton)
ON_BN_CLICKED(IDC_INSERT_BUTTON, OnInsertButton)
ON_BN_CLICKED(IDC_SAVE_BUTTON, OnSaveButton)
ON_BN_CLICKED(IDC_FIRST_BUTTON, OnFirstButton)
ON_BN_CLICKED(IDC_PREV_BUTTON, OnPrevButton)
ON_BN_CLICKED(IDC_NEXT_BUTTON, OnNextButton)
ON_BN_CLICKED(IDC_LAST_BUTTON, OnLastButton)
ON_BN_CLICKED(IDC_OPEN_BUTTON, OnOpenButton)
ON_NOTIFY(NM_CLICK, IDC_PLAYTABLE_LIST, OnClickPlaytableList)
ON_NOTIFY(NM_DBLCLK, IDC_PLAYTABLE_LIST, OnDblclkPlaytableList)
ON_BN_CLICKED(IDC_CANCEL_BUTTON, OnCancelButton)
ON_BN_CLICKED(IDC_CLEAR_BUTTON, OnClearButton)
ON_CBN_SELCHANGE(IDC_TYPE_COMBO, OnSelchangeTypeCombo)
ON_CBN_EDITCHANGE(IDC_TYPE_COMBO, OnEditchangeTypeCombo)
ON_COMMAND(ID_MOVEUP_EDIT, OnMoveupEdit)
ON_COMMAND(ID_MOVEDOWN_EDIT, OnMovedownEdit)
ON_COMMAND(ID_PLAYONE_CONTROL, OnPlayoneControl)
ON_COMMAND(ID_PLAYALL_CONTROL, OnPlayallControl)
ON_BN_CLICKED(IDC_DELONE_BUTTON, OnDeloneButton)
ON_COMMAND(ID_AUOTPARA_CONTROL, OnAuotparaControl)
ON_COMMAND(ID_REGISTER_OPTION, OnRegisterOption)
ON_MESSAGE(WM_AUTORUN,OnAutoRun)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPPPServerDlg message handlers
BOOL CPPPServerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
// 自己设置对话框图标。MFC不会为对话框应用程序设置它
//m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME_BIGICON);
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
m_main_dlg=this;
m_software_registered_flag=FALSE;//NOT REGISTER
// AfxGetApp()->LoadIcon(IDR_MAINFRAME);
// CenterWindow(GetDesktopWindow()); // center to the hpc screen
//load system parameter
TCHAR exeFullPath[MAX_PATH];
int len2 = GetModuleFileName(NULL,exeFullPath,MAX_PATH);
CString strDir(exeFullPath);
strDir.TrimLeft();
strDir.TrimRight();
CString strTemp = strDir.Left(strDir.GetLength() - 3);
strDir = strTemp;
strDir += _T("ini");
m_ini_pathname = strDir;
//
{//=========================================
m_keycode_pathname=strTemp;
m_keycode_pathname=m_keycode_pathname+_T("DAT");
//////////////////////
}
/////////////////////////////////////////
//WAY 1
FILE *fp;
fp=_tfopen(m_ini_pathname,L"rb");
if(!fp)
{
m_system_para.m_show_startx=0;
m_system_para.m_show_starty=0;
m_system_para.m_show_width=320;
m_system_para.m_show_height=240;
m_system_para.m_auto_run_flag=0;
// m_system_para.m_watchdog_flag=0;
//wcscpy(m_system_para.m_autorun_tabfile,_T(""));
wcscpy(m_system_para.m_autorun_tabfile,GetCurDir());
wcscat(m_system_para.m_autorun_tabfile,_T("\\PLAYTAB.TAB"));
wcscpy(m_system_para.m_save_pathname,GetCurDir());
wcscat(m_system_para.m_save_pathname,_T("\\SAVE"));
_tcscpy(m_system_para.software_SN,_T(""));
m_system_para.hour=12;
m_system_para.minute=0;
m_system_para.second=0;
}
else
{
//x
if(fread((char*)&m_system_para.m_show_startx,1,sizeof(SYSTEM_PARAMETER),fp)!=sizeof(SYSTEM_PARAMETER))
{
m_system_para.m_show_startx=0;
m_system_para.m_show_starty=0;
m_system_para.m_show_width=320;
m_system_para.m_show_height=240;
m_system_para.m_auto_run_flag=0;
// m_system_para.m_watchdog_flag=0;
//wcscpy(m_system_para.m_autorun_tabfile,_T(""));
wcscpy(m_system_para.m_autorun_tabfile,GetCurDir());
wcscat(m_system_para.m_autorun_tabfile,_T("\\PLAYTAB.TAB"));
wcscpy(m_system_para.m_save_pathname,GetCurDir());
wcscat(m_system_para.m_save_pathname,_T("\\SAVE"));
_tcscpy(m_system_para.software_SN,_T(""));
m_system_para.hour=12;
m_system_para.minute=0;
m_system_para.second=0;
}
fclose(fp);
}
//set timer for reset software
SetTimer(1,5000,NULL);
//set timer for software protected
{
DWORD f,n,a;
if(GetSoftProtectedRegistered(f,n,a))
{
if(f>=1||n>a)
{
//软件免费试用到期
m_software_protected_flag=TRUE;
}
else
{
m_software_protected_flag=FALSE;
if(f==0&&a>0&&n<a)//继续试用
SetTimer(2,60000,NULL);
//
}
}
else//
{
//软件可免费使用1个月
if(SetSoftProtectedRegistered(6))
{
m_software_protected_flag=FALSE;//..工程安装人员应该重新启动软件.使新的软件起效
SetTimer(2,60000,NULL);
}
else
{
m_software_protected_flag=TRUE;//出错,软件保护
}
}
}
//
m_reset_begin_time=m_reset_end_time=GetTickCount();
CString serial;
//serial=GetSerialNumberFromKernelIoControl();
serial=GetSerialNumber(m_keycode_pathname);
//m_system_para
CString new_code,old_code;
old_code=m_system_para.software_SN;
new_code=GetSoftWareRegisterCode(serial);
if(new_code==old_code)
{
//GetDlgItem(IDC_REGISTER_STATIC)->SetWindowText(TEXT("Registered"));
m_software_registered_flag=TRUE;
}
else
{
//GetDlgItem(IDC_REGISTER_STATIC)->SetWindowText(TEXT("Unregistered"));
m_software_registered_flag=FALSE;
}
//建立服务器端socket
if((serverSocket=socket(AF_INET, SOCK_STREAM, 0))==INVALID_SOCKET)
{
// printf("Create socket error\n");
//CString str;
ShowMessage(L"Create socket error");
//m_meslist.AddString(str);
//WSACleanup();
return FALSE;
}
BOOL val = TRUE;//???
//SO_REUSEADDR选项就是可以实现端口重绑定的 SO_REUSEADDR SO_EXCLUSIVEADDRUSE
if(setsockopt(serverSocket,SOL_SOCKET,SO_REUSEADDR ,(char *)&val,sizeof(val))!=0)
{
//printf("error!setsockopt failed!\n");
ShowMessage(L"setsockopt failed!");
closesocket(serverSocket);
return FALSE;
}
//2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,
//不经历TIME_WAIT的过程:
BOOL bDontLinger = FALSE;
if(setsockopt(serverSocket,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL))!=0)
{
ShowMessage(L"setopt-error-5");
closesocket(serverSocket);
return FALSE;
}
//填充服务器端SOCKADDR_IN结构
serverAddr.sin_family=AF_INET;
serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);
serverAddr.sin_port=htons(USER_PORT);
//将服务器端socket与指定IP地址和端口绑定
if(bind(serverSocket,(SOCKADDR *)&serverAddr,sizeof(serverAddr))==SOCKET_ERROR)
{
int temp;
temp=WSAGetLastError();
ShowMessage(L"Bind error!");
closesocket(serverSocket);
//WSACleanup();
return FALSE;
}
//指定服务器端serverSocket为监听模式point to point
if(listen(serverSocket,1)!=0)
{
//printf("Listen error!\n");
ShowMessage(L"Listen error!");
closesocket(serverSocket);
//WSACleanup();
return FALSE;
}
//设置异步方式
DWORD ul=1;
ioctlsocket(serverSocket,FIONBIO,&ul);
//printf("Let's begin!\n");
clientAddrLen=sizeof(clientAddr);
//start thread server accept socket
m_server_run_flag=true;
m_server_thread_handle=CreateThread(NULL,0,
RunServerThread,this,CREATE_SUSPENDED,&m_server_threadid);
if(!m_server_thread_handle)
{
m_server_run_flag=false;
ShowMessage(L"Create Server Thread failed!");
//m_meslist.AddString(L"Create Server Thread failed!");
return FALSE;
}
else
{
// m_all_run_flag=true;
if(ResumeThread(m_server_thread_handle)==0xFFFFFFFF)
{
ShowMessage(L"Run Server Thread failed!");
// m_meslist.AddString(L"Run Server Thread failed!");
m_server_run_flag=false;
return FALSE;
}
else
{
ShowMessage(L"Run Server Thread OK!");
}
//CloseHandle((HANDLE)m_server_thread_handle);
}
//watchdog start
//取的系统所有字体
HDC hdc;
// INT i, rc;
//Enumerate the available fonts.
hdc =::GetDC(this->GetSafeHwnd());
//
m_all_logfont.RemoveAll();
EnumFontFamilies ((HDC)hdc, (LPTSTR)NULL,
GetSystemAllFontname,(LPARAM)&m_all_logfont);
::ReleaseDC (this->GetSafeHwnd(), hdc);
// 寻找HotKey对应的原子是否存在于原子列表
//int id;
ATOM m_atom;
if((m_atom=GlobalFindAtom(L"Hotkey CTRL+ALT+F12")) == 0)
{
// 获取当前窗口句柄
HWND handle = GetSafeHwnd();
//显示主窗体
// 如果没有存在于原子列表,则创建一个原子
MY_HOTKEY = GlobalAddAtom(L"Hotkey CTRL+ALT+F12");
//注册全局热键Ctrl + Alt + F12
if(RegisterHotKey(handle, MY_HOTKEY, MOD_ALT|MOD_CONTROL, VK_F12))
m_hotkey_flag=true;
else
m_hotkey_flag=false;
}
else
{
//MessageBox(L"CTRL+ALT+F12 HOT KEY has been Registed",L"System Error",MB_OK|MB_ICONERROR);
GlobalDeleteAtom(m_atom);
// 获取当前窗口句柄
HWND handle = GetSafeHwnd();
//显示主窗体
// 如果没有存在于原子列表,则创建一个原子
MY_HOTKEY = GlobalAddAtom(L"Hotkey CTRL+ALT+F12");
//注册全局热键Ctrl + Alt + F12
if(RegisterHotKey(handle, MY_HOTKEY, MOD_ALT|MOD_CONTROL, VK_F12))
m_hotkey_flag=true;
else
m_hotkey_flag=false;
//m_hotkey_flag=false;
}
//else // 如果HotKey已经存在于原子列表,则终止程序运行
//PostQuitMessage(0);
ATOM m_atom1;
if((m_atom1=GlobalFindAtom(L"Hotkey CTRL+ALT+F11")) == 0)
{
// 获取当前窗口句柄
HWND handle = GetSafeHwnd();
//显示主窗体
// 如果没有存在于原子列表,则创建一个原子
MY_DEMO_HOTKEY = GlobalAddAtom(L"Hotkey CTRL+ALT+F11");
//注册全局热键Ctrl + Alt + F12
if(RegisterHotKey(handle, MY_DEMO_HOTKEY, MOD_ALT|MOD_CONTROL, VK_F11))
m_demo_hotkey_flag=true;
else
m_demo_hotkey_flag=false;
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -