Пишешь клиента и сервера, хоть на WinSock. клиенты - на компах с проекторами. сервер - у тебя. Сначала подключаешься к серверу со всех трех компов, потом при нажатии на кнопку на сервере - отсылает всем троим например "1". Клиент же как только получает этот заветный "1" ставит мышь на кнопку PLAY в виндус медия плеере и жмет на нее.
пример на апи:
Сервер:
Код:
uses WinSock;
var
sServer: TSOCKET
sClient: array[0..2] of TSOCKET;
serverAddr, clientAddr: sockaddr_in;
isize, i : integer;
...
begin
if WSAStartup(MAKEWORD(2, 0), aboutWSA) = 0 then
;
sServer := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if sServer = INVALID_SOCKET then
begin
Form19.Memo1.Lines.add('Ошибка создания сокета');
exit;
end;
imode := 1;
iOcTLsocket(sServer, FIONBIO, imode);
serveraddr.sin_addr.S_addr := htonl(INADDR_ANY);
serveraddr.sin_family := AF_INET;
serveraddr.sin_port := htons(12345); // порт, любой
if bind(sServer, serveraddr, sizeof(serveraddr)) = SOCKET_ERROR then
begin
Form19.Memo1.Lines.add('Ошибка бинд');
exit;
end;
if listen(sServer, 4) = SOCKET_ERROR then
begin
Form19.Memo1.Lines.add('Ошибка прослушки');
exit;
end;
Form19.Memo1.Lines.add('Server Started');
isize := sizeof(clientaddr);
for i:=0 to 2 do
begin
sClient[i]:=accept(sServer,clientaddr,isize)
Form19.Memo1.Lines.Add('Подключен клиент '+inttostr(i));
end;
end;
потом при нажатии кнопки пишешь
Код:
var i,j:byte;
...
j:=1;
for i:=0 to 2 do
send(sClient[i],j,1,0);
...
Клиент:
Код:
uses WinSock;
...
var
addr:sockaddr_in;
sClient:TSOCKET;
isize:integer;
j:byte;
...
begin
if WSAStartup(MAKEWORD(2, 0), aboutWSA) = 0 then
;
sClient:=socket(AF_INET, SOCK_STREAM,IPPROTO_IP);
if sClient = INVALID_SOCKET then
begin
Form1.Memo1.Lines.Add('Ошибка создания сокета');
exit;
end;
Dword(аddr.sin_addr.S_un_b) := inet_addr(PAnsiChar(st)); // st - строка с текстовым представлением IP-адреса типа '192.168.1.1'. З.Ы. лучше поискать другой метод :-)
addr.sin_family := AF_INET;
addr.sin_port := htons(12345); // тот же порт, что на сервере
if (connect(sClient, addr, sizeof(addr)) = socket_error) then
begin
Form1.Memo1.Lines.Add('Ошибка подключения');
exit;
end;
isize := recv(sClient, j, 1, 0);
if j = 1 then
begin
//запускаем наш плеер
end;
end;
не пугаться - клиент будет выглядеть "зависшим" пока к нему не придут данные, а сервер - пока к нему не подключатся все три клиента.
Это простейший вариант на АПИ. Взято по большей части из книжки Фленова "Делфи глазами хакера".