Привожу код программы, т.к. самостоятельно локализовать ошибку не удалось:
Юнит:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, inifiles, MSI_Common, MSI_Monitor, MSI_Memory, MSI_Machine,
MSI_Display, MSI_SMBIOS, MSI_CPU, MSI_Storage, MSI_Software, MSI_Network,
MSI_MSProduct, MSI_OS, xpman, ScktComp, sSkinProvider, sSkinManager,
ExtCtrls;
type
TForm1 = class(TForm)
MiTeC_Monitor1: TMiTeC_Monitor;
Button1: TButton;
Memo1: TMemo;
MiTeC_Machine1: TMiTeC_Machine;
MiTeC_Memory1: TMiTeC_Memory;
MiTeC_Display1: TMiTeC_Display;
MiTeC_SMBIOS1: TMiTeC_SMBIOS;
MiTeC_CPU1: TMiTeC_CPU;
MiTeC_Storage1: TMiTeC_Storage;
MiTeC_Software1: TMiTeC_Software;
MiTeC_Network1: TMiTeC_Network;
MiTeC_MSProduct1: TMiTeC_MSProduct;
MiTeC_OperatingSystem1: TMiTeC_OperatingSystem;
ClientSocket1: TClientSocket;
Memo2: TMemo;
Edit3: TEdit;
Button3: TButton;
sSkinManager1: TsSkinManager;
sSkinProvider1: TsSkinProvider;
Button2: TButton;
TimerConnection: TTimer;
Memo3: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TimerConnectionTimer(Sender: TObject);
procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
comp_name:string;
ini : TIniFile;
implementation
uses MiTeC_WinIOCTL;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var c,i,t:integer;
s:string;
begin
MiTeC_Machine1.RefreshData;
Memo1.Lines.Add('Имя компьютера: '+ MiTeC_Machine1.MachineName);
comp_name:=MiTeC_Machine1.MachineName; //запоминаем имя компа
MiTeC_Network1.RefreshData;
Memo1.Lines.Add('IP: '+MiTeC_Network1.IPAddresses.Text);
//for I := 0 to - 1 do
Memo1.Lines.Add(' ');
MiTeC_Monitor1.RefreshData;
Memo1.Lines.Add('Монитор');
Memo1.Lines.Add( 'Название: '+MiTeC_Monitor1.Monitors[0].DeviceDesription);
Memo1.Lines.Add( 'Производитель: '+MiTeC_Monitor1.Monitors[0].Manufacturer);
Memo1.Lines.Add( 'Модель: '+MiTeC_Monitor1.Monitors[0].Model);
Memo1.Lines.Add( 'Серийный номер: '+MiTeC_Monitor1.Monitors[0].ProductNumber);
Memo1.Lines.Add( 'Имя: '+MiTeC_Monitor1.Monitors[0].Name);
Memo1.Lines.Add( 'EDID v.= '+MiTeC_Monitor1.Monitors[0].EDID_Version);
Memo1.Lines.Add(' ');
Memo1.Lines.Add( 'Оперативная память');
MiTeC_Machine1.RefreshData;
MiTeC_Memory1.RefreshData;
c:=0;
t:=(MiTeC_Memory1.PhysicalTotal div 1024) div 1024;
Memo1.Lines.Add( 'Всего: '+inttostr(t)+' Мб');
with MiTeC_Machine1.SMBIOS do begin
if MemoryDeviceCount>0 then begin
for i:=0 to MemoryDeviceCount-1 do
if (MemoryDevice[i].Size>0) then begin
Memo1.Lines.Add(Format('Слот %d - %d Мб %s',[i,MemoryDevice[i].Size,s]));
end;
end else
for i:=0 to MemoryModuleCount-1 do
if (MemoryModule[i].Size>0) and (c<t) then begin
c:=c+MemoryModule[i].Size;
Memo1.Lines.Add(Format('Слот %d - %d Мб %s',[i,
MemoryModule[i].Size,
GetMemoryTypeStr(MemoryModule[i].Types)]));
end;
end;
Memo1.Lines.Add(' ');
MiTeC_Display1.RefreshData;
Memo1.Lines.Add('Видеокарта: ' + MiTeC_Display1.Adapter +' '+ floattostr(MiTeC_Display1.Memory/1024/1024)+ ' Мб');
Memo1.Lines.Add(' ');
Memo1.Lines.Add('Материнская плата: ' );
MiTeC_SMBIOS1.RefreshData;
Memo1.Lines.Add(MiTeC_SMBIOS1.MainBoardManufacturer+' '+MiTeC_SMBIOS1.MainBoardModel);
//Memo1.Lines.Add('Серийный номер: '+MiTeC_SMBIOS1.MainBoardSerial); //дата
Memo1.Lines.Add(' ' );
Memo1.Lines.Add('Процессор: ' );
MiTeC_CPU1.RefreshData;
Memo1.Lines.Add(MiTeC_CPU1.MarketingName+', S/N: '+MiTeC_CPU1.SerialNumber);
Memo1.Lines.Add(' ' );
Memo1.Lines.Add('HDD: ');
MiTeC_Storage1.RefreshData;
for i:=0 to MiTeC_Storage1.PhysicalCount-1 do
if not(MiTeC_Storage1.Physical[i].Removable) then
if not(MiTeC_Storage1.Physical[i].DeviceType in [FILE_DEVICE_CD_ROM,FILE_DEVICE_DVD, FILE_DEVICE_TAPE,FILE_DEVICE_UNKNOWN]) then
Memo1.Lines.Add(MiTeC_Storage1.Physical[i].Model+' ('+ floattostr(MiTeC_Storage1.Physical[i].Size div 1024 div 1024 div 1024) +' Гб)');
Memo1.Lines.Add(' ');
Memo3.Lines.Add('Программное обеспечение: ');
MiTeC_Software1.RefreshData;
for i:=0 to MiTeC_Software1.Count-1 do
if (MiTeC_Software1.InstallEntry[i].Version<>'') then
Memo3.Lines.Add(MiTeC_Software1.InstallEntry[i].Name+' v.'+MiTeC_Software1.InstallEntry[i].Version )
else Memo3.Lines.Add(MiTeC_Software1.InstallEntry[i].Name);
Memo3.Lines.Add(' ' );
Memo3.Lines.Add('OC: ');
MiTeC_OperatingSystem1.RefreshData;
Memo3.Lines.Add(MiTeC_OperatingSystem1.OSName+' '+MiTeC_OperatingSystem1.OSEdition+' build '+inttostr(MiTeC_OperatingSystem1.BuildNumber));
Memo3.Lines.Add('Дата установки: '+DateToStr(MiTeC_OperatingSystem1.InstallDate));
Memo3.Lines.Add('ID: '+MiTeC_OperatingSystem1.ProductID);
Memo3.Lines.Add('Key: '+MiTeC_OperatingSystem1.ProductKey);
Memo3.Lines.Add(' ' );
Memo3.Lines.Add('ПО Microsoft: ');
MiTeC_MSProduct1.RefreshData;
for I := 0 to MiTeC_MSProduct1.ProductCount-1 do
Memo3.Lines.Add(MiTeC_MSProduct1.Products[i].Name+', ID: '+MiTeC_MSProduct1.Products[i].ProductID+
', Key: '+ MiTeC_MSProduct1.Products[i].ProductKey);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientSocket1.Active:=true;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo2.Lines.Insert(0,'Connected');
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo2.Lines.Insert(0,'Disconnected');
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
recv_text, s:string;
i:integer;
f:TStringList;
begin
recv_text:=Socket.ReceiveText;
Memo2.Lines.Insert(0,'Message received from SERVER');
Memo2.Lines.Insert(0,'> '+recv_text);
if recv_text=comp_name then
begin
f:=TStringList.Create;
//f.LoadFromFile(Edit1.Text);// Загрузка текстового файла
f.Text:=Memo1.Text+memo3.Text;
// Button1.Click;
ClientSocket1.Socket.SendText(f.Text);
// ClientSocket1.Socket.SendText(Memo3.Text);
end;
f.Free;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if ClientSocket1.Active=true then
ClientSocket1.Socket.SendText(Memo1.Text);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Ini:=TIniFile.Create(GetCurrentDir+'\settings.ini');
ClientSocket1.Host:=ini.ReadString('connection', 'server', 'ALEXNOV');
ClientSocket1.Port:=strtoint(ini.ReadString('connection', 'port', '1025'));
Ini.Free;
Button1.Click;
end;
procedure TForm1.TimerConnectionTimer(Sender: TObject);
begin
if ClientSocket1.Active=false then
try
ClientSocket1.Active:=true;
except
ShowMessage('no connection');
end;
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode := 0; // теперь сообщение об ошибке при отсутствии сервера не будет вываливаться
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
ShowWindow(Handle,SW_HIDE);
ShowWindow(Application.Handle,SW_HIDE);
end;
end.
Проект:
Код:
program INPC_Client;
uses
Forms, windows,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
var
MutexHandle : THandle;
const
MutexName = 'INPC_Client_appl';
begin
// Пробуем открыть Mutex по имени
MutexHandle := OpenMutex(MUTEX_ALL_ACCESS, false, MutexName);
if MutexHandle <> 0 then begin
// Копия нашего приложения уже запущена - Mutex уже есть
CloseHandle(MutexHandle);
MessageBox(0,'Программа уже была запущена!','INPC Client: Ошибка!', 0);
halt;
end;
// Создание Mutex
MutexHandle := CreateMutex(nil, false, MutexName);
Application.Initialize;
Application.Title := 'INPC Client';
Application.CreateForm(TForm1, Form1);
Application.Run;
// Уничтожаем наш Mutex при завершении приложения
CloseHandle(MutexHandle);
end.
|