Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2011, 18:21   #1
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию Сетевой адаптер

Привет Всем!

Вот месяц как уже работаю тех. спец-ом в фирме, проводим Beeline Интернет. Написал программку которая делает все за монтажника.
Заносит данные в реестр
Включает сетевой адаптер (если есть)
Находит сетевой адаптер, с нашими IP (шлюз)
Пингует его
Устанавливает Firefox Portable
Создает соединение для интернета

Собственно хотел узнать, можно ли управлять включением/отключение сетевой?

У меня это сделано, но через программу cnic.exe, охото чтобы из программы отключать/включать, получать статус

Последний раз редактировалось ZuBy; 02.12.2011 в 18:23.
ZuBy вне форума Ответить с цитированием
Старый 02.12.2011, 23:07   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...используйте devcon c параметрами командной строки в своей программе ...через пайпы общение.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 02.12.2011, 23:10   #3
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

raxp, я как раз от этого метода отказываюсь!
у меня cnic.exe, а я хочу чтобы программно через свою, это возможно?
ZuBy вне форума Ответить с цитированием
Старый 03.12.2011, 12:19   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Да, SetupAPI ...devcon использует его интерфейсы. Но зачем изобретать "велосипед"? Использование devcon свободное.

Цитата:
Ограничений на свободное распространение программы DevCon нет. Она предназначена для использования в качестве средства отладки и разработки. Пользователи имеют право вносить изменения в программу в соответствии со своими потребностями. В состав программы включен пример совместного применения функций SetupAPI и CfgMgr32 для перечисления устройств и выполнения над ними определенных действий.

Примечание. Исходный программный код программы DevCon (вместе с документацией) входит в состав пакета Driver Development Kit для Windows XP (можно загрузить с веб-узла http://www.microsoft.com/whdc/devtools/ddk/default.mspx) и находится в папке DDK root\Src\Setup\Devcon.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 03.12.2011 в 12:22.
raxp вне форума Ответить с цитированием
Старый 03.12.2011, 17:21   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот пример вкл/выкл флэш-накопителя :
Код:
//  * Unit Name : USBStateChange
//  * Purpose   : Пример включения.отключения USB накопителей
//  * Author    : Александр (Rouse_) Багель
//  * Copyright : © Fangorn Wizards Lab 1998 - 2007
//  * Version   : 1.00
//  * Home Page : http://rouse.drkb.ru
//  ****************************************************************************
//
 
unit USBStateChange;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm6 = class(TForm)
    btnEnable: TButton;
    btnDisable: TButton;
    procedure btnEnableClick(Sender: TObject);
    procedure btnDisableClick(Sender: TObject);
  end;
 
var
  Form6: TForm6;
 
implementation
 
{$R *.dfm}
 
type
  PSP_CLASSINSTALL_HEADER = ^SP_CLASSINSTALL_HEADER;
  SP_CLASSINSTALL_HEADER = record
    cbSize: DWORD;
    InstallFunction: Cardinal;
  end;
 
  PSP_PROPCHANGE_PARAMS = ^SP_PROPCHANGE_PARAMS;
  SP_PROPCHANGE_PARAMS = record
    ClassInstallHeader: SP_CLASSINSTALL_HEADER;
    StateChange: DWORD;
    Scope: DWORD;
    HwProfile: DWORD;
  end;
 
  PSP_DEVINFO_DATA = ^SP_DEVINFO_DATA;
  SP_DEVINFO_DATA = record
    cbSize: DWORD;
    ClassGuid: TGUID;
    DevInst: DWORD;
    Reserved: Longint;
  end;
 
  function SetupDiGetClassDevs(const ClassGuid: PGUID; Enumerator: PChar;
    hwndParent: HWND; Flags: DWORD): DWORD; stdcall;
    external 'Setupapi.dll' name 'SetupDiGetClassDevsA';
 
  function SetupDiDestroyDeviceInfoList(DeviceInfoSet: DWORD): BOOL; stdcall;
    external 'Setupapi.dll';
 
  function SetupDiEnumDeviceInfo(DeviceInfoSet: DWORD; MemberIndex: DWORD;
    DeviceInfoData: PSP_DEVINFO_DATA): BOOL; stdcall;
    external 'Setupapi.dll';
 
  function SetupDiCallClassInstaller(InstallFunction: DWORD;
    DeviceInfoSet: DWORD; DeviceInfoData: PSP_DEVINFO_DATA): BOOL; stdcall;
    external 'setupapi.dll';
 
  function SetupDiGetDeviceRegistryProperty(DeviceInfoSet: DWORD;
    DeviceInfoData: PSP_DEVINFO_DATA; Propertys: DWORD; PropertyRegDataType: PWORD;
    PropertyBuffer: PByte; PropertyBufferSize: DWORD; RequiredSize: PWORD): BOOL; stdcall;
    external 'Setupapi.dll' name 'SetupDiGetDeviceRegistryPropertyA';
 
  function SetupDiSetClassInstallParams(DeviceInfoSet: DWORD;
    DeviceInfoData: PSP_DEVINFO_DATA; ClassInstallParams: PSP_CLASSINSTALL_HEADER;
    ClassInstallParamsSize: DWORD): BOOL; stdcall;
    external 'setupapi.dll' name 'SetupDiSetClassInstallParamsA';
 
const
  DICS_ENABLE = $00000001;
  DICS_DISABLE = $00000002;
  DIF_PROPERTYCHANGE = $00000012;
  DICS_FLAG_GLOBAL = $00000001;
  DIGCF_PRESENT = $00000002;
  SPDRP_COMPATIBLEIDS = $00000002;
 
  DISK_GUID: TGUID = '{4D36E967-E325-11CE-BFC1-08002BE10318}';
 
function ChangeDeviceState(AState: DWORD): Boolean;
var
  pcp: SP_PROPCHANGE_PARAMS;
  DevInfoData: SP_DEVINFO_DATA;
  hDevInfo1:  DWORD;
  I, DataT, Buffersize: DWORD;
  Buffer: PAnsiChar;
begin
  Result := False;
  pcp.ClassInstallHeader.cbSize := sizeof(SP_CLASSINSTALL_HEADER);
  pcp.ClassInstallHeader.InstallFunction := DIF_PROPERTYCHANGE;
  pcp.StateChange := AState;
  pcp.Scope := DICS_FLAG_GLOBAL;
  pcp.HwProfile := 0;
  hDevInfo1 := SetupDiGetClassDevs(@DISK_GUID, nil, HWND(nil), DIGCF_PRESENT);
  try
    DevInfoData.cbSize := sizeof(SP_DEVINFO_DATA);
    I := 0;
    Buffersize := 500;
    GetMem(Buffer, Buffersize);
    try
      while SetupDiEnumDeviceInfo(hDevInfo1, I, @DevInfoData) do
      begin
        SetupDiGetDeviceRegistryProperty(hDevInfo1, @DevInfoData,
          SPDRP_COMPATIBLEIDS, @DataT, PByte(Buffer), Buffersize, nil);
        if buffer = 'USBSTOR\Disk' then
        begin
          if not SetupDiSetClassInstallParams(hDevInfo1,
            @DevInfoData, PSP_CLASSINSTALL_HEADER(@pcp), SizeOf(pcp)) then Exit;
          if not SetupDiCallClassInstaller(
            DIF_PROPERTYCHANGE, hDevInfo1, @DevInfoData) then Exit;
          Result := True;
        end;
        Inc(I);
      end;
    finally
      FreeMem(Buffer);
    end;
  finally
    SetupDiDestroyDeviceInfoList(hDevInfo1);
  end;
end;
 
procedure TForm6.btnEnableClick(Sender: TObject);
begin
  if ChangeDeviceState(DICS_ENABLE) then
    ShowMessage('Устройство включено');
end;
 
procedure TForm6.btnDisableClick(Sender: TObject);
begin
  if ChangeDeviceState(DICS_DISABLE) then
    ShowMessage('Устройство отключено');
end;
 
end.
Рекомендуют заменить GUID флэшки на GUID сетевухи и все получится.
Узнать GUID сетевухи можно так :
http://rouse.drkb.ru/network.php#netifenum
mihali4 вне форума Ответить с цитированием
Старый 03.12.2011, 18:41   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...в коде Розе нужно поменять не только гайд, но в принципе всё так.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 04.12.2011, 11:21   #7
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

за код и ссылки спасибо, но не работает, если поставить GUID адаптера.
еще интересует, GUID адаптера у всех разный же?

raxp, можешь подсказать что еще надо менять кроме GUID и USBSTOR\Disk

Последний раз редактировалось ZuBy; 04.12.2011 в 11:23.
ZuBy вне форума Ответить с цитированием
Старый 04.12.2011, 14:29   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...а загляни в исходники devcon, там все прозрачно
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 04.12.2011, 16:07   #9
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

заглянул, но мало чего понял. т.к с Си не знаком(
ZuBy вне форума Ответить с цитированием
Старый 05.12.2011, 11:37   #10
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Я делал проще, сеть отключал так, в проекте прописывал devcon.exe disable PCI\VEN_10B7 - последнее в строке это сетевой адаптер нашел его в реестре, думаю что и с USB адаптером работать будет, только строку с устройством нужно изменить. Сделай в своем проекте поиск сетевых адаптеров в реестре, а потом командой отключай и включай и скачай devcon.exe.


Отключаем с ожеданием
Код:
var
si: Tstartupinfo;
p: Tprocessinformation;
begin

FillChar(Si, SizeOf(Si) , 0);
with Si do
begin
 application.ProcessMessages;
  cb := SizeOf(Si);
  dwFlags := startf_UseShowWindow;
  wShowWindow := SW_HIDE;
end;
Createprocess(nil, pchar('devcon.exe disable PCI\VEN_10B7'), nil, nil, false, Create_default_error_mode, nil, nil, si, p);
Waitforsingleobject(p.hProcess, infinite);
end;

Последний раз редактировалось Aliens_wolfs; 05.12.2011 в 20:25.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сетевой адаптер SMC9432BTX Volt Свободное общение 0 11.08.2011 18:54
usb блютуз адаптер. bayker Компьютерное железо 3 11.06.2010 15:21
Как програмно включить\выключить сетевой адаптер SeRhy Общие вопросы Delphi 8 16.03.2010 23:37
Не подключается BT-адаптер на стандартных драйверах Web-Gangsta Компьютерное железо 6 22.02.2010 16:49