Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в Delphi изменить IP и MAC-адреса сетевой карты? [D6, WinXP]


Volf_555 ©   (2005-11-29 02:48:00) 

Как в Delphi изменить IP и MAC-адреса сетевой карты?


VirEx   (2005-12-03 20:11:00) [1]

ну и конечно же файл WMIInfo.dpr:)
program WMIInfo;

uses
 Forms,
 Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

это пример как получить из различных классов все свойства и методы, в том числе и тот который ты хочешь использовать для подмены MAC'а


VirEx   (2005-12-03 20:08:00) [2]

файл Unit1.pas
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, OleServer, WbemScripting_TLB, ActiveX,
 ExtCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   ListView1: TListView;
   SWbemLocator1: TSWbemLocator;
   Bevel1: TBevel;
   StatusBar1: TStatusBar;
   ComboBox1: TComboBox;
   Panel1: TPanel;
   EdServer: TEdit;
   Label1: TLabel;
   Label2: TLabel;
   EdUser: TEdit;
   Label3: TLabel;
   EdPassword: TEdit;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
   procedure ShowProp(SProp: ISWbemProperty);
   procedure GetProp(Win32ClassName: string;Server_,User_,Password_:string);
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 ListItem:   TListItem;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 GetProp(ComboBox1.Text,EdServer.Text,EdUser.Text,EdPassword.Text);
end;

procedure TForm1.GetProp(Win32ClassName: string;Server_,User_,Password_:string);
var
 Service:             ISWbemServices;
 ObjectSet:           ISWbemObjectSet;
 SObject:             ISWbemObject;
 PropSet:             ISWbemPropertySet;
 SProp:               ISWbemProperty;

 PropEnum, Enum:      IEnumVariant;
 TempObj:             OleVariant;
 Value:               Cardinal;
 Column:              TListColumn;
 ListView:            TListView;
begin
 ListView:= ListView1;

 StatusBar1.SimpleText:= ' progress';
 ListView.Items.BeginUpdate;
 ListView.Items.Clear;
 ListView.Columns.Clear;//очищаем заголовки
 //Service:= SWbemLocator1.ConnectServer('.', 'root\CIMV2', '', '', '', '', 0, nil);
 Service:= SWbemLocator1.ConnectServer(Server_, 'root\CIMV2',User_, Password_, '', '', 0, nil);

 SObject:= Service.Get(Win32ClassName, wbemFlagUseAmendedQualifiers, nil);
 ObjectSet:= SObject.Instances_(0, nil);
 Enum:= (ObjectSet._NewEnum) as IEnumVariant;

 while (Enum.Next(1, TempObj, Value) = S_OK) do
 begin
   SObject:= IUnknown(TempObj) as SWBemObject;
   PropSet:= SObject.Properties_;
   PropEnum:= (PropSet._NewEnum) as IEnumVariant;
   ListItem:= ListView.Items.Add;
 // свойства
   StatusBar1.SimpleText:= StatusBar1.SimpleText + '.';
   while (PropEnum.Next(1, TempObj, Value) = S_OK) do
   begin
     SProp:= IUnknown(TempObj) as SWBemProperty;
     if ListView.Items.Count = 1 then
     begin
       Column:= ListView.Columns.Add;
       Column.Width:= 100;
       Column.Caption:= SProp.Name;
     end;
     ShowProp(SProp);
   end;
 end; { while }
 ListView.Items.EndUpdate;
 StatusBar1.SimpleText:= ' Done';
end;

procedure TForm1.ShowProp(SProp: ISWbemProperty);
var
 StrValue: string;
 Count: Cardinal;
begin
 StrValue:= '';
 if VarIsNull(SProp.Get_Value) then
   StrValue:= '<empty>'
 else
   case SProp.CIMType of
//******************************************************************//
     wbemCimtypeUint8, wbemCimtypeSint8, wbemCimtypeUint16, wbemCimtypeSint16,
     wbemCimtypeUint32, wbemCimtypeSint32, wbemCimtypeSint64:
     if VarIsArray(SProp.Get_Value) then
     begin
       if VarArrayHighBound(SProp.Get_Value, 1) > 0 then
         for Count:= 1 to VarArrayHighBound(SProp.Get_Value, 1) do
           StrValue:= StrValue + ' ' + IntToStr(SProp.Get_Value[Count]);
     end
     else
       StrValue:= IntToStr(SProp.Get_Value);
//******************************************************************//
     wbemCimtypeReal32, wbemCimtypeReal64:
       StrValue:= FloatToStr(SProp.Get_Value);
//******************************************************************//
     wbemCimtypeBoolean:
       if SProp.Get_Value then
         StrValue:= 'True'
       else
         StrValue:= 'False';
//******************************************************************//
       wbemCimtypeString, wbemCimtypeUint64:
         if VarIsArray(SProp.Get_Value) then
         begin
           if VarArrayHighBound(SProp.Get_Value, 1) > 0 then
             for Count := 1 to VarArrayHighBound(SProp.Get_Value, 1) do
               StrValue:= StrValue + ' ' + SProp.Get_Value[Count];
         end
         else
           StrValue:=  SProp.Get_Value;
//******************************************************************//
       wbemCimtypeDatetime:
         StrValue:=  SProp.Get_Value;
//******************************************************************//
       wbemCimtypeReference:
       begin
//
       end;
//******************************************************************//
         wbemCimtypeChar16:
           StrValue:= '16-bit char';
//******************************************************************//
         wbemCimtypeObject:
           StrValue:= 'CIM Object';
//******************************************************************//
     else
       MessageBox(0, PChar('Unknown type'), PChar(Form1.Caption), MB_OK);
   end; {case}
   if ListItem.Caption = '' then
     ListItem.Caption := StrValue
   else
     ListItem.SubItems.Add(StrValue);
end;

end.


VirEx   (2005-12-03 20:08:00) [3]

файл Unit1.dfm:
object Form1: TForm1
 Left = 198
 Top = 110
 AutoScroll = False
 Caption = 'VirEx: WMI info'
 ClientHeight = 292
 ClientWidth = 316
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'MS Sans Serif'
 Font.Style = []
 OldCreateOrder = False
 ShowHint = True
 DesignSize = (
   316
   292)
 PixelsPerInch = 96
 TextHeight = 13
 object Bevel1: TBevel
   Left = 0
   Top = 241
   Width = 316
   Height = 30
   Align = alClient
 end
 object Button1: TButton
   Left = 144
   Top = 247
   Width = 169
   Height = 21
   Anchors = [akLeft, akBottom]
   Caption = #1055#1086#1083#1091#1095#1080#1090#1100' '#1089#1074#1086#1081#1089#1090#1074#1072' '#1082#1083#1072#1089#1089#1072
   TabOrder = 0
   OnClick = Button1Click
 end
 object ListView1: TListView
   Left = 0
   Top = 81
   Width = 316
   Height = 160
   Align = alTop
   Anchors = [akLeft, akTop, akRight, akBottom]
   Columns = <>
   GridLines = True
   TabOrder = 1
   ViewStyle = vsReport
 end
 object StatusBar1: TStatusBar
   Left = 0
   Top = 271
   Width = 316
   Height = 21
   Panels = <>
 end
 object ComboBox1: TComboBox
   Left = 3
   Top = 247
   Width = 137
   Height = 21
   Anchors = [akLeft, akBottom]
   ItemHeight = 13
   TabOrder = 3
   Text = 'Win32_Fan'
   Items.Strings = (
     'Win32_Fan'
     'Win32_TemperatureProbe'
     'Win32_Process'
     'Win32_Processor'
     'Win32_ComputerSystem'
     'Win32_OperatingSystem'
     'Win32_DiskDrive'
     'Win32_DiskPartition'
     'Win32_VideoController'
     'Win32_Keyboard'
     'Win32_PointingDevice'
     'Win32_CDROMDrive'
     'Win32_NetworkAdapter'
     'Win32_NetworkAdapterConfiguration'
     'Win32_LogicalMemoryConfiguration'
     'Win32_PageFile'
     'Win32_NTLogEventComputer'
     'Win32_ShortCutFile')
 end
 object Panel1: TPanel
   Left = 0
   Top = 0
   Width = 316
   Height = 81
   Align = alTop
   TabOrder = 4
   object Label1: TLabel
     Left = 8
     Top = 8
     Width = 37
     Height = 13
     Caption = #1057#1077#1088#1074#1077#1088
   end
   object Label2: TLabel
     Left = 8
     Top = 32
     Width = 96
     Height = 13
     Caption = #1048#1084#1103' '#1087#1086#1083#1100#1079#1086#1074#1072#1090#1077#1083#1103
   end
   object Label3: TLabel
     Left = 8
     Top = 56
     Width = 112
     Height = 13
     Caption = #1055#1072#1088#1086#1083#1100' '#1087#1086#1083#1100#1079#1086#1074#1072#1090#1077#1083#1103
   end
   object EdServer: TEdit
     Left = 128
     Top = 3
     Width = 185
     Height = 21
     Hint = #1048#1084#1103' '#1089#1077#1088#1074#1077#1088#1072' (. - '#1083#1086#1082#1072#1083#1100#1085#1099#1081' '#1082#1086#1084#1087#1100#1102#1090#1077#1088'), '#1085#1072#1087#1088#1080#1084#1077#1088': UserComp'
     TabOrder = 0
     Text = '.'
   end
   object EdUser: TEdit
     Left = 128
     Top = 27
     Width = 185
     Height = 21
     TabOrder = 1
   end
   object EdPassword: TEdit
     Left = 128
     Top = 51
     Width = 185
     Height = 21
     TabOrder = 2
   end
 end
 object SWbemLocator1: TSWbemLocator
   AutoConnect = False
   ConnectKind = ckRunningOrNew
   Left = 600
   Top = 48
 end
end


VirEx   (2005-12-03 20:07:00) [4]

во первых нужно получить WbemScripting_TLB.pas в Delphi 7:
Project - Import Type Library ... - Microsoft WMI Scripting v1.2 Library


Volf_555   (2005-12-03 13:10:00) [5]

А какой модуль подключить чтобы работать с Win32_NetworkAdapter?


Shurshik   (2005-11-30 18:04:00) [6]

API нет, зато есть WMI-класс Win32_NetworkAdapter (вроде бы так называется - под рукой нет MSDN). Создаём его, а уж у него есть подходящие методы. Любые свойства сетевого адаптера прочитать и поставить этим классом. А там обычно есть свойство Сетевой адрес - это MAC и есть. Другое дело, что этот MAC не прошивается в сетевуху.


Alex Konshin   (2005-11-29 14:17:00) [7]

MAC адрес на некоторых картах меняется, но стандартного API для этого нет и быть не должно.


Lamer@fools.ua   (2005-11-29 08:46:00) [8]

> изменить IP
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/ip_helper_function_reference.asp

> MAC-адреса
Нельзя, AFAIK.


Васяня   (2005-11-29 04:55:00) [9]

а исходник перебивающий серийник винта дать?


Наверх

Титульная страница Поиск, карта сайта Написать письмо