📄 frmmain.cpp
字号:
}
else if(StrData.Find("KR")>=0)
{
KRCard(); //发钥匙卡
}
else if(StrData.Find("KD")>=0)
{
KDCard(); //删除钥匙卡
}
else if(StrData.Find("LE")>=0)
{
IsStop=true;//服务器要求暂停
}
else if(StrData.Find("LA")>=0)
{
CheckRunStat();//检查是否全面运行状态
}
}
//建立网络连接
BOOL CFrmMain::SetUpConnect()
{
UpdateData(TRUE);
m_SocketAddr.sin_addr.s_addr=inet_addr(m_FidelioIP);
m_SocketAddr.sin_family=AF_INET;
if (m_HostIPAddress==m_FidelioIP)
{ //服务器IP地址和本机IP地址相同
m_SocketAddr.sin_port=m_ServPort;//服务器端口m_ServPort
}
else
{ //服务器IP地址和本机IP地址不同
m_SocketAddr.sin_port=htons(m_ServPort);//服务器端口m_ServPort
}
IsLink=true;
//启动线程
m_pThread=AfxBeginThread(ThreadFunc,0);
return TRUE;
}
//断开网络连接
BOOL CFrmMain::DisConnect()
{
if (IsLink)
{
HANDLE hThread=m_pThread->m_hThread;
IsLink=false;//关闭线程,断开连接
//结束线程
::WaitForSingleObject(hThread,5000);
}
return TRUE;
}
//通过网络发送数据
BOOL __fastcall CFrmMain::SendData(CString StrData)
{
CString szSendData=StrData;
CString szBegain;//贞头
CString szEnd; //贞尾
szBegain.Format("%c",0x02);
szEnd.Format("%c",0x03);
szSendData=szBegain+szSendData;
szSendData=szSendData+szEnd;
send(m_Socket,szSendData,szSendData.GetLength()+1,0);
::Sleep(100);
return TRUE;
}
BOOL CFrmMain::IPStrToByteArry(CString str)
{
int i=0;
int j,z=0;
char SubArry[3];
int f=str.GetLength();
while (i<str.GetLength())
{
j=0;
memset(SubArry, 0,sizeof(SubArry));
while ((i<f)&&(str[i]!='.'))
{
SubArry[j]=str[i];
i++;
j++;
}
m_nField[z++]=(BYTE)atoi(SubArry);
i++;
}
return TRUE;
}
CString CFrmMain::ByteArryToIPStr(BYTE ByteArry[4])
{
CString IPstr="";
TCHAR buffer[10]="\0";
//进行IP地址转化
IPstr = _itoa(ByteArry[0],buffer,10);
IPstr += _T('.');
IPstr += _itoa(ByteArry[1],buffer,10);
IPstr += _T('.');
IPstr += _itoa(ByteArry[2],buffer,10);
IPstr += _T('.');
IPstr += _itoa(ByteArry[3],buffer,10);
return IPstr;
}
LPBYTE CFrmMain::CString_To_LPBYTE(CString str)
{
LPBYTE lpb=new BYTE[str.GetLength()+1];
for(int i=0;i<str.GetLength();i++)
lpb[i]=str[i];
lpb[str.GetLength()]=0;
return lpb;
}
int CFrmMain::StringToInt(CString String)
{
int Strlen=String.GetLength();
int iResult=0;
for (int i=0;i<Strlen;i++)
{
int iRadix=1;
for (int j=0;j<Strlen-i-1;j++)
{
iRadix=iRadix*10;
}
iResult+=(ChToShort(String[i]))*iRadix;
}
return iResult;
}
UINT ThreadFunc(LPVOID pParam)
{
int s=1;
char pBuff[1000];
CFrmMain *pSocketPort=(CFrmMain*) AfxGetApp()->GetMainWnd();
while (pSocketPort&&pSocketPort->IsLink)
{
//创建socket
pSocketPort->m_Socket=socket(AF_INET,SOCK_STREAM,0);
s=1;
while(connect(pSocketPort->m_Socket,(sockaddr*)(&pSocketPort->m_SocketAddr),sizeof(pSocketPort->m_SocketAddr)))
{
}
//服务器连接成功,循环获得数据
while((s!=SOCKET_ERROR)&&(s!=0)&&(pSocketPort->IsLink))
{
memset(pBuff, 0,sizeof(pBuff));
//调用recv函数接收数据
s=recv(pSocketPort->m_Socket,pBuff,sizeof(pBuff),0);
if((s==0) | (s== SOCKET_ERROR))
break;
CString ReceiveData;
ReceiveData.Format("%s",pBuff);
//分析接收到的数据
pSocketPort->AnalyseRecData(ReceiveData);
}
closesocket(pSocketPort->m_Socket);
}
return 0;
}
void CFrmMain::OnOsCheck()
{
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",NULL,KEY_ALL_ACCESS,&m_hKey)!=ERROR_SUCCESS)
{
AfxMessageBox(Translate(m_InfoFilePath,"打开注册表项失败!"),MB_OK|MB_ICONINFORMATION);
return;
}
if (IsDlgButtonChecked(IDC_OS_CHECK))
{
LPBYTE lpRegistPath=CString_To_LPBYTE(m_RegistPath);
::RegSetValueEx(m_hKey,"HsyFdLServer",NULL,REG_SZ,lpRegistPath,100);
}
else
{
::RegDeleteValue(m_hKey,"HsyFdLServer");
}
RegCloseKey(m_hKey);
}
void CFrmMain::OnClose()
{
if (m_bShutdown)
{
if(IsLink)
{
//发送结束命令
//CStop();
if (m_pThread)
{
HANDLE hThread=m_pThread->m_hThread;
//断开网络连接,结束线程
IsLink = false;
//结束线程
::WaitForSingleObject(hThread,5000);
}
}
//关闭串口端口
typedef short (__stdcall *pMakeCardClosePort)(short);
pMakeCardClosePort pFuncMakeCardClosePort= (pMakeCardClosePort)GetProcAddress (hInstCard,"MakeCardClosePort");
pFuncMakeCardClosePort(Port);
CDialog::OnClose();
}
else
{
ShowWindow(SW_HIDE);
}
}
//系统主动跟服务器申请暂停
void CFrmMain::OnStop()
{
CStop(); //给服务器发送暂停命令暂停
}
//系统主动跟服务器申请重新连接
void CFrmMain::OnLinkagain()
{
CString Str;
CString TimeStr,DateStr;
CTime tCurrentTime;
tCurrentTime=CTime::GetCurrentTime();
DateStr=tCurrentTime.Format("%y%m%d");
TimeStr=tCurrentTime.Format("%H%M%S");
Str="";
Str="LS|DA"+DateStr+"|";
Str+="TI"+ TimeStr+ "|";
if(SendData(Str))//发送重新启动命令
return;
}
//托盘程序消息处理函数
LRESULT CFrmMain::OnTrayNotification(WPARAM uID, LPARAM lEvent)
{
if (m_bShowTrayNotifications) {
static LPCSTR MouseMessages[] = { "WM_MOUSEMOVE",
"WM_LBUTTONDOWN", "WM_LBUTTONUP", "WM_LBUTTONDBLCLK",
"WM_RBUTTONDOWN", "WM_RBUTTONUP", "WM_RBUTTONDBLCLK",
"WM_MBUTTONDOWN", "WM_MBUTTONUP", "WM_MBUTTONDBLCLK" };
CString s;
s.Format("托盘通知消息: ID=%d, lEvent=0x%04x %s\r\n",
uID, lEvent, WM_MOUSEFIRST<=lEvent && lEvent<=WM_MOUSELAST ?
MouseMessages[lEvent-WM_MOUSEFIRST] : "(未知消息)");
m_wndEdit.SetSel(-1, -1);
m_wndEdit.ReplaceSel(s);
m_wndEdit.SendMessage(EM_SCROLLCARET);
}
return 0;
}
void CFrmMain::OnTrayExit()
{
m_bShutdown = TRUE;
SendMessage(WM_CLOSE);
}
void CFrmMain::OnShowAutoNetFdl()
{
ShowWindow(SW_NORMAL);
SetForegroundWindow();
}
void CFrmMain::OnSysCommand(UINT nID, LPARAM lParam)
{
// 屏蔽最大化(MFC Bug),将最小化重定向至隐藏窗口
if (nID == SC_MAXIMIZE)
return;
if (nID == SC_MINIMIZE)
ShowWindow(SW_HIDE);
else
CWnd::OnSysCommand(nID, lParam);
}
void CFrmMain::OnSelchangeDoortypeCombo()
{
IsEdit=true;
}
void CFrmMain::OnSelchangePortCombo()
{
IsEdit=true;
}
void CFrmMain::OnKillfocusServportEdit()
{
UpdateData(TRUE);
//读取Fidelio服务器端口
int iIniServPort=GetPrivateProfileInt("IsIni","FidelioPort",5000,ConfigureFile);
if (iIniServPort!=m_ServPort)
IsEdit=true;
}
BOOL CFrmMain::IsIPAddressChanged()
{
CString szIniFidelioIP;
//保存设置
((CIPAddressCtrl *)GetDlgItem(IDC_ADDR_COMBO))->GetAddress(m_nField[0],m_nField[1],m_nField[2],m_nField[3]);
szIniFidelioIP=ByteArryToIPStr(m_nField);
if(m_FidelioIP!=szIniFidelioIP)
{
IsEdit=true;
return TRUE;
}
return FALSE;
}
void CFrmMain::OnThreadExcute()
{
SetUpConnect();
}
//调用系统使用帮助
void CFrmMain::OnHelp()
{
}
//取得本机IP地址
void CFrmMain::GetHostIPAddress()
{
char szHostName[256];
int nRetCode;
CString sHostName;
nRetCode = gethostname(szHostName, sizeof(szHostName));
if (nRetCode != 0)
{
// An error has occurred
sHostName = _T("");;
}
struct hostent FAR *lpHostEnt = gethostbyname (sHostName);
if (lpHostEnt == NULL)
{
m_HostIPAddress = _T("");
}
LPSTR lpAddr = lpHostEnt->h_addr_list[0];
if (lpAddr) {
struct in_addr inAddr;
memmove (&inAddr, lpAddr, 4);
m_HostIPAddress = inet_ntoa (inAddr);
if (m_HostIPAddress.IsEmpty())
m_HostIPAddress = _T("");
}
}
void CFrmMain::OnOsCheck2()
{
UpdateData();
if(!m_IsTongxing)
m_RefCount=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -