.
Заключение
Нами была рассмотрена проблема мониторинга и контроля за запущенными программами на некоторых удалённых компьютерах. Подобное может понадобиться в школах, или иных учебных заведениях, где пользователи имеют возможность запустить программы, использование которых в данный момент не имеет смысла.
Программа принимает список компьютеров, заранее созданный администратором, и имеет возможность автоматически уничтожать процессы на них. Для корректной работы программы требуется чтобы на всех компьютерах была создана учётная запись с правами администратора.
Список использованных источников
.Архангельский А.Я. - Программирование в C++ Builder, 7 издание
.Архангельский А. Я. - C++Builder 6. Справочное пособие. Книга 1. Язык С++
4. Никита Культин - C++ Builder в задачах и примерах
Приложение А
Приложение В
компьютер локальный сеть
#include <vcl.h>
#pragma hdrstop
#include <IniFiles.hpp>
#include <string.h>
#include <stdio.h>
#include <winsock.h>
#include <stdlib.h>
#include "Unit1.h"
#include "Unit2.h"
//--------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"*MainForm;kol;spisok[100][3];**ept;
//----------------------------------------------------void chit(int i,int j)
{
char a[40];
*a=0;
strcpy(a,spisok[j][0].c_str());
if(i==1)
strcat(a,"(вкл)");
else
if(i==0)
strcat(a,"(выкл)");
else
strcat(a,"(выключается)");
MainForm->st->Items->Add(a);
}
//----------------------------------------------------refresh1()
{
for(int i=1;i<=kol;i++)
{
MainForm->icmp->Host=spisok[i][1];
MainForm->icmp->Ping();
if(MainForm->icmp->ReplyStatus.ReplyStatusType==rsEcho)
MainForm->prop[i][1]=1;
else MainForm->prop[i][1]=0;
}
} //----------------------------------------------------refresh2()
{
kol=0;
FILE*f;
f=fopen("complist.txt","rb");
char *s=new char[80],*a=new char[80],*fall=new char[80];
int i=0,t=0;
*fall=0;
while(1)
{
if(feof(f)) break;
fgets(s,79,f);
i++;
a=strtok(s,"|");
spisok[i][0]=a;
a=strtok(NULL,"|");
spisok[i][1]=a;
a=strtok(NULL,"|");
spisok[i][2]=a;
a=strtok(NULL,"|");
*s=0;
int e=strlen(a);
if(a[e-1]=='\n') strncat(s,a,e-2);
else strcpy(s,a);
if(strstr(fall,s)==NULL)
{
MainForm->glb->Items->Add(s);
strcat(fall,s);
strcat(fall," ");
}
else
{
*a=0;
char *s1=new char[80];
*s1=0;
strcpy(s1,fall);
a=strtok(s1," ");
int j=1;
while(strstr(a,s)==NULL)
{
a=strtok(NULL," ");
j++;
}
MainForm->prop[i][0]=j;
}
}
kol=i+1;
ept=new Tim *[kol];
for( int i = 0; i < kol; ++i )
{
ept[i] = new Tim;
ept[i]->nom=i;
}
fclose(f);
}
//----------------------------------------------------vkl(int nom)
{
char a[40];
*a=0;
int i=1;
if(MainForm->prop[i][1]==1) return;
while (MainForm->prop[i][2]!=nom) i++;
strcpy(a,spisok[i][0].c_str());
strcat(a,"(вкл)");
MainForm->st->Items->Strings[nom]=a;
MainForm->st->Checked[nom]=false;
AnsiString s=spisok[i][2]+" 255.255.255.255 67";
ShellExecute(0,"open","broadc.exe",s.c_str(),0,SW_HIDE);
}vikl(int nom)
{
char a[40];
*a=0;
int i=1;
while (MainForm->prop[i][2]!=nom) i++;
if(MainForm->prop[i][1]==0||MainForm->prop[i][1]==2) return;
MainForm->st->Items->Strings[nom]=a;
AnsiString s="/c shutdown -с \""+MainForm->me->Text+"\" -t "+StrToInt(MainForm->cpe->Text)+" -s -m \\\\"+spisok[i][1];
MainForm->prop[i][4]=StrToInt(MainForm->cpe->Text);
int n=StrToInt(MainForm->cpe->Text) ;
ept[i]->Time=n;
ept[i]->comp=spisok[i][0];
ept[i]->Resume();
MainForm->prop[i][1]=2;
ShellExecute(0,"open","cmd.exe",s.c_str(),0,SW_HIDE);
}
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------__fastcall TMainForm::FormCreate(TObject *Sender)
{
TIniFile *Ini = new TIniFile(GetCurrentDir()+"\\config.ini");
MainForm->Left=Ini->ReadInteger("Options","left",NULL);
MainForm->Top=Ini->ReadInteger("Options","top",NULL);
MainForm->cpe->Text=Ini->ReadString("Options","timer",0);
refresh2();
refresh1();
glb->Selected[0]=true;
glbClick(Sender);
}
//------------------------------------------------__fastcall TMainForm::Button1Click(TObject *Sender)
{
int n=1;
char a[50];
refresh1();
glbClick(Sender);
}
//---------------------------------------------------------------------------
__fastcall TMainForm::Button2Click(TObject *Sender)
{
if(st->Items->Count!=0)
for(int i=0;i<st->Items->Count;i++)
st->Checked[i]=true;
}
//---------------------------------------------------------------------------
__fastcall TMainForm::Button3Click(TObject *Sender)
{
if(st->Items->Count!=0)
for(int i=0;i<st->Items->Count;i++)
st->Checked[i]=false;
}
//---------------------------------------------------------------------------__fastcall TMainForm::Button4Click(TObject *Sender)
{
if(st->Items->Count!=0)
for(int i=0;i<st->Items->Count;i++)
if(st->Checked[i]==true)
vkl(i);
}
//---------------------------------------------------------------------------
__fastcall TMainForm::Button5Click(TObject *Sender)
{
if(st->Items->Count!=0)
for(int i=0;i<st->Items->Count;i++)
if(st->Checked[i]==true)
vikl(i);
}
//---------------------------------------------------------------------------
__fastcall TMainForm::glbClick(TObject *Sender)
{
st->Clear();
char a[50];
int t=-1;
if (glb->Selected[0]==false)
for(int i=1;i<glb->Items->Count;i++)
{
if(glb->Selected[i]==true)
for(int j=1;j<kol;j++)
if(prop[j][0]==i)
{
prop[j][2]=++t;
ept[j]->Index=t;
chit(prop[j][1],j);
}
else prop[j][2]=-1;
}
else
for(int i=1;i<kol;i++)
{
prop[i][2]= ++t;
chit(prop[i][1],i);
ept[i]->Index=t;
}
}
//---------------------------------------------------------------------------
__fastcall TMainForm::FormDestroy(TObject *Sender)
for( int i = 0; i < kol; ++i )
{
ept[i]->Suspend();
ept[i]->Terminate();
}
delete[]ept;
TIniFile *Ini = new TIniFile(GetCurrentDir()+"\\config.ini");
Ini->WriteInteger("Options","left",MainForm->Left);
Ini->WriteInteger("Options","top",MainForm->Top);
Ini->WriteString("Options","timer",MainForm->cpe->Text);
delete Ini;
}
//--------------------------------------------------------------
__fastcall TMainForm::Button6Click(TObject *Sender)
{
for( int i = 0; i < kol; ++i )
{
ept[i]->Suspend();
ept[i]->Terminate();
}
delete[]ept;
glb->Clear();
glb->Items->Add("Все");
refresh2();
refresh1();
glb->Selected[0]=true;
glbClick(Sender);
}
//---------------------------------------------------------------------------
//--------------------------------------------------------------__fastcall TMainForm::N1Click(TObject *Sender)
{
for(int i=0; i<st->Items->Count;i++)
{
int j=1;
while (prop[j][2]!=i) j++;
if(prop[j][1]==2 && st->Checked[i]==true)
{
prop[j][1]=1;
AnsiString s="/c shutdown -a -m \\\\"+spisok[j][1];
ShellExecute(0,"open","cmd.exe",s.c_str(),0,SW_HIDE);
MainForm->st->Items->Strings[i]=spisok[j][1]+"(вкл)";
ept[j]->Suspend();
st->Checked[i]==false;
}
}
}
//-------------------------------------------------------------