📄 main.pas
字号:
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 + -