Introduction
This code based on The .NET Screen Saver
http://www.codeproject.com/useritems/dotnetscr.asp C#.
Actually it is a conversion from C# to C++ managed with some minor changes.
It works with .NET Framework version 1.1., not sure with prior releases.
compile and run: execute run.bat
For begginers
windows2000: copy scr file to folder \winnt\system32 and change screen saver properties.
This is a jayssaver.cpp
#using <mscorlib.dll>
using namespace System;
using namespace System::IO;
#using <System.Windows.Forms.dll>
using namespace System::Windows::Forms;
#using <System.dll>
using namespace System::ComponentModel;
#using <System.Drawing.dll>
using namespace System::Drawing;
using namespace System::Drawing::Imaging;
__gc class ScreenSaverSetting:public Form {
private:
Button *pbtnOk;
void eventKeyOkClick(Object* sender, EventArgs* e);
public:
ScreenSaverSetting();
~ScreenSaverSetting();
};
ScreenSaverSetting::ScreenSaverSetting() {
this->Text = "Screen Saver Setting Here";
this->Location = Point( 100, 100 );
this->Width = 600;
this->Height = 500;
this->FormBorderStyle = FormBorderStyle::Fixed3D;
pbtnOk = new Button();
pbtnOk->Size = Point( 70, 30 );
pbtnOk->Location = Point( 400, 400 );
pbtnOk->Text = "Ok";
pbtnOk->add_Click(new EventHandler(this, eventKeyOkClick));
this->Controls->Add(pbtnOk);
}
ScreenSaverSetting::~ScreenSaverSetting() {
}
void ScreenSaverSetting::eventKeyOkClick(Object* sender, EventArgs* e) {
this->Close();
}
__gc class ScreenSaver:public Form {
private:
PictureBox *ppbxPhoto;
IContainer *pcont;
Timer *ptmrPhoto;
Point pntMouse;
Rectangle recVisible;
void eventTimerPhotoTick(Object* sender, EventArgs* e);
void eventKeyDown(Object *sender, KeyEventArgs *e );
void eventLoadForm(Object *sender, EventArgs *e );
void eventMouse(Object *sender, MouseEventArgs *e);
public:
ScreenSaver();
~ScreenSaver();
};
ScreenSaver::ScreenSaver() {
this->SuspendLayout();
this->AutoScaleBaseSize = System::Drawing::Size( 5, 13 );
this->BackColor = Color::Black;
this->ClientSize = System::Drawing::Size(292, 273);
this->FormBorderStyle = FormBorderStyle::None;
this->Name = "ScreenSaverForm";
this->Text = "ScreenSaver";
this->KeyDown += new KeyEventHandler(this, eventKeyDown);
this->MouseDown += new MouseEventHandler(this, eventMouse );
this->MouseMove += new MouseEventHandler(this, eventMouse );
this->Load += new EventHandler( this, eventLoadForm);
this->Bounds = Screen::PrimaryScreen->Bounds;
this->Cursor->Hide();
this->TopMost = true;
ppbxPhoto = new PictureBox();
ppbxPhoto->Name = "pictureBox";
ppbxPhoto->Location = Point( 46, 86 );
ppbxPhoto->SizeMode = PictureBoxSizeMode::StretchImage;
try {
ppbxPhoto->Image = Image::FromFile( "setup.bmp" );
} catch (Exception* e) {
Console::WriteLine(S"Image file not found or invalid format");
Console::WriteLine(e->Message);
return;
}
ppbxPhoto->Location = Point( 46, 86 );
ppbxPhoto->Size = System::Drawing::Size( 200, 133);
recVisible = Rectangle( 0, 0, this->Bounds.Width - ppbxPhoto->Width,
this->Bounds.Height - ppbxPhoto->Height );
ppbxPhoto->TabIndex = 0;
ppbxPhoto->TabStop = false;
pcont = new System::ComponentModel::Container();
ptmrPhoto = new Timer( pcont );
ptmrPhoto->Tick += new EventHandler( this, eventTimerPhotoTick);
ptmrPhoto->Interval = 10000;
ptmrPhoto->Enabled = true;
this->Controls->Add(ppbxPhoto);
this->ResumeLayout(false);
}
ScreenSaver::~ScreenSaver() {
if ( pcont != 0 )
pcont->Dispose();
if ( ppbxPhoto->Image != 0 )
ppbxPhoto->Image->Dispose();
}
void ScreenSaver::eventTimerPhotoTick(Object* sender, EventArgs* e) {
Random *prnd = new Random();
ppbxPhoto->Location = Point( prnd->Next(recVisible.Width),
prnd->Next(recVisible.Height));
ppbxPhoto->Visible = false;
ppbxPhoto->Update();
ppbxPhoto->Visible = true;
ppbxPhoto->Update();
}
void ScreenSaver::eventKeyDown(Object *sender, KeyEventArgs *e ) {
this->Close();
}
void ScreenSaver::eventMouse(Object *sender, MouseEventArgs *e) {
if (!pntMouse.IsEmpty)
{
if (pntMouse != Point(e->X, e->Y))
this->Close();
if (e->Clicks > 0)
this->Close();
}
pntMouse = Point(e->X, e->Y);
}
void ScreenSaver::eventLoadForm( Object *sender, EventArgs* e ) {
this->Cursor->Hide();
this->TopMost = true;
this->Activate();
}
int main( int argc, char* argv[]) {
if ( argc > 2 ) {
Console::WriteLine( "Wrong parameter number" );
return 1;
}
if ( argc == 1 ) {
Application::Run( new ScreenSaver() );
return 0;
}
String *pstr = argv[1];
String *pstr1 = pstr->ToLower()->Trim()->Substring(0,2);
if ( String::Compare( pstr1, "/c") == 0 ) {
Application::Run( new ScreenSaverSetting() );
return 0;
}
if ( String::Compare( pstr1, "/s") == 0 ) {
Application::Run( new ScreenSaver() );
}
return 0;
}