📄 pppclientdlg.cpp
字号:
bp+=rc;
//读取了一些数据之后,缓冲区中的剩余可用空间也应该相应地减小。
cnt-=rc;
}
//timeout...
// para.bExit = TRUE;
// while(!para.IsExit) Sleep(1);
// CloseHandle(hThread);
////////////////////////////
return len;
}
//
//从服务端读取数据的函数。
//参数1:连接套接字;参数2:指向缓冲区的指针;参数3:缓冲区的长度;
//参数4:超时处理
int ReadSocket(SOCKET fd,char *bp,int len,DWORD timeout)
{
fd_set fdRead;
TIMEVAL tt;
tt.tv_sec=1;//timeout/1000;
tt.tv_usec=0;//(timeout%1000)*1000;
/////////////////////////////////////////////
int iRet=0;
int rc=0;
DWORD bt,et;
bt=et=GetTickCount();
MSG msg;
while(TRUE)//cnt>0)
{
if (::PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
FD_ZERO(&fdRead);
FD_SET(fd,&fdRead);
iRet=select(0,&fdRead,NULL,NULL,&tt);
if(iRet==SOCKET_ERROR)
{
break;
}
if(iRet>0)
{
if(FD_ISSET(fd,&fdRead))
{
//read
rc=recv(fd,bp,len,0);
if(rc==SOCKET_ERROR)
{
//接收错误!
int errorno;
errorno=WSAGetLastError();
return -1;
}
//If the connection has been gracefully closed, the return value is zero.
else if(rc==0)
{
int errorno;
errorno=WSAGetLastError();
return 0;
}
else
{
return rc;
}
}
}
//timeout
et=GetTickCount();
if(et-bt>=timeout) break;
}
return -2;
}
//SOCKET ClientSocket;
//
SENDFILEHEAD m_filehead;
BOOL m_sendfile_ready_flag=FALSE;
TCHAR m_savefilename[256];
//char Buffer[4096];
char Buffer[SOCKETBUFFSIZE];
//
//取当前文件的路径名
CString GetCurDir()
{
TCHAR sDrive[_MAX_DRIVE];
TCHAR sDir[_MAX_DIR];
TCHAR sFilename[_MAX_FNAME],Filename[_MAX_FNAME];
TCHAR sExt[_MAX_EXT];
GetModuleFileName(AfxGetInstanceHandle(), Filename, _MAX_PATH);
_tsplitpath(Filename, sDrive, sDir, sFilename, sExt);
CString homeDir(CString(sDrive) + CString(sDir));
int nLen = homeDir.GetLength();
if(homeDir.GetAt(nLen-1) != _T('\\'))
homeDir += _T('\\');
return homeDir;
}
//软件保护
void GetDiskCSerialNumber(CString &serial)
{
//在写程序时我们想对每一台计算机都生成一个唯一的标识,而且在一此共享软件中我们也看到,
//软件在不同的机器上生成了不同的标识,这是如何实现的呢,其实是软件有一部分程序读取了,
//本地计算机的一部分硬件参数(如硬盘序列号,网卡序列号等等),再通过一系列算法而得到了一个唯一标识,
LPCTSTR lpRootPathName="c:\\"; //取C盘
LPTSTR lpVolumeNameBuffer=new char[80];//磁盘卷标
DWORD nVolumeNameSize=80;// 卷标的字符串长度
DWORD VolumeSerialNumber;//硬盘序列号
DWORD MaximumComponentLength;// 最大的文件长度
LPTSTR lpFileSystemNameBuffer=new char[80];// 存储所在盘符的分区类型的长指针变量
DWORD nFileSystemNameSize=80;// 分区类型的长指针变量所指向的字符串长度
DWORD FileSystemFlags;// 文件系统的一此标志
DWORD sno;
if(::GetVolumeInformation(lpRootPathName,
lpVolumeNameBuffer, nVolumeNameSize,
&VolumeSerialNumber, &MaximumComponentLength,
&FileSystemFlags,
lpFileSystemNameBuffer, nFileSystemNameSize)
)
{
sno=VolumeSerialNumber;
// serial.sprintf("%lx",VolumeSerialNumber);
}
else //error
{
//serial=StrPas("abcd1234");
sno=12345678;
}
DWORD Secspclu,Bytespsec,Freeclu,Totalclu,Ts;//,Fs;
if(GetDiskFreeSpace("c:\\",&Secspclu,&Bytespsec,&Freeclu,&Totalclu))
{
//Fs:=Freeclu*Secspclu*Bytespsec;
Ts=Totalclu*Secspclu*Bytespsec;
}
else
{
Ts=1024*1024;
}
sno+=Ts;
//
//获得内存状态
MEMORYSTATUS memory;
memory.dwLength =sizeof(memory); //初始化
GlobalMemoryStatus(&memory);
//Memo1→Lines→Add(“您的物理内存是(Mb):”+String(int(memory.dwTotalPhys /1024/1024)));
//Memo1→Lines→Add(“其中可用内存是(Kb):”+String(int( memory. /1024)));
//获得CPU型号
SYSTEM_INFO systeminfo;
GetSystemInfo (&systeminfo);
//Memo1→Lines→Add(“您的CPU类型是:”+String( systeminfo.dwProcessorType ));
//LCJH-SN
serial.Format("%lX",sno+memory.dwTotalPhys+systeminfo.dwProcessorType);
//serial.sprintf("%lx",sno+memory.dwTotalPhys /1024/1024+systeminfo.dwProcessorType);
//Edit1.text:=FormatFloat('###,###',Ts); //总空间
//Edit2.text:=FormatFloat('###,###',Fs); //可用空间
delete lpVolumeNameBuffer;
delete lpFileSystemNameBuffer;
//编译,链接并运行程序,单击按钮,在弹出的对话框中就是我们要的序列号。
//对不对我们验证一下,进入dos窗口,打入"dir c:/p"命令,怎么样是不是和我们的程序显示的一模一样
//这样我们就在功告成了。
}
/////////////////////////
//
CString GetSoftWareRegisterCode(CString serial)
{
CString sn;
sn=serial;
if(sn.GetLength()<=0||sn.GetLength()%2!=0)
{
return TEXT("1234567890");
}
//全部为大写
//
sn.MakeUpper();
//
CString tmpstr;
int len;
len=sn.GetLength();
//0,1,2,3,4,5,6,7,8,9
//1,8,2,5,0,3,9,6,4,7
TCHAR code[11]={_T('1'),_T('9'),_T('2'),_T('6'),_T('4'),
_T('3'),_T('8'),_T('5'),_T('0'),_T('7'),
_T('\0')
};
//密码=[各项求和后模10]+[原码]+[各项求积后模10]
long he,ji;
he=0;
ji=1;
TCHAR ch,ss,mm;
TCHAR *mstr;
ss=0;
mm=0;
mstr=new TCHAR[len+2+1];
int count;
count=0;
for(int i=0;i<len;i++)
{
ch=sn.GetAt(i);
if(ch>=_T('A')&&ch<=_T('F'))
{
ss=ch-_T('A');
}
else
{
ss=ch-_T('0');
}
//he,ji
if(ss!=0)
{
he=he+ss;
ji=ji*ss;
}
//
if(ss!=0)
{
mm=code[ss];
mstr[count+1]=mm;
count++;
}
//.....
}
//he
ss=labs(he)%10;
mm=code[ss];
mstr[0]=mm;
//ji
ss=labs(ji)%10;
mm=code[ss];
mstr[count+1]=mm;
//
mstr[count+2]=_T('\0');
//
tmpstr=CString("HH-")+mstr;
//
delete mstr;
return tmpstr;
}
//extern void GetDiskCSerialNumber(CString &serial);
//extern CString GetSoftWareRegisterCode(CString serial);
//extern CString GetCurDir(void);
extern bool m_software_register_flag;
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
#include "ColorWnd.h"
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
CColorWnd m_register_static;
CXPButton m_okaboutbtn;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
virtual BOOL OnInitDialog();
afx_msg void OnRButtonDblClk(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
DDX_Control(pDX, IDC_REGISTER_STATIC, m_register_static);
DDX_Control(pDX, IDOK, m_okaboutbtn);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
ON_WM_RBUTTONDBLCLK()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPPPClientDlg dialog
CPPPClientDlg::CPPPClientDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPPPClientDlg::IDD, pParent)
{
//
m_modify_flag=false;
//
m_one_threadid=0;
m_one_thread_handle=NULL;
m_all_threadid=0;
m_all_thread_handle=NULL;
//
m_all_run_flag=false;
//
m_share_data_flag=false;
//
m_edit_type=-1;//-1:无效,0-Append,1-Insert(Before),2-Modify
m_cur_pos=-1;//当前位置
m_save_filename=_T("");
//
//for demo dlg
m_show_demo_flag=false;
m_show_main_flag=true;
MY_HOTKEY=1001;
MY_DEMO_HOTKEY=1002;
m_hotkey_flag=false;
m_demo_hotkey_flag=false;
//{{AFX_DATA_INIT(CPPPClientDlg)
m_speed = 0;
m_cur_filename = _T("");
m_delaytime = 0;
m_sharefile_flag = FALSE;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CPPPClientDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPPPClientDlg)
DDX_Control(pDX, IDC_POSITION_COMBO, m_position_combobox);
DDX_Control(pDX, IDC_OPENFILE_BUTTON, m_OpenfileBtn);
DDX_Control(pDX, IDC_PREV_BUTTON, m_PrevBtn);
DDX_Control(pDX, IDC_NEXT_BUTTON, m_NextBtn);
DDX_Control(pDX, IDC_LAST_BUTTON, m_LastBtn);
DDX_Control(pDX, IDC_FIRST_BUTTON, m_FirstBtn);
DDX_Control(pDX, IDC_DELALL_BUTTON, m_DelallBtn);
DDX_Control(pDX, IDC_DELONE_BUTTON, m_DeloneBtn);
DDX_Control(pDX, IDC_SAVE_BUTTON, m_SaveBtn);
DDX_Control(pDX, IDC_CANCEL_BUTTON, m_CancelBtn);
DDX_Control(pDX, IDC_INSERT_BUTTON, m_InsertBtn);
DDX_Control(pDX, IDC_APPEND_BUTTON, m_AppendBtn);
DDX_Control(pDX, IDC_RUN_PROGRESS, m_run_progressctrl);
DDX_Control(pDX, IDC_MESS_LIST, m_mess_list);
DDX_Control(pDX, IDC_ITEM_LIST, m_item_list);
DDX_Control(pDX, IDC_ACTIONOUT_COMBO, m_actionout_combobox);
DDX_Control(pDX, IDC_ACTIONIN_COMBO, m_actionin_combobox);
DDX_Control(pDX, IDC_TYPE_COMBO, m_type_combobox);
DDX_Text(pDX, IDC_SPEED_EDIT, m_speed);
DDV_MinMaxLong(pDX, m_speed, 0, 10000);
DDX_Text(pDX, IDC_CURFILENAME_EDIT, m_cur_filename);
DDX_Text(pDX, IDC_DELAYTIME_EDIT, m_delaytime);
DDV_MinMaxLong(pDX, m_delaytime, 0, 60000);
DDX_Check(pDX, IDC_SHAREFILE_CHECK, m_sharefile_flag);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPPPClientDlg, CDialog)
//{{AFX_MSG_MAP(CPPPClientDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(ID_EXIT_FILE, OnExitFile)
ON_COMMAND(ID_ABOUT, OnAbout)
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_BN_CLICKED(IDC_APPEND_BUTTON, OnAppendButton)
ON_BN_CLICKED(IDC_INSERT_BUTTON, OnInsertButton)
ON_BN_CLICKED(IDC_SAVE_BUTTON, OnSaveButton)
ON_BN_CLICKED(IDC_CANCEL_BUTTON, OnCancelButton)
ON_BN_CLICKED(IDC_DELONE_BUTTON, OnDeloneButton)
ON_BN_CLICKED(IDC_DELALL_BUTTON, OnDelallButton)
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_NOTIFY(NM_CLICK, IDC_ITEM_LIST, OnClickItemList)
ON_NOTIFY(NM_DBLCLK, IDC_ITEM_LIST, OnDblclkItemList)
ON_COMMAND(ID_MOVEUP_EDIT, OnMoveupEdit)
ON_COMMAND(ID_MOVEDOWN_EDIT, OnMovedownEdit)
ON_COMMAND(ID_COPY_EDIT, OnCopyEdit)
ON_COMMAND(ID_CUT_EDIT, OnCutEdit)
ON_COMMAND(ID_PASTE_EDIT, OnPasteEdit)
ON_CBN_SELCHANGE(IDC_TYPE_COMBO, OnSelchangeTypeCombo)
ON_BN_CLICKED(IDC_OPENFILE_BUTTON, OnOpenfileButton)
ON_COMMAND(ID_SETPOS_OPTION, OnSetposOption)
ON_WM_DESTROY()
ON_COMMAND(ID_SHOWHIDE_DEMO_OPTION, OnShowhideDemoOption)
ON_COMMAND(ID_SHOWHIDE_MAIN_OPTION, OnShowhideMainOption)
ON_MESSAGE(WM_HOTKEY,OnHotKey)
ON_MESSAGE(WM_SHOW_MAINWND_MESSAGE,OnShowMainWnd)
ON_COMMAND(ID_SETSIZE_OPTION, OnSetsizeOption)
ON_COMMAND(ID_SETSERVER_OPTION, OnSetserverOption)
ON_COMMAND(ID_DEMOONE_SIMULATION, OnDemooneSimulation)
ON_COMMAND(ID_DEMOALL_SIMULATION, OnDemoallSimulation)
ON_COMMAND(ID_STOPDEMO_SIMULATION, OnStopdemoSimulation)
ON_WM_SHOWWINDOW()
ON_WM_SETCURSOR()
ON_WM_CREATE()
ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipText )
ON_WM_TIMER()
ON_COMMAND(ID_ADJUSTTIME_COMM, OnAdjusttimeComm)
ON_COMMAND(ID_SENDONE_COMM, OnSendoneComm)
ON_COMMAND(ID_SENDALL_COMM, OnSendallComm)
ON_COMMAND(ID_STARTPLAY_COMM, OnStartplayComm)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -