//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#include "Unit_Main.h"

#pragma hdrstop
#pragma package(smart_init)
#pragma resource "*.dfm"

#define PATH_DATAFILE        "C:\\"
#define DATA_MOVIE1          "AD1.ASF"
#define DATA_MOVIE2          "AD2.ASF"

TMain              *Main;
String             PLAY_FILENAME1, PLAY_FILENAME2;
TColor             WINDOWS_COLOR;
TImage             *CAPTURE = new TImage(Main);
int                CID = -1;
int                SITUATION = SI_READY;

//---------------------------------------------------------------------------
__fastcall TMain::TMain(TComponent* Owner) : TForm(Owner)
{


}
//---------------------------------------------------------------------------
void __fastcall TMain::FormActivate(TObject *Sender)
{

 PLAY_FILENAME1   = (String)PATH_DATAFILE + (String)DATA_MOVIE1;
 PLAY_FILENAME2   = (String)PATH_DATAFILE + (String)DATA_MOVIE2;

 CAPTURE->Width  = Screen->Width;
 CAPTURE->Height = Screen->Height;

 ScreenCapture();

 WINDOWS_COLOR   = CAPTURE->Canvas->Pixels[Screen->Width - 2][Screen->Height - 2];

 Communication->Active = true;

}

void __fastcall TMain::RunPlayer(String stFilename)
{

 char         cpPlayFilename[255];


 sprintf(cpPlayFilename, "C:\\Program Files\\Windows Media Player\\wmplayer.exe %s", stFilename.c_str());
 WinExec(cpPlayFilename, SW_SHOW);

}

void __fastcall TMain::StopPlayer()
{

 if(WindowsModeCheck()) {
   SITUATION = SI_READY;
   return;
 }

 keybd_event(      27, 27, 0, 0);
 Sleep(10);
 keybd_event(      27, 27, KEYEVENTF_KEYUP, 0);

 Sleep(3000);

 keybd_event(VK_LMENU,  1, 0, 0);
 keybd_event(VK_F4   ,  1, 0, 0);
 Sleep(10);
 keybd_event(VK_F4   ,  1, KEYEVENTF_KEYUP, 0);
 keybd_event(VK_LMENU,  1, KEYEVENTF_KEYUP, 0);

 SITUATION = SI_READY;

}
//---------------------------------------------------------------------------
void __fastcall TMain::ScreenCapture()
{

 HWND         itDC;


 itDC = GetDC(0);
 BitBlt(CAPTURE->Canvas->Handle, 0, 0, Screen->Width, Screen->Height, itDC, 0, 0, SRCCOPY);

}


bool __fastcall TMain::AccessableCheck(char *cpFilename)
{

 FILE         *fsFile;
 bool         blAble;


 if(!rename(cpFilename, "FILEACCESS")) blAble = true;
                                  else blAble = false;

 rename("FILEACCESS", cpFilename);
 return(blAble);

}

void __fastcall TMain::PlayMovie(String stFilename)
{

 int          itTried;

 // Play the movie file.
 RunPlayer(stFilename);


 // Get situation of playing the movie file.
 // Break loop if playing the movie file.
 itTried = 0;
 while(1)
 {
   Sleep(5000);                                        // Delay 5 sec.
   if(!AccessableCheck(stFilename.c_str())) break;

   if(++itTried > 4) {
     SITUATION = SI_READY;
     return;
   }
 }


 // Change to full screen mode.
 // Break loop if turned.
 itTried = 0;
 while(1)
 {
   Sleep(1000);                                        // Delay 1 sec.

   keybd_event(VK_LMENU,  1, 0, 0);
   keybd_event(      13, 13, 0, 0);
   Sleep(10);
   keybd_event(VK_LMENU,  1, KEYEVENTF_KEYUP, 0);
   keybd_event(      13, 13, KEYEVENTF_KEYUP, 0);

   if(!WindowsModeCheck()) break;

   if(++itTried > 20) {
     SITUATION = SI_READY;
     return;
   }
 }


 SetCursorPos(Screen->Width, Screen->Height);

 SITUATION = SI_READY;

}

bool __fastcall TMain::WindowsModeCheck()
{

 ScreenCapture();

 if(WINDOWS_COLOR == CAPTURE->Canvas->Pixels[Screen->Width - 2][Screen->Height - 2])
   return(true);
  else
   return(false);

}

//---------------------------------------------------------------------------
void __fastcall TMain::FormDestroy(TObject *Sender)
{

 free(CAPTURE);

}
//---------------------------------------------------------------------------
void __fastcall TMain::CommunicationAccept(TObject *Sender, TCustomWinSocket *Socket)
{

 CID = Communication->Socket->ActiveConnections - 1;

}
//---------------------------------------------------------------------------
void __fastcall TMain::CommunicationClientRead(TObject *Sender, TCustomWinSocket *Socket)
{

 String       stString;


 if(SITUATION != SI_READY) return;
 
 stString = Socket->ReceiveText();

 if(stString == "PLAYMOVIE1") {
   SITUATION = SI_BUSY;
   StopPlayer();
   SITUATION = SI_BUSY;
   Sleep(1000);
   PlayMovie(PLAY_FILENAME1);
 }

 if(stString == "PLAYMOVIE2") {
   SITUATION = SI_BUSY;
   StopPlayer();
   SITUATION = SI_BUSY;
   Sleep(1000);
   PlayMovie(PLAY_FILENAME2);
 }

 if(stString == "PLAYSTOP") {
   SITUATION = SI_BUSY;
   StopPlayer();
 }

}
//---------------------------------------------------------------------------

void __fastcall TMain::Timer1Timer(TObject *Sender)
{

 Main->Repaint();
         
}
//---------------------------------------------------------------------------

