|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Connect. dll windows 7 описание всех функций
Привет всем.
Направте в нужное русло. Проблема в общем а следующем пишу программу которая будет хранить настройки поотакола TCP/IP IP, dns и так далее, и при необходимости задавать их гуделиу сетевому адаптору. Дело встало изза того что Вин7 уже не воспринимает некоторые функции win api от ХР и я не могу найти их реализацию для Вин7. В интернете нашел одну статью как создать VPN с помощью библиотеки connect. dll заглянув в нее обнаружил целую кучу функций но какая для чего так и не разобрался так как не понял принципа их реализации, хотел бы знать может кто видил описание всех функции, или знает как найти описание на msdn у меня пока результат поиска 0. Последний раз редактировалось RainMEN2009, 29.03.2012 в 06:26. |
#2
|
|||
|
|||
Код:
unit UMain; interface uses Windows, SysUtils, Classes, Controls, Forms, StdCtrls, ComCtrls, IpTypes, IpHlpApi, Dialogs, sComboBox; type TFMain = class(TForm) lv_net: TListView; sComboBox1: TsComboBox; sComboBox2: TsComboBox; sComboBox3: TsComboBox; procedure lv_netData(Sender: TObject; Item: TListItem); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var FMain: TFMain; gInfoStr:AnsiString; gsAdaList:TStringList; LsTempList:TStringList; implementation {$R *.dfm} function GetAdaInfo2(out AInfoStr:AnsiString; const AOnlyMac:Boolean):Boolean; const cntAdaCount=2; cntAdaTypesInt:array[0..cntAdaCount] of Cardinal=($6,$47,$90); cntAdaTypesDef:array[0..cntAdaCount] of AnsiString= ('Ethernet Network Adapter', 'Wireless Network Adapter', 'FireWire Network Adapter'); var i:Integer; bf:Cardinal; LqFind:Boolean; LsMac:AnsiString; LpAdapterAddresses:PIP_ADAPTER_ADDRESSES; begin Result:=True; AInfoStr:=''; try bf:=0; if GetAdaptersAddresses(0,0,nil,nil,@bf)<>ERROR_BUFFER_OVERFLOW then Abort; try GetMem(LpAdapterAddresses,bf); if GetAdaptersAddresses(0,0,nil,LpAdapterAddresses,@bf)<>ERROR_SUCCESS then Abort; while LpAdapterAddresses<>nil do begin try //определяем тип адаптера LqFind:=False; for i:=0 to cntAdaCount do if LpAdapterAddresses^.IfType=cntAdaTypesInt[i] then // i индекс адаптера в сетевом окружении begin LqFind:=True; Break; end; if not LqFind then Continue; //собираем информацию об устройстве // '%s%s (%s)'#13#10'%s'#13#10 маска вывода информации if not AOnlyMac then AInfoStr:=Format('%s%s '#13#10'%s'#13#10 , [AInfoStr,LpAdapterAddresses^.FriendlyName, LpAdapterAddresses^.Description,cntAdaTypesDef[i]]); LsMac:=''; if LpAdapterAddresses^.PhysicalAddressLength=0 then Continue; for i:=0 to LpAdapterAddresses^.PhysicalAddressLength-1 do LsMac:=LsMac+IntToHex(LpAdapterAddresses^.PhysicalAddress[i],2)+'-'; SetLength(LsMac,Length(LsMac)-1); AInfoStr:=Format('%s%s'#13#10#13#10,[AInfoStr,LsMac]); finally LpAdapterAddresses:=LpAdapterAddresses^.Next; end; end; finally FreeMem(LpAdapterAddresses,bf); end; except Result:=False; // AInfoStr:=''; end; end; { function GetAdaInfo(out AInfoStr:AnsiString; const AOnlyMac:Boolean):Boolean; const cntAdaCount=1; cntAdaTypesInt:array[0..cntAdaCount] of Cardinal=(6,71); cntAdaTypesDef:array[0..cntAdaCount] of AnsiString= ('Ethernet Network Adapter', 'Wireless Network Adapter'); var i:Integer; bf:Cardinal; LqFind:Boolean; LsMac:AnsiString; LpAdapterInfo:PIP_ADAPTER_INFO; begin Result:=True; AInfoStr:=''; try bf:=0; if GetAdaptersInfo(nil,bf)<>ERROR_BUFFER_OVERFLOW then Abort; try New(LpAdapterInfo); if GetAdaptersInfo(LpAdapterInfo,bf)<>ERROR_SUCCESS then Abort; while LpAdapterInfo<>nil do begin try //определяем тип адаптера LqFind:=False; for i:=0 to cntAdaCount do if LpAdapterInfo^.Type_=cntAdaTypesInt[i] then begin LqFind:=True; Break; end; if not LqFind then Continue; //собираем информацию об устройстве if not AOnlyMac then AInfoStr:=Format('%s%s'#13#10'%s'#13#10, [AInfoStr,LpAdapterInfo^.Description,cntAdaTypesDef[i]]); LsMac:=''; if LpAdapterInfo^.AddressLength=0 then Continue; for i:=0 to LpAdapterInfo^.AddressLength-1 do LsMac:=LsMac+IntToHex(LpAdapterInfo^.Address[i],2)+'-'; SetLength(LsMac,Length(LsMac)-1); AInfoStr:=Format('%s%s'#13#10#13#10,[AInfoStr,LsMac]); finally LpAdapterInfo:=LpAdapterInfo^.Next; end; end; finally Dispose(LpAdapterInfo); end; except Result:=False; AInfoStr:=''; end; end; } procedure TFMain.lv_netData(Sender: TObject; Item: TListItem); var i:Integer; begin LsTempList:=TStringList.Create; LsTempList.Text:=gsAdaList[Item.Index];//добовляет в TList строку Item.Caption:=LsTempList[0]; sComBobox1.Items.Add(LsTempList[0]);// Добовляем в Combobox наименование адаптора sComBobox2.Items.Add(LsTempList[1]); sComBobox3.Items.Add(LsTempList[2]); Item.SubItems.Add(LsTempList[1]); Item.SubItems.Add(LsTempList[2]); // добовляем тип адаптера и МАС адрес /// sCombobox1.Items.Add(LsTempList.Text); end; procedure TFMain.FormShow(Sender: TObject); begin if not GetAdaInfo2(gInfoStr,False) then Exit;//здесь можно выбрать версию функции //ShowMEssage(gInfoStr); // Кстати зырь. подключись ко мне. sCombobox1.Items.Clear; gsAdaList:=TStringList.Create; gsAdaList.LineBreak:=#13#10#13#10; gsAdaList.Text:=gInfoStr; lv_net.AllocBy:=gsAdaList.Count; end; procedure TFMain.FormClose(Sender: TObject; var Action: TCloseAction); begin FreeAndNil(gsAdaList); end; end. Нащёл Вот что, вроде бы всё работает но немогу понять почему когда я добавляю sComBobox1.Items.Add(LsTempList[0]);// Добовляем в Combobox наименование адаптора то по чему то он добавляет название каждого адаптара по 3 раза, как ат этого избавиться и упрости |