Что нового

Реализация демонстрации экрана

Makrut

Новичок
Сообщения
44
Репутация
2
Здравствуйте. Я занимаюсь разработкой программы для своей школы. Есть версия программы на компьютере учителя (она отдает указания) и на компьютерах учеников (выполняет). Появилась необходимость реализации демонстрации экрана одного компьютера ученика. Ниже приведен пример того, как это реализовал я (смеяться строго запрещаю, тк делал "на коленках"). Сейчас программа работает по принципу:

1) Ученик: скриншот сделан-размещен
2) Учитель: скриншот читается и вставляется в форму через цикл while.

Понятное дело, что это не видео, а быстрое слайдшоу, хотелось бы услышать советы, как можно реализовать реальную видео трансляцию (если такое позволяет autoit) или же советы по улучшению имеющейся версии.

Учитель
Код:
Case $Button[0] To $Button[$value - $students_IP[0][0]] ;При нажатии на любую из иконок компьютеров.
			
$number = 0
			Global $tcp = 1
			FileInstall("C:\Users\Константин\Desktop\screen.ini", "Z:\", 1) ;Устанавливаем файл, который будет читать исполнитель.
			IniWrite ($net[1][1] & "screen.ini", "screen", "screen", "1" ) ;Хоть файл и заменяется каждый раз при установке, надо подстраховаться (при замене могут возникнуть проблемы).

			For $i = 0 to $students_IP[0][0]-1
				If $Button[$i] = $nMsg Then  $number = $i ;Определяем порядковый номер нажатой кнопки.
			Next
			SendTCP($students_IP[$number + 1][1],'#3') ;Отправляем сигнал на соответствующий IP.
			If $tcp = 0 Then ;Если не удалось подключиться - дальше не идем.
				$tcp = 1
			Else
				Sleep(15)
				GUISetState(@SW_HIDE, $form)
				$form_pic = GUICreate("Демонстрация экрана " & $students_IP[$number + 1][1], 1280, 1024, 356, 172)
				$pic = GUICtrlCreatePic($net[1][1] & "screen1.jpg", -1, -1, 0, 0) ;Устанавливаем уже созданное исполнителем изображение в форму.
				GUISetIcon($ico)
				GUICtrlSetImage ($form_pic , $ico)
				TraySetIcon($ico)
				GUISetState(@SW_SHOW, $form_pic)
				$while = 1

				While $while = 1
					GUICtrlSetImage($pic, $net[1][1] & "screen1.jpg") ;Очень часто заменяем скриншот более свежим. На среднем железе может выдавать 15-20 кадров в секунду.
					if GUIGetMsg() = $GUI_EVENT_CLOSE Then pic() ;Если приходит оповещение о нажатой кнопке "Крестике", вызываем функцию.
				WEnd
			EndIf
;=========================================================================================================================
Func pic()
	IniWrite ($net[1][1] & "screen.ini", "screen", "screen", "0" ) ;Записываем в установленный файл 0 - исподнитель перестанет делать скриншоты и выйдет из цикла.
	GUISetState(@SW_HIDE, $form_pic) ;Скрываем форму.
	GUISetState(@SW_SHOW, $form) ;Открываем основную форму.
	$while = 0
EndFunc
 
Верх