#include #include #include #include #include #include typedef int SOCKLEN_TYPE; const char *BROAD_ADDR="224.1.1.2"; const int BROAD_PORT=19260; int s; char buffer[32]; struct ip_mreq { struct in_addr imr_multiaddr; struct in_addr imr_interface; }; struct ip_mreq joinaddr; void reportError(const char *msg) { fprintf(stderr,"%s: %d\n",msg,WSAGetLastError()); } int main() { ShowWindow(GetForegroundWindow(),false); WSADATA data; WSAStartup(MAKEWORD(2,0),&data); if ((s=socket(AF_INET,SOCK_DGRAM,0))<0) { reportError("Failed to create socket"); return 1; } struct sockaddr_in addr; memset(&addr,0,sizeof(addr)); SOCKLEN_TYPE len=sizeof(addr); addr.sin_family=AF_INET; addr.sin_port=htons(BROAD_PORT); addr.sin_addr.s_addr=htons(INADDR_ANY); if (bind(s,(struct sockaddr*)&addr,len)<0) { reportError("Failed to bind socket"); return 1; } joinaddr.imr_multiaddr.s_addr=inet_addr(BROAD_ADDR); joinaddr.imr_interface.s_addr=htonl(INADDR_ANY); setsockopt(s,IPPROTO_IP,12,(void*)&joinaddr,sizeof(joinaddr)); puts("Receiving..."); int ret; HANDLE ww=0; while (1) { ret=recvfrom(s,buffer,sizeof(buffer),0,NULL,0); if (ret<0) return 1; if (!ret) continue; if (buffer[0]=='#') { if (ww) ShowWindow(ww,true),ww=0; else ShowWindow(ww=GetForegroundWindow(),false); } } return 0; }