⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 这是一个非常好的教师和学生沟通用的电子教室!
💻 PAS
📖 第 1 页 / 共 5 页
字号:
procedure TForm1.LMDTrayIcon1DblClick(Sender: TObject);
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then exit;
  Pingmutimer.Enabled := false; //停止截屏
  if LMDTrayIcon1.Hint = '语音广播(注意:双击图标结束广播)' then
  N42Click(sender);

  if s_guangbo = true then N37Click(sender);
  form1.show;
  LMDTrayIcon1.PopUpMenu := lmdPopupMenu2;
end;

procedure TForm1.NetMeeting2Click(Sender: TObject);
var
  i: smallint;
  netmeeting_ok: boolean;
  HCurrentWindow: Hwnd;
  szText: array[0..254] of char;
begin
  netmeeting_ok := false;

  //检测是否已经运行NETMEETING
  hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);
  while hCurrentWindow <> 0 do
  begin
    if GetWindowText(hCurrentWindow, @szText, 255) > 0 then
      if pos('NetMeeting', strpas(@szText)) > 0 then
      begin
        netmeeting_ok := true;
        break;
      end;
    hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
  end;

  if netmeeting_ok = false then
  begin
    showmessage('请先运行本机的NetMeeting,并设置为自动接收呼叫!');
    exit;
  end;

  for i := 0 to student_count - 1 do
    if (ListView1.Items[i].imageindex <> 0) then
      wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '呼叫会议' + s_computername);


end;

procedure TForm1.NetMeeting3Click(Sender: TObject);
var
  i: smallint;
begin


  for i := 0 to student_count - 1 do
    if (ListView1.Items[i].imageindex <> 0) then
      wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '关闭会议');

end;

procedure TForm1.N21Click(Sender: TObject);
var
  i: smallint;
begin

  for i := 0 to student_count - 1 do
    if (ListView1.Items[i].imageindex <> 0) then
      wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '全屏广播');
  showmessage('全屏显示共享的程序完成!');

end;

procedure TForm1.N20Click(Sender: TObject);
var
  Brushf: TBrushf;
begin
 // form1.show;
  Brushf := TBrushf.Create(self);
  Brushf.show;
end;

procedure TForm1.LMDGlobalHotKey1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  Brushf: TBrushf;
begin
  //LMDTrayIcon1.Active:=false;
  Brushf := TBrushf.Create(self);
  Brushf.show;
 //N20Click(sender);
end;

procedure TForm1.N35Click(Sender: TObject);
var
  i: smallint;
begin
  for i := 0 to student_count - 1 do
    if (ListView1.Items[i].imageindex <> 0) then
      wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '关闭话筒');

  if copy(n35.caption, 1, 18) = '关闭所有学生的话筒' then
  begin
    n35.caption := '打开所有学生的话筒';
    showmessage('关闭所有学生的话筒完成!');
  end
  else
  begin
    n35.caption := '关闭所有学生的话筒';
    showmessage('打开所有学生的话筒完成!');
  end;

end;

procedure TForm1.A1Click(Sender: TObject);
var
  i: smallint;
begin
  for i := 1 to ListView1.Items.Count do
  begin
    ListView1.Items[i - 1].Selected := true;
  end;
end;

procedure TForm1.N37Click(Sender: TObject);
var
  i: smallint;
begin

   //  LMDGlobalHotKey2.Active := false;
  s_guangbo := false;
//  broadcasttimer.Enabled := false; //停止广播
  PingmuTImer.Enabled := false;
  timer2.Enabled:=false;
//  Pingmutimer.Enabled := false; //停止截屏
  DisableMouseHook;
  if send_voice then
  begin
    SoundIN1.Close;
    sendwav.Clear;
    sendwav.Free;
  end;
  shang_ci := 0;
  shang_size := 0;
  quan_screen := false;
// if wsocket.State<>wsClosed then

  //Application.MESSAGEBOX('成功停止广播教学!', '提示信息',
    //MB_OK + MB_ICONINFORMATION);
  pingmu_state := '';
  //清空流
  priscreen.FreeImage;
  priscreen.Free;
  priscreen := nil;

  for i := 0 to student_count - 1 do
  begin
    if (ListView1.Items[i].imageindex <> 0) and (listView1.Items[i].Selected = true) then
      wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '停止广播');
      wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '注销系统');
  end;

  LMDTrayIcon1.Hint := '多媒体网络教室';
  LMDTrayIcon1.Active := false;
end;

procedure TForm1.N39Click(Sender: TObject);
var
  i: smallint;
begin
  if ListView1.SelCount < 1 then
  begin
    showmessage('没有选择任何学生!');
    exit;
  end;
  if
    (Application.MESSAGEBOX('是否要让所选的学生机退出程序!', '提示信息',
    MB_YESNO + MB_DEFBUTTON2 + MB_ICONQUESTION) = IDYES)
    then
  begin
    for i := 0 to student_count - 1 do
    begin
    //ListView1.Items[1].Selected
      if (ListView1.Items[i].imageindex <> 0) and (listView1.Items[i].Selected = true) then
      begin
        ListView1.Items[i].imageindex := 0;
        wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '退出教室');
      end;
    end;
  end;

end;

procedure TForm1.LMDGlobalHotKey2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if LMDTrayIcon1.Hint = '屏幕正在发送。。。' then exit;
  LMDTrayIcon1.Hint := '屏幕正在发送。。。';
  PingmuTimerTimer(sender);
//  N40Click(sender);
end;

procedure TForm1.R1Click(Sender: TObject);
var
  i: smallint;
begin
  for i := 0 to student_count - 1 do
  begin
    if (ListView1.Items[i].imageindex <> 0) and (listView1.Items[i].Selected = true) then
      wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '注销系统');
  end;

  //Application.MESSAGEBOX('恢复成功!', '提示信息',
    //MB_OK + MB_ICONINFORMATION);
end;

procedure TForm1.F1Click(Sender: TObject);
var
  FastShef: TFastShef;
begin
  Fastshef := TFastShef.Create(self);
  Fastshef.Edit1.Text := 'student';
  FastShef.Edit2.Text := '1';
  FastShef.edit3.Text := '';
  FastShef.ShowModal;
 // N13CLICK(SENDER);
end;



procedure TForm1.N42Click(Sender: TObject);
var
  i: smallint;
begin
//  capture.Stop;
//  capture.Free;
//  capture := nil;
  SoundIN1.Close;
  sendwav.Clear;
  sendwav.Free;

  LMDTrayIcon1.Active := false;
  for i := 0 to student_count - 1 do
  begin
    if (ListView1.Items[i].imageindex <> 0) and (listView1.Items[i].Selected = true) then
      wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '停止语音');
      wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '注销系统');
  end;
  LMDTrayIcon1.Hint := '多媒体网络教室';
end;

procedure TForm1.N43Click(Sender: TObject);
var
  Chongqif: TChongqif;
begin
  if ListView1.SelCount < 1 then
  begin
    //showmessage('没有选择任何学生!');
    rxlabel1.Caption :='请选择需要重新启动的学生机!';
    exit;
  end;
  rxlabel1.Caption:=school_name+' 班级: '+class_name+' 授课教师: '+teacher_name+' 课程: '+course_name;
  Chongqif := TChongqif.create(self);
  Chongqif.showmodal;

end;

procedure TForm1.N45Click(Sender: TObject);
var
  i: smallint;
begin
  if ListView1.SelCount <> 1 then
  begin
    showmessage('没有选择任何学生或不能选择多个学生!');
    exit;
  end;

  for i := 0 to student_count - 1 do
    if (ListView1.Items[i].imageindex <> 0) and (listView1.Items[i].Selected = true) then
      wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '查看进程');


end;

procedure TForm1.WSocketDataAvailable(Sender: TObject; Error: Word);
var
  recbuf: array[0..1023] of char;
begin
  recbuf := #0;
  //wsocket.ReceiveFrom(

  len := Wsocket.Receive(@recbuf, 1024);
  if len > 0 then
  begin
 //   allsize := allsize + len;
    //读入发来的长度数据
     // if bmpstream <> nil then
    try
      bmpstream.WriteBuffer(recbuf, len);
    except
      bmpstream.clear;
      exit;
    end;

    if len <> 1024 then //已读完
    begin
      bmpstream.Position := 0;
      // drawstream.SaveToFile('g:\'+inttostr(send_streamsize)+inttostr(bmpstream.size)+'.bmp');
      drawstream.clear;

      if send_streamsize = bmpstream.Size then
      begin
        drawstream.LoadFromStream(bmpstream);

        drawstream.Position := 0;
        hua_ok := true; //可开始画屏幕
      end;
      bmpstream.Clear;
    end;
  end;

end;

procedure TForm1.WSockethookDataAvailable(Sender: TObject; Error: Word);
var
  s_leng, x_leng, y_leng, l_command: integer;
  key_char, w_x, w_y, w_state, s_command: string;
begin
  s_command := WSOCKEThook.ReceiveStr;
  l_command := length(s_command);

  if l_command > 12 then
  begin
    s_leng := pos('state:=', s_command);
    x_leng := pos('x:=', s_command);
    y_leng := pos('y:=', s_command);
    w_state := copy(s_command, 8, x_leng - s_leng - 7);
    w_x := copy(s_command, x_leng + 3, y_leng - x_leng - 3);
    w_y := copy(s_command, y_leng + 3, length(s_command) - y_leng - 2);

    case strtoint(trim(w_state)) of
      160:
        setcursorpos(strtoint(trim(w_x)), strtoint(trim(w_y)));
//  mouse_event(MOUSEEVENTF_LEFTUP,strtoint(trim(w_x)),strtoint(trim(w_y)),0,0);
      161:
        mouse_event(MOUSEEVENTF_LEFTDOWN, strtoint(trim(w_x)), strtoint(trim(w_y)), 0, 0);
      512:
        setcursorpos(strtoint(trim(w_x)), strtoint(trim(w_y)));
 //mouse_event(MOUSEEVENTF_MOVE,strtoint(trim(w_x)),strtoint(trim(w_y)),0,0);
      513:
        mouse_event(MOUSEEVENTF_LEFTDOWN, strtoint(trim(w_x)), strtoint(trim(w_y)), 0, 0);
      514:
        mouse_event(MOUSEEVENTF_LEFTUP, strtoint(trim(w_x)), strtoint(trim(w_y)), 0, 0);
      515:
        mouse_event(MOUSEEVENTF_LEFTDOWN, strtoint(trim(w_x)), strtoint(trim(w_y)), 0, 0);
      516:
        mouse_event(MOUSEEVENTF_RIGHTDOWN, strtoint(trim(w_x)), strtoint(trim(w_y)), 0, 0);
      517:
        mouse_event(MOUSEEVENTF_RIGHTUP, strtoint(trim(w_x)), strtoint(trim(w_y)), 0, 0);
    end;
  end
  else //否则为键盘HOOK
  begin
    if copy(s_command, 1, 4) = 'down' then
    begin
      key_char := copy(s_command, 7, l_command - 6);
      if strtoint(key_char) = 666 then //如果为SHIFTUP键
      begin
        keybd_event(16, 0, KEYEVENTF_KEYUP, 0);
        exit;
      end;

      keybd_event(strtoint(key_char), 0, 0, 0); //按下此键
  //不是ALT,SHIFT,CTL键时,KEYUP
      if (strtoint(key_char) < 16) or (strtoint(key_char) > 18) then
        keybd_event(strtoint(key_char), 0, KEYEVENTF_KEYUP, 0);
    end
    else
    begin
      key_char := copy(s_command, 5, l_command - 4); //得到字符
      keybd_event(strtoint(key_char), 0, KEYEVENTF_KEYUP, 0);
    end;

    if strtoint(key_char) = 27 then //如果为ESC键,释放ALT,CTL,SHIFT
    begin
      keybd_event(16, 0, KEYEVENTF_KEYUP, 0);
      keybd_event(17, 0, KEYEVENTF_KEYUP, 0);
      keybd_event(18, 0, KEYEVENTF_KEYUP, 0);
    end;

  end;

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
 // i, gex, gey, wshx, wshy, wshr, wshb: smallint;
  i: smallint;
  Guangbof: TGuangbof;
  sendstate: string;
  Format: PWAVEFORMATEX;
  FMaxFmtSize: DWORD;
  v: longint;
begin
  wsh_test := 0;
  allsize := 0;
  quan_screen := true;
  if ListView1.SelCount < 1 then
  begin
    //showmessage('请选择接收广播教学的学生!');
    rxlabel1.Caption:='请选择接收广播教学的学生!';
    exit;
  end;
  rxlabel1.Caption:=school_name+' 班级: '+class_name+' 授课教师: '+teacher_name+' 课程: '+course_name;

  //发送信息给学生机,打开UDP协议
  sendstate := '开始屏幕';
  for i := 0 to student_count - 1 do
  begin
    if (ListView1.Items[i].imageindex <> 0) and (listView1.Items[i].Selected = true) then
    begin
      wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '屏幕广播');
      sleep(1);
    end;
  end;

 //改为窗口,设置广播速度,屏幕截取速度
  Guangbof := TGuangbof.Create(self);
  Guangbof.ShowModal; //打开设置窗口

  if xieyi = 1 then //选择IPX/SPX协议
  begin
    try
      IPX1.Open;
      ipx2.open;
    except
      showmessage('您没有安装IPX/SPX网络协议!');
      exit;
    end;
  end;
   //  打开自己的UDP协议,发送数据
  if xieyi = 0 then //选择TCP/IP协议
  begin
    if wsocket.State <> wsclosed then wsocket.close;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -