![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в 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]а исходник перебивающий серийник винта дать?