📄 analysis.cpp
字号:
i=1;
if (aDelKch)
{
CW[j][0]=CreateWindowEx(NULL,"button",Buffer, WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, 20, 110+20*row, 295, 20, hDlgChoose, NULL, hInst, NULL);
SendMessage(CW[j][0],WM_SETFONT,(unsigned int)hFont,1);
}
else
{
CW[j][0]=CreateWindowEx(NULL,"static",Buffer, WS_CHILD | WS_VISIBLE, 40, 110+20*row, 295, 20, hDlgChoose, NULL, hInst, NULL);
SendMessage(CW[j][0],WM_SETFONT,(unsigned int)hFont,1);
}
//服从调剂
CW[j][6]=CreateWindowEx(NULL,"button",0, WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, 320, 110+20*row, 20, 20, hDlgChoose, NULL, hInst, NULL);
SendMessage(CW[j][6],WM_SETFONT,(unsigned int)hFont,1);
UpdateWindow(hDlgChoose);
while(Locate(R,"<TD>","</TD>",&pos,&len))
{
R+=pos;
if (len==1) //此志愿已选
{
Name[1]=0;
Name[0]=*R;
CW[j][i]=CreateWindowEx(NULL,"static", Name, WS_CHILD | WS_VISIBLE , 260+i*102,113+20*row, 10, 15, hDlgChoose, NULL, hInst, NULL);
SendMessage(CW[j][i],WM_SETFONT,(unsigned int)hFont,1);
i++;
continue;
}
if (*R=='&') continue; //服从调剂
if (memcmp(R,"已经选中",8)==0)
{
CW[j][i]=CreateWindowEx(NULL,"static", "已经选中", WS_CHILD | WS_VISIBLE , 260+i*102,113+20*row, 200, 15, hDlgChoose, NULL, hInst, NULL);
SendMessage(CW[j][i],WM_SETFONT,(unsigned int)hFont,1);
goto rowfinish;
}
break;
}
k=i; //暂时保存一下i
if (memcmp(R,"<select",7)==0)
{
R+=23;
for (;i<6;i++)
{
CW[j][i]=CreateWindowEx(NULL,"combobox", 0, WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST , 260+i*83,110+20*row, 80, 1000, hDlgChoose, NULL, hInst, NULL);
SendMessage(CW[j][i],WM_SETFONT,(unsigned int)hFont,1);//| CBS_NOINTEGRALHEIGHT | CBS_HASSTRINGS
}
while (Locate(R,"<option","</option>",&pos,&len))
{
R+=pos;
Locate(R,">","</option>",&pos,&len);
R+=pos;
RtlZeroMemory(Name,sizeof(Name));
memcpy(Name,R,len);
for (i=k;i<6;i++)
SendMessage(CW[j][i],CB_ADDSTRING,0,(long)Name);
R=R+len+9;
if (memcmp(R,"</TD>",5)==0)break;
}
for (i=k;i<6;i++)
SendMessage(CW[j][i],CB_SETCURSEL,0,0);
}
rowfinish:
Locate(R,"</tr>",0,&pos,0);
R+=pos;
//Unix R+1
if ( !memcmp(R+1,"</table>",8)) break;
j++;
row++;
if (j>MAX_COURSE)
{
MessageBox(0,"对不起,数据有误,无法继续分析",szTitle,MB_ICONWARNING);
return;
}
}
R+=10;
finish_analysis3:
if (Locate(R,"aInsertKch",0,&pos,0))
{
row++;
R+=pos;
CW2[MAX_COURSE+5]=CreateWindowEx(NULL,"static", "课程号", WS_CHILD | WS_VISIBLE , 20,118+20*row, 40, 20, hDlgChoose, NULL, hInst, NULL);
SendMessage(CW2[MAX_COURSE+5],WM_SETFONT,(unsigned int)hFont,1);
CW2[MAX_COURSE+4]=CreateWindowEx(NULL,"edit", 0, WS_CHILD | WS_VISIBLE |WS_BORDER, 60,115+20*row, 100, 20, hDlgChoose, NULL, hInst, NULL);
SendMessage(CW2[MAX_COURSE+4],WM_SETFONT,(unsigned int)hFont,1);//| CBS_NOINTEGRALHEIGHT | CBS_HASSTRINGS
SendMessage(CW2[MAX_COURSE+4],EM_LIMITTEXT,7,0);
}
if (Locate(R,"aInsertKxh",0,&pos,0))
{
row++;
R+=pos;
CW2[MAX_COURSE+7]=CreateWindowEx(NULL,"static", "课序号", WS_CHILD | WS_VISIBLE , 20,118+20*row+10, 40, 20, hDlgChoose, NULL, hInst, NULL);
SendMessage(CW2[MAX_COURSE+7],WM_SETFONT,(unsigned int)hFont,1);
CW2[MAX_COURSE+6]=CreateWindowEx(NULL,"edit", 0, WS_CHILD | WS_VISIBLE |WS_BORDER|ES_NUMBER , 60,115+20*row+10, 30, 20, hDlgChoose, NULL, hInst, NULL);
SendMessage(CW2[MAX_COURSE+6],WM_SETFONT,(unsigned int)hFont,1);//| CBS_NOINTEGRALHEIGHT | CBS_HASSTRINGS
SendMessage(CW2[MAX_COURSE+6],EM_LIMITTEXT,2,0);
}
if (mode)
{
Locate(R,"</form>",0,&pos,0);
}
else
{
Locate(R,"<hr",0,&pos,0);
}
R+=pos;
for (i=MAX_COURSE+3;i>=MAX_COURSE;i--)
{
row++;
//Unix <br>\n
if (mode)
{
Locate(R,"\n","<br>",&pos,&len);
}
else
{
Locate(R,"<br>\n","<br>",&pos,&len);
}
R+=pos;
RtlZeroMemory(Buffer,sizeof(Buffer));
memcpy(Buffer,R,len);
CW2[i]=CreateWindowEx(NULL,"static", Buffer, WS_CHILD | WS_VISIBLE , 20,130+20*row, 500, 15, hDlgChoose, NULL, hInst, NULL);
SendMessage(CW2[i],WM_SETFONT,(unsigned int)hFont,1);
R+=len;
}
SCROLLINFO si;
si.cbSize = sizeof(SCROLLINFO);
si.nMin = 0;
si.nMax = row*15+100;//最大滚动范围
si.nPage = 50;//合适的每页大小
si.fMask = SIF_ALL;
SetScrollInfo(hDlgChoose,SB_VERT,&si,true);
//选课是否开放
/* if ( Locate(R,"对不起,现在不是选课时间",0,0,0) )
{
MessageBox(0,"对不起,现在不是选课时间",szTitle,MB_ICONWARNING);
return;
}*/
}
void Analysis4(char *R)
{
int pos,len;
char buff[100];
if ( Locate(R,"<script>window.alert(\"","\"</script>",&pos,&len) )
{
R+=pos;
RtlZeroMemory(buff,sizeof(buff));
memcpy(buff,R,len);
MessageBox(0,buff,szTitle,MB_ICONWARNING);
}
if ( Locate(R,"window.top.location.href=\"XK1.LoginWindow\"",0,&pos,0) )
{
return;
}
EndDialog(hDlgLogin,true);
lstrcpy(buff,UserName);
lstrcat(buff," -- 已登录");
SetWindowText(hMain,buff);
lstrcat(buff,"\r\n");
mystatus.LOGINED =true;
lout(buff);
if (!mystatus.Autoing )MessageBox(0,buff,szTitle,MB_ICONINFORMATION);
}
void Analysis5(char *R)
{
if ( Locate(R,"XK1.LoginWindow",0,0,0))
{
LogOFF("您已经退出登录");
}
else
{
lout("退出登录失败\r\n");
MessageBox(0,"退出登录失",szTitle,MB_ICONERROR);
}
}
void Analysis6(char *R)
{
int pos,len,i,j;
LV_ITEM lvi;
char Buff[200];
char DAY[15]="一二三四五六七";
RtlZeroMemory(&lvi,sizeof(LV_ITEM));
lvi.mask=LVIF_TEXT;
lvi.pszText=Buff;
if ( Locate(R,"<TH>星期日</TH>",0,&pos,0))
{
R+=pos;
}
else
{
MessageBox(0,"无法分析本学期课表信息",szTitle,MB_ICONWARNING);
return;
}
for (j=0;j<7;j++)
{
RtlZeroMemory(Buff,sizeof(Buff));
lstrcpy(Buff,"<TH>第");
memcpy(Buff+6,DAY+j*2,2);
lstrcat(Buff,"节</TH>");
if ( Locate(R,Buff,0,&pos,0))
{
lvi.iSubItem=0;
for (i=0;i<7;i++)
{
RtlZeroMemory(Buff,sizeof(Buff));
lvi.iSubItem++;
if ( Locate(R,"<TD>\n","\n</TD>",&pos,&len))
{
R+=pos;
memcpy(Buff,R,len);
R=R+len+5;
SendMessage(hList4, LVM_SETITEM,0, (long)&lvi);
}
}
}
else
{
RtlZeroMemory(Buff,sizeof(Buff));
lstrcpy(Buff,"无法分析第");
memcpy(Buff+10,DAY+j,2);
lstrcat(Buff,"节课");
MessageBox(0,Buff,szTitle,MB_ICONWARNING);
}
lvi.iItem++;
lvi.lParam++;
}
lvi.iItem=0;
lvi.lParam=0;
if ( Locate(R,"<TH>上课周次</TH>",0,&pos,0))
{
R+=pos;
}
else
{
MessageBox(0,"无法分析本学期课表信息下部分",szTitle,MB_ICONWARNING);
return;
}
SendMessage(hList5,LVM_DELETEALLITEMS,0,0);
AGAIN3:
lvi.iSubItem=0;
for (i=0;i<10;i++)
{
RtlZeroMemory(Buff,sizeof(Buff));
if ( Locate(R,"<TD>","</TD>",&pos,&len))
{
R+=pos;
memcpy(Buff,R,len);
R=R+len+5;
if (i==0)
{
if (memcmp(Buff,"尚未选中",8)==0 || memcmp(Buff,"已经选中",8)==0)
{
i--;
continue;
}
SendMessage(hList5, LVM_INSERTITEM,0, (long)&lvi);
}
else
{
SendMessage(hList5, LVM_SETITEM,0, (long)&lvi);
}
}
lvi.iSubItem++;
}
if ( Locate(R,"<TR>",0,&pos,0))
{
R+=pos;
lvi.iItem++;
lvi.lParam++;
goto AGAIN3;
}
if ( Locate(R,"已提交必修课学分:","<br>",&pos,&len))
{
RtlZeroMemory(Buff,sizeof(Buff));
R+=pos;
memcpy(Buff,R,len);
R=R+len+4;
SetDlgItemText(hDlgArrangement,IDC_STATIC1,Buff);
}
if ( Locate(R,"已提交限选课学分:","<br>",&pos,&len))
{
RtlZeroMemory(Buff,sizeof(Buff));
R+=pos;
memcpy(Buff,R,len);
R=R+len+4;
SetDlgItemText(hDlgArrangement,IDC_STATIC2,Buff);
}
if ( Locate(R,"已提交任选课学分:","<br>",&pos,&len))
{
RtlZeroMemory(Buff,sizeof(Buff));
R+=pos;
memcpy(Buff,R,len);
R=R+len+4;
SetDlgItemText(hDlgArrangement,IDC_STATIC3,Buff);
}
if ( Locate(R,"总 学 分:","<br>",&pos,&len))
{
RtlZeroMemory(Buff,sizeof(Buff));
R+=pos;
memcpy(Buff,R,len);
R=R+len+4;
SetDlgItemText(hDlgArrangement,IDC_STATIC4,Buff);
}
}
void Analysis7(char *R)
{
//分析是否能够自动选课,不能的话给出提示,设置mystatus,返回
//mystatus.Autoing=true;
//修改定时器
mystatus.Autoing =true;
SetTimer(hMain,2,SendDlgItemMessage(hDlgAuto,IDC_SPIN1,UDM_GETPOS,0,0),0);
PostMessage(hMain,WM_TIMER,2,0);
}
void Analysis8(char *Buffer,int seq)
{
if (AnalysisFooter(Buffer))
{
//PostMessage(hDlgAuto,WM_COMMAND,IDC_STOP,0);
lstrcpy(Buffer,"恭喜您! ");
lstrcat(Buffer,&CourseName[0][seq]);
lstrcat(Buffer," 已经选中!");
SetDlgItemText(hDlgAuto,IDC_EDIT1+seq,0);
SetDlgItemText(hDlgAuto,IDC_EDIT4+seq,0);
MessageBox(0,Buffer,szTitle,MB_ICONINFORMATION);
}
else
{
if (memcmp(Buffer,"已经没有上课余量",16)==0)
{
lstrcpy(&CourseName[0][seq],&Buffer[18]);
int pos=50;
CourseName[49][seq]=0;
Locate(&CourseName[0][seq],"!",0,&pos,0);
CourseName[pos-1][seq]=0;
return;
}
if (lstrcmp(Buffer,"所选课程学分,已经超过控制学分,提交被取消")==0)
{
PostMessage(hDlgAuto,WM_COMMAND,IDC_STOP,0);
MessageBox(0,"所选课程学分已经超过控制学分,提交被取消,自动选课中止",szTitle,MB_ICONINFORMATION);
return;
}
if (Locate(Buffer,"现在不是选课时间",0,0,0))
{
PostMessage(hDlgAuto,WM_COMMAND,IDC_STOP,0);
MessageBox(0,"对不起,现在不是选课时间,自动选课中止",szTitle,MB_ICONINFORMATION);
return;
}
if (Locate(Buffer,"上课时间与",0,0,0))
{
// PostMessage(hDlgAuto,WM_COMMAND,IDC_STOP,0);
lstrcpy(Buffer,"恭喜您! ");
lstrcat(Buffer,&CourseName[0][seq]);
lstrcat(Buffer," 已经选中,但上课时间有冲突。");
SetDlgItemText(hDlgAuto,IDC_EDIT1+seq,0);
SetDlgItemText(hDlgAuto,IDC_EDIT4+seq,0);
MessageBox(0,Buffer,szTitle,MB_ICONINFORMATION);
return;
}
if (memcmp(Buffer,"您已经掉线",10)==0)
{
if (IsDlgButtonChecked(hDlgAuto,IDC_AUTO_CONNECT)==BST_UNCHECKED)
{
PostMessage(hDlgAuto,WM_COMMAND,IDC_STOP,0);
}
LogOFF(Buffer);
if (IsDlgButtonChecked(hDlgAuto,IDC_AUTO_CONNECT)==BST_CHECKED)
{
lout("自动重新登录中...\r\n");
LogIN();
}
return;
}
if (Locate(Buffer,"你已经选了",0,0,0))
{
// PostMessage(hDlgAuto,WM_COMMAND,IDC_STOP,0);
SetDlgItemText(hDlgAuto,IDC_EDIT1+seq,0);
SetDlgItemText(hDlgAuto,IDC_EDIT4+seq,0);
MessageBox(0,Buffer,szTitle,MB_ICONINFORMATION);
return;
}
}
//如果没有footer,mystatus.analysis=9;等待接收完整数据包
}
void Analysis10(char *B)
{
int a,len;
if (Locate(B,"http://xk.njtu.thcic.cn:8080/xk.php",0,&a,0))
{
lout("连接到清华服务器\r\n");
now_http_head=&http_head1;
}
else
{
lout("连接到交大服务器\r\n");
now_http_head=&http_head2;
}
B+=a;
Locate(B,"当前在线人数",0,&a,0);
B+=a;
Locate(B,">","<",&a,&len);
B+=a;
*(B+len)=0;
lout("当前在线人数:");
lout(B);
lout("\r\n");
LogIN();
}
bool AnalysisFooter(char *Buffer)
{
char *R=Buffer;
int pos,len;
char buff[100],*p=buff;
if (Locate(R,"请您登录后再使用",0,&pos,0))
{
lstrcpy(Buffer,"您已经掉线,请不要在别处登录选课系统。");
return false;
}
if (Locate(R,"现在不是选课时间",0,&pos,0))
{
lstrcpy(Buffer,"现在不是选课时间");
return false;
}
RtlZeroMemory(buff,sizeof(buff));
while (Locate(R,"parent.xk_footer.document.write(\"","\"",&pos,&len))
{
R+=pos;
if (*R==' ' && *(R+1)=='<') continue;
memcpy(p,R,len);
R=R+2+len;
p+=len;
}
if (lstrlen(buff))
{
// lout("提示 :";
lout(buff);
lout("\r\n");
lstrcpy(Buffer,buff);
return false;
//MessageBox(0,buff,"提示",MB_ICONINFORMATION);
}
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -