const
   discVerb = '禁用(&B)';
   connVerb = '启用(&A)';
function DisableEthernet(const EthName: String): Boolean;
var
  cpFolder: Folder;
  nwFolder: Folder;
  nVerbs: FolderItemVerbs;
  i,j,k: integer;
  aItem: TListItem;
begin
  result := false;
  cpFolder := Form1.shell1.NameSpace(3);
  if cpFolder <> nil then
  begin
    for i := 0 to cpFolder.items.Count-1 do
    begin
      if cpFolder.Items.Item(i).Name = '网络和拨号连接' then
      begin
        nwFolder := cpFolder.items.item(i).GetFolder as Folder;
        if nwFolder <> nil then
        begin
          for j :=0 to nwFolder.items.Count-1 do
          begin
            if nwFolder.Items.Item(j).Name = EthName then
            begin
              nVerbs := nwFolder.Items.Item(j).Verbs;
              for k := 0 to  nVerbs.Count-1 do
              begin
                if nVerbs.Item(k).Name = discVerb then
                begin
                  nVerbs.Item(k).DoIt;
                  aItem := Form1.lvLog.Items.Add;
                  aItem.Caption := FormatDateTime('yyyy-mm-dd hh:mm:ss',now);
                  aItem.SubItems.Add(EthName);
                  aItem.SubItems.Add(discVerb);
                  Result := True;
                end;
              end;
            end;
          end;
        end;
      end;
    end;
    if nwFolder = nil then
       showmessage('Network and Dial-up Connections not found');
  end
  else
    showmessage('control panel not found');end;

解决方案 »

  1.   

    我很早就看到这个了,可是在DELPHI里面Folder这个类型的变量是要USE什么东西才不会编译出错呢?还有,启用网卡的有没有?
      

  2.   

    怎么没有注释啊,看不大懂
    看你也没调用什么API啊,怎么实现的?
    不明白
      

  3.   

    [email protected]这个是我的邮箱,naughtyboy (重归起跑线) 可不可以把整个程序打包发给我呢?谢谢
    另:在98操作系统下是否可用?
      

  4.   

    98下不行
    这种方法是在2000下的,是通过shell来完成
    import libary->Microsoft Shell Controls And Automation
    操作过程就相当与
      控制面板->网络和拨号连接->本地连接  然后调用右键的禁用命令另外还可以使用Api: SetIfEntryvar
      pIfRow: MIB_IFROW;
      pAdpInfo: PIP_ADAPTER_INFO;
      oBufLen: ULONG;
      ret : Integer;
    begin
      oBufLen := sizeof(IP_ADAPTER_INFO);
      GetMem(pAdpInfo,sizeof(IP_ADAPTER_INFO));
      ret := GetAdaptersInfo(pAdpInfo,oBufLen);
      if ret <> 0 then
      begin
        ShowMessage('GetAdapterInfo Error');
        Exit;
      end;
      ZeroMemory(@pIfRow,sizeof(MIB_IFROW));
      pIfRow.dwIndex := pAdpInfo^.Index;
      pIfRow.dwAdminStatus :=  MIB_IF_ADMIN_STATUS_DOWN;
      ret := SetIfEntry(pIfRow);
      if ret <> 0 then
      begin
        ShowMessage('SetIfEntry Error');
        Exit;
      end;
    end;