Показать сообщение отдельно
  #12  
Старый 04.05.2009, 08:16
alexnov alexnov вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 33
Репутация: 10
По умолчанию

Привожу код программы, т.к. самостоятельно локализовать ошибку не удалось:

Юнит:
Код:
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.
Ответить с цитированием